Rev 3742 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 3742 | Rev 4638 | ||
|---|---|---|---|
| Line 29... | Line 29... | ||
| 29 | /** @addtogroup sparc64interrupt |
29 | /** @addtogroup sparc64interrupt |
| 30 | * @{ |
30 | * @{ |
| 31 | */ |
31 | */ |
| 32 | /** |
32 | /** |
| 33 | * @file |
33 | * @file |
| 34 | * @brief This file contains interrupt vector trap handler. |
34 | * @brief This file contains level N interrupt and inter-processor interrupt |
| - | 35 | * trap handler. |
|
| 35 | */ |
36 | */ |
| 36 | - | ||
| 37 | #ifndef KERN_sparc64_TRAP_INTERRUPT_H_ |
37 | #ifndef KERN_sparc64_INTERRUPT_TRAP_H_ |
| 38 | #define KERN_sparc64_TRAP_INTERRUPT_H_ |
38 | #define KERN_sparc64_INTERRUPT_TRAP_H_ |
| 39 | - | ||
| 40 | #include <arch/trap/trap_table.h> |
- | |
| 41 | #include <arch/stack.h> |
- | |
| 42 | - | ||
| 43 | /* IMAP register bits */ |
- | |
| 44 | #define IGN_MASK 0x7c0 |
- | |
| 45 | #define INO_MASK 0x1f |
- | |
| 46 | #define IMAP_V_MASK (1ULL << 31) |
- | |
| 47 | - | ||
| 48 | #define IGN_SHIFT 6 |
- | |
| 49 | - | ||
| 50 | - | ||
| 51 | /* Interrupt ASI registers. */ |
- | |
| 52 | #define ASI_INTR_W 0x77 |
- | |
| 53 | #define ASI_INTR_DISPATCH_STATUS 0x48 |
- | |
| 54 | #define ASI_INTR_R 0x7f |
- | |
| 55 | #define ASI_INTR_RECEIVE 0x49 |
- | |
| 56 | - | ||
| 57 | /* VA's used with ASI_INTR_W register. */ |
- | |
| 58 | #if defined (US) |
- | |
| 59 | #define ASI_UDB_INTR_W_DATA_0 0x40 |
- | |
| 60 | #define ASI_UDB_INTR_W_DATA_1 0x50 |
- | |
| 61 | #define ASI_UDB_INTR_W_DATA_2 0x60 |
- | |
| 62 | #elif defined (US3) |
- | |
| 63 | #define VA_INTR_W_DATA_0 0x40 |
- | |
| 64 | #define VA_INTR_W_DATA_1 0x48 |
- | |
| 65 | #define VA_INTR_W_DATA_2 0x50 |
- | |
| 66 | #define VA_INTR_W_DATA_3 0x58 |
- | |
| 67 | #define VA_INTR_W_DATA_4 0x60 |
- | |
| 68 | #define VA_INTR_W_DATA_5 0x68 |
- | |
| 69 | #define VA_INTR_W_DATA_6 0x80 |
- | |
| 70 | #define VA_INTR_W_DATA_7 0x88 |
- | |
| 71 | #endif |
- | |
| 72 | #define VA_INTR_W_DISPATCH 0x70 |
- | |
| 73 | - | ||
| 74 | /* VA's used with ASI_INTR_R register. */ |
- | |
| 75 | #if defined(US) |
- | |
| 76 | #define ASI_UDB_INTR_R_DATA_0 0x40 |
- | |
| 77 | #define ASI_UDB_INTR_R_DATA_1 0x50 |
- | |
| 78 | #define ASI_UDB_INTR_R_DATA_2 0x60 |
- | |
| 79 | #elif defined (US3) |
- | |
| 80 | #define VA_INTR_R_DATA_0 0x40 |
- | |
| 81 | #define VA_INTR_R_DATA_1 0x48 |
- | |
| 82 | #define VA_INTR_R_DATA_2 0x50 |
- | |
| 83 | #define VA_INTR_R_DATA_3 0x58 |
- | |
| 84 | #define VA_INTR_R_DATA_4 0x60 |
- | |
| 85 | #define VA_INTR_R_DATA_5 0x68 |
- | |
| 86 | #define VA_INTR_R_DATA_6 0x80 |
- | |
| 87 | #define VA_INTR_R_DATA_7 0x88 |
- | |
| 88 | #endif |
- | |
| 89 | - | ||
| 90 | /* Shifts in the Interrupt Vector Dispatch virtual address. */ |
- | |
| 91 | #define INTR_VEC_DISPATCH_MID_SHIFT 14 |
- | |
| 92 | - | ||
| 93 | /* Bits in the Interrupt Dispatch Status register. */ |
- | |
| 94 | #define INTR_DISPATCH_STATUS_NACK 0x2 |
- | |
| 95 | #define INTR_DISPATCH_STATUS_BUSY 0x1 |
- | |
| 96 | 39 | ||
| 97 | #define TT_INTERRUPT_LEVEL_1 0x41 |
40 | #define TT_INTERRUPT_LEVEL_1 0x41 |
| 98 | #define TT_INTERRUPT_LEVEL_2 0x42 |
41 | #define TT_INTERRUPT_LEVEL_2 0x42 |
| 99 | #define TT_INTERRUPT_LEVEL_3 0x43 |
42 | #define TT_INTERRUPT_LEVEL_3 0x43 |
| 100 | #define TT_INTERRUPT_LEVEL_4 0x44 |
43 | #define TT_INTERRUPT_LEVEL_4 0x44 |
| Line 108... | Line 51... | ||
| 108 | #define TT_INTERRUPT_LEVEL_12 0x4c |
51 | #define TT_INTERRUPT_LEVEL_12 0x4c |
| 109 | #define TT_INTERRUPT_LEVEL_13 0x4d |
52 | #define TT_INTERRUPT_LEVEL_13 0x4d |
| 110 | #define TT_INTERRUPT_LEVEL_14 0x4e |
53 | #define TT_INTERRUPT_LEVEL_14 0x4e |
| 111 | #define TT_INTERRUPT_LEVEL_15 0x4f |
54 | #define TT_INTERRUPT_LEVEL_15 0x4f |
| 112 | 55 | ||
| 113 | #define TT_INTERRUPT_VECTOR_TRAP 0x60 |
- | |
| 114 | - | ||
| 115 | #define INTERRUPT_LEVEL_N_HANDLER_SIZE TRAP_TABLE_ENTRY_SIZE |
56 | #define INTERRUPT_LEVEL_N_HANDLER_SIZE TRAP_TABLE_ENTRY_SIZE |
| - | 57 | ||
| - | 58 | /* IMAP register bits */ |
|
| - | 59 | #define IGN_MASK 0x7c0 |
|
| - | 60 | #define INO_MASK 0x1f |
|
| 116 | #define INTERRUPT_VECTOR_TRAP_HANDLER_SIZE TRAP_TABLE_ENTRY_SIZE |
61 | #define IMAP_V_MASK (1ULL << 31) |
| - | 62 | ||
| - | 63 | #define IGN_SHIFT 6 |
|
| - | 64 | ||
| 117 | 65 | ||
| 118 | #ifdef __ASM__ |
66 | #ifdef __ASM__ |
| 119 | .macro INTERRUPT_LEVEL_N_HANDLER n |
67 | .macro INTERRUPT_LEVEL_N_HANDLER n |
| 120 | mov \n - 1, %g2 |
68 | mov \n - 1, %g2 |
| 121 | PREEMPTIBLE_HANDLER exc_dispatch |
69 | PREEMPTIBLE_HANDLER exc_dispatch |
| 122 | .endm |
70 | .endm |
| 123 | - | ||
| 124 | .macro INTERRUPT_VECTOR_TRAP_HANDLER |
- | |
| 125 | PREEMPTIBLE_HANDLER interrupt |
- | |
| 126 | .endm |
71 | #endif |
| 127 | #endif /* __ASM__ */ |
- | |
| 128 | 72 | ||
| 129 | #ifndef __ASM__ |
73 | #ifndef __ASM__ |
| 130 | 74 | ||
| 131 | #include <arch/interrupt.h> |
75 | #include <arch/interrupt.h> |
| 132 | 76 | ||
| 133 | extern void interrupt(int n, istate_t *istate); |
77 | extern void interrupt(int n, istate_t *istate); |
| 134 | #endif /* !def __ASM__ */ |
78 | #endif /* !def __ASM__ */ |
| 135 | 79 | ||
| - | 80 | ||
| - | 81 | #if defined (SUN4U) |
|
| - | 82 | #include <arch/trap/sun4u/interrupt.h> |
|
| - | 83 | #elif defined (SUN4V) |
|
| - | 84 | #include <arch/trap/sun4v/interrupt.h> |
|
| - | 85 | #endif |
|
| - | 86 | ||
| 136 | #endif |
87 | #endif |
| 137 | 88 | ||
| 138 | /** @} |
89 | /** @} |
| 139 | */ |
90 | */ |