Subversion Repositories HelenOS

Rev

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
 */