Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia64/include/interrupt.h

    rf902d36 r6da1013f  
    3636#define KERN_ia64_INTERRUPT_H_
    3737
    38 #include <typedefs.h>
    39 #include <arch/istate.h>
     38#include <arch/types.h>
     39#include <arch/register.h>
    4040
    4141/** ia64 has 256 INRs. */
    42 #define INR_COUNT  256
     42#define INR_COUNT       256
    4343
    4444/*
     
    4747 * to genarch.
    4848 */
    49 #define IVT_ITEMS  0
    50 #define IVT_FIRST  0
     49#define IVT_ITEMS       0
     50#define IVT_FIRST       0
    5151
    5252/** External Interrupt vectors. */
    5353
    54 #define VECTOR_TLB_SHOOTDOWN_IPI  0xf0
    55 
    56 #define INTERRUPT_SPURIOUS  15
    57 #define INTERRUPT_TIMER     255
    58 
    59 #define LEGACY_INTERRUPT_BASE  0x20
    60 
    61 #define IRQ_KBD    (0x01 + LEGACY_INTERRUPT_BASE)
    62 #define IRQ_MOUSE  (0x0c + LEGACY_INTERRUPT_BASE)
    63 #define IRQ_NE2000 (0x09 + LEGACY_INTERRUPT_BASE)
     54#define VECTOR_TLB_SHOOTDOWN_IPI 0xf0
     55#define INTERRUPT_TIMER         255
     56#define IRQ_KBD                 (0x01 + LEGACY_INTERRUPT_BASE)
     57#define IRQ_MOUSE               (0x0c + LEGACY_INTERRUPT_BASE)
     58#define INTERRUPT_SPURIOUS      15
     59#define LEGACY_INTERRUPT_BASE   0x20
    6460
    6561/** General Exception codes. */
    66 #define GE_ILLEGALOP     0
    67 #define GE_PRIVOP        1
    68 #define GE_PRIVREG       2
    69 #define GE_RESREGFLD     3
    70 #define GE_DISBLDISTRAN  4
    71 #define GE_ILLEGALDEP    8
     62#define GE_ILLEGALOP            0
     63#define GE_PRIVOP               1
     64#define GE_PRIVREG              2
     65#define GE_RESREGFLD            3
     66#define GE_DISBLDISTRAN         4
     67#define GE_ILLEGALDEP           8
    7268
    73 #define EOI  0  /**< The actual value doesn't matter. */
     69#define EOI     0               /**< The actual value doesn't matter. */
     70
     71typedef struct {
     72        uint128_t f2;
     73        uint128_t f3;
     74        uint128_t f4;
     75        uint128_t f5;
     76        uint128_t f6;
     77        uint128_t f7;
     78        uint128_t f8;
     79        uint128_t f9;
     80        uint128_t f10;
     81        uint128_t f11;
     82        uint128_t f12;
     83        uint128_t f13;
     84        uint128_t f14;
     85        uint128_t f15;
     86        uint128_t f16;
     87        uint128_t f17;
     88        uint128_t f18;
     89        uint128_t f19;
     90        uint128_t f20;
     91        uint128_t f21;
     92        uint128_t f22;
     93        uint128_t f23;
     94        uint128_t f24;
     95        uint128_t f25;
     96        uint128_t f26;
     97        uint128_t f27;
     98        uint128_t f28;
     99        uint128_t f29;
     100        uint128_t f30;
     101        uint128_t f31;
     102               
     103        uintptr_t ar_bsp;
     104        uintptr_t ar_bspstore;
     105        uintptr_t ar_bspstore_new;
     106        uint64_t ar_rnat;
     107        uint64_t ar_ifs;
     108        uint64_t ar_pfs;
     109        uint64_t ar_rsc;
     110        uintptr_t cr_ifa;
     111        cr_isr_t cr_isr;
     112        uintptr_t cr_iipa;
     113        psr_t cr_ipsr;
     114        uintptr_t cr_iip;
     115        uint64_t pr;
     116        uintptr_t sp;
     117       
     118        /*
     119         * The following variables are defined only for break_instruction
     120         * handler.
     121         */
     122        uint64_t in0;
     123        uint64_t in1;
     124        uint64_t in2;
     125        uint64_t in3;
     126        uint64_t in4;
     127        uint64_t in5;
     128        uint64_t in6;
     129} istate_t;
     130
     131static inline void istate_set_retaddr(istate_t *istate, uintptr_t retaddr)
     132{
     133        istate->cr_iip = retaddr;
     134        istate->cr_ipsr.ri = 0;         /* return to instruction slot #0 */
     135}
     136
     137static inline unative_t istate_get_pc(istate_t *istate)
     138{
     139        return istate->cr_iip;
     140}
     141
     142static inline int istate_from_uspace(istate_t *istate)
     143{
     144        return (istate->cr_iip) < 0xe000000000000000ULL;
     145}
    74146
    75147extern void *ivt;
    76148
    77 extern void general_exception(uint64_t, istate_t *);
    78 extern int break_instruction(uint64_t, istate_t *);
    79 extern void universal_handler(uint64_t, istate_t *);
    80 extern void nop_handler(uint64_t, istate_t *);
    81 extern void external_interrupt(uint64_t, istate_t *);
    82 extern void disabled_fp_register(uint64_t, istate_t *);
     149extern void general_exception(uint64_t vector, istate_t *istate);
     150extern int break_instruction(uint64_t vector, istate_t *istate);
     151extern void universal_handler(uint64_t vector, istate_t *istate);
     152extern void nop_handler(uint64_t vector, istate_t *istate);
     153extern void external_interrupt(uint64_t vector, istate_t *istate);
     154extern void disabled_fp_register(uint64_t vector, istate_t *istate);
    83155
    84 extern void trap_virtual_enable_irqs(uint16_t);
     156extern void trap_virtual_enable_irqs(uint16_t irqmask);
    85157
    86158#endif
Note: See TracChangeset for help on using the changeset viewer.