home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / gdb-4.16-base.tgz / gdb-4.16-base.tar / fsf / gdb / sim / ppc / interrupts.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-12-19  |  4.0 KB  |  145 lines

  1. /*  This file is part of the program psim.
  2.  
  3.     Copyright (C) 1994-1995, Andrew Cagney <cagney@highland.com.au>
  4.  
  5.     This program is free software; you can redistribute it and/or modify
  6.     it under the terms of the GNU General Public License as published by
  7.     the Free Software Foundation; either version 2 of the License, or
  8.     (at your option) any later version.
  9.  
  10.     This program is distributed in the hope that it will be useful,
  11.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.     GNU General Public License for more details.
  14.  
  15.     You should have received a copy of the GNU General Public License
  16.     along with this program; if not, write to the Free Software
  17.     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  18.  
  19.     */
  20.  
  21.  
  22. #ifndef _INTERRUPTS_H_
  23. #define _INTERRUPTS_H_
  24.  
  25. /* Interrupts:
  26.  
  27.    The code below handles two different types of interrupts.
  28.    Synchronous and Asynchronous.
  29.  
  30.    Synchronous:
  31.  
  32.    Interrupts that must immediately force either an abort or restart
  33.    of a current instruction are implemented by forcing an instruction
  34.    restart. (or to put it another way, long jump).  In looking at the
  35.    code it may occure to you that, for some interrupts, they could
  36.    return instead of restarting the cpu (eg system_call).  While true
  37.    (it once was like that) I've decided to make the behavour of all
  38.    interrupt routines roughly identical.
  39.  
  40.    Because, a cpu's recorded state (ie what is in the cpu structure)
  41.    is allowed to lag behind the cpu's true current state (eg PC not
  42.    updated) sycnronous interrupt handers are parameterized with the
  43.    the cpu being interrupted so that, as part of moddeling the
  44.    interrupt, the cpu's state can be updated.
  45.  
  46.    Asynchronous:
  47.  
  48.    Interrupts such as reset or external exception are delivered using
  49.    more normal (returning) functions.  It is assumed that these
  50.    functions are called out side of the normal processor execution
  51.    cycle. */
  52.  
  53.  
  54. /* Software generated interrupts.
  55.  
  56.    The below are generated by software driven events.  For instance,
  57.    an invalid instruction or access (virtual or physical) to an
  58.    invalid address */
  59.  
  60. typedef enum {
  61.   direct_store_storage_interrupt,
  62.   hash_table_miss_storage_interrupt,
  63.   protection_violation_storage_interrupt,
  64.   earwax_violation_storage_interrupt,
  65.   segment_table_miss_storage_interrupt,
  66.   earwax_disabled_storage_interrupt,
  67.   vea_storage_interrupt,
  68. } storage_interrupt_reasons;
  69.  
  70.  
  71. INLINE_INTERRUPTS\
  72. (void) data_storage_interrupt
  73. (cpu *processor,
  74.  unsigned_word cia,
  75.  unsigned_word ea,
  76.  storage_interrupt_reasons reason,
  77.  int is_store);
  78.  
  79. INLINE_INTERRUPTS\
  80. (void) instruction_storage_interrupt
  81. (cpu *processor,
  82.  unsigned_word cia,
  83.  storage_interrupt_reasons reason);
  84.  
  85. INLINE_INTERRUPTS\
  86. (void) alignment_interrupt
  87. (cpu *processor,
  88.  unsigned_word cia,
  89.  unsigned_word ra);
  90.  
  91. typedef enum {
  92.   floating_point_enabled_program_interrupt,
  93.   illegal_instruction_program_interrupt,
  94.   privileged_instruction_program_interrupt,
  95.   trap_program_interrupt,
  96.   nr_program_interrupt_reasons
  97. } program_interrupt_reasons;
  98.  
  99. INLINE_INTERRUPTS\
  100. (void) program_interrupt
  101. (cpu *processor,
  102.  unsigned_word cia,
  103.  program_interrupt_reasons reason);
  104.  
  105. INLINE_INTERRUPTS\
  106. (void) floating_point_unavailable_interrupt
  107. (cpu *processor,
  108.  unsigned_word cia);
  109.  
  110. INLINE_INTERRUPTS\
  111. (void) system_call_interrupt
  112. (cpu *processor,
  113.  unsigned_word cia);
  114.  
  115. INLINE_INTERRUPTS\
  116. (void) floating_point_assist_interrupt
  117. (cpu *processor,
  118.  unsigned_word cia);
  119.  
  120. INLINE_INTERRUPTS\
  121. (void) machine_check_interrupt
  122. (cpu *processor,
  123.  unsigned_word cia);
  124.  
  125. /* Hardware generated interrupts
  126.  
  127.    These hardware generated interrupt routines are called outside of
  128.    the instruction execution cycle and so return normally.
  129.  
  130.    More importantly, they assume that the current instruction address
  131.    held within the processor is correct.
  132.  
  133.    Return a non zero value if the interrupt was not successfully
  134.    delivered */
  135.  
  136. INLINE_INTERRUPTS\
  137. (int) decrementer_interrupt
  138. (cpu *processor);
  139.  
  140. INLINE_INTERRUPTS\
  141. (int) external_interrupt
  142. (cpu *processor);
  143.  
  144. #endif /* _INTERRUPTS_H_ */
  145.