i386 removal, part 11/x: Remove wrong machine/ setup in the boot Makefiles.
[dragonfly.git] / sys / platform / pc32 / i386 / msi_vector.s
1 /*
2  *      from: vector.s, 386BSD 0.1 unknown origin
3  * $FreeBSD: src/sys/i386/isa/apic_vector.s,v 1.47.2.5 2001/09/01 22:33:38 tegge Exp $
4  */
5
6 #include <machine/asmacros.h>
7 #include <machine/lock.h>
8 #include <machine/psl.h>
9 #include <machine/trap.h>
10
11 #include "assym.s"
12
13 /* convert an absolute IRQ# into bitmask */
14 #define IRQ_LBIT(irq_num)       (1 << ((irq_num) & 0x1f))
15
16 /* convert an absolute IRQ# into ipending index */
17 #define IRQ_LIDX(irq_num)       ((irq_num) >> 5)
18
19 /*
20  * Push an interrupt frame in a format acceptable to doreti, reload
21  * the segment registers for the kernel.
22  */
23 #define MSI_PUSH_FRAME                                                  \
24         pushl   $0 ;            /* dummy error code */                  \
25         pushl   $0 ;            /* dummy trap type */                   \
26         pushl   $0 ;            /* dummy xflags type */                 \
27         pushal ;                                                        \
28         pushl   %ds ;           /* save data and extra segments ... */  \
29         pushl   %es ;                                                   \
30         pushl   %fs ;                                                   \
31         pushl   %gs ;                                                   \
32         cld ;                                                           \
33         mov     $KDSEL,%ax ;                                            \
34         mov     %ax,%ds ;                                               \
35         mov     %ax,%es ;                                               \
36         mov     %ax,%gs ;                                               \
37         mov     $KPSEL,%ax ;                                            \
38         mov     %ax,%fs ;                                               \
39
40 /*
41  * Interrupt call handlers run in the following sequence:
42  *
43  *      - Push the trap frame required by doreti
44  *      - Mask the interrupt and reenable its source
45  *      - If we cannot take the interrupt set its ipending bit and
46  *        doreti.
47  *      - If we can take the interrupt clear its ipending bit,
48  *        call the handler, then unmask and doreti.
49  *
50  * YYY can cache gd base opitner instead of using hidden %fs prefixes.
51  */
52
53 #define MSI_HANDLER(irq_num)                                            \
54         .text ;                                                         \
55         SUPERALIGN_TEXT ;                                               \
56 IDTVEC(msi_intr##irq_num) ;                                             \
57         MSI_PUSH_FRAME ;                                                \
58         FAKE_MCOUNT(15*4(%esp)) ;                                       \
59         movl    lapic,%eax ;                                            \
60         movl    $0,LA_EOI(%eax) ;                                       \
61         movl    PCPU(curthread),%ebx ;                                  \
62         movl    $0,%eax ;       /* CURRENT CPL IN FRAME (REMOVED) */    \
63         pushl   %eax ;                                                  \
64         testl   $-1,TD_NEST_COUNT(%ebx) ;                               \
65         jne     1f ;                                                    \
66         testl   $-1,TD_CRITCOUNT(%ebx) ;                                \
67         je      2f ;                                                    \
68 1: ;                                                                    \
69         /* in critical section, make interrupt pending */               \
70         /* set the pending bit and return, leave interrupt masked */    \
71         movl    $IRQ_LIDX(irq_num),%edx ;                               \
72         orl     $IRQ_LBIT(irq_num),PCPU_E4(ipending,%edx) ;             \
73         orl     $RQF_INTPEND,PCPU(reqflags) ;                           \
74         jmp     5f ;                                                    \
75 2: ;                                                                    \
76         /* clear pending bit, run handler */                            \
77         movl    $IRQ_LIDX(irq_num),%edx ;                               \
78         andl    $~IRQ_LBIT(irq_num),PCPU_E4(ipending,%edx) ;            \
79         pushl   $irq_num ;                                              \
80         pushl   %esp ;                   /* pass frame by reference */  \
81         incl    TD_CRITCOUNT(%ebx) ;                                    \
82         sti ;                                                           \
83         call    ithread_fast_handler ;   /* returns 0 to unmask */      \
84         decl    TD_CRITCOUNT(%ebx) ;                                    \
85         addl    $8, %esp ;                                              \
86 5: ;                                                                    \
87         MEXITCOUNT ;                                                    \
88         jmp     doreti ;                                                \
89
90
91 MCOUNT_LABEL(bintr)
92         MSI_HANDLER(0)
93         MSI_HANDLER(1)
94         MSI_HANDLER(2)
95         MSI_HANDLER(3)
96         MSI_HANDLER(4)
97         MSI_HANDLER(5)
98         MSI_HANDLER(6)
99         MSI_HANDLER(7)
100         MSI_HANDLER(8)
101         MSI_HANDLER(9)
102         MSI_HANDLER(10)
103         MSI_HANDLER(11)
104         MSI_HANDLER(12)
105         MSI_HANDLER(13)
106         MSI_HANDLER(14)
107         MSI_HANDLER(15)
108         MSI_HANDLER(16)
109         MSI_HANDLER(17)
110         MSI_HANDLER(18)
111         MSI_HANDLER(19)
112         MSI_HANDLER(20)
113         MSI_HANDLER(21)
114         MSI_HANDLER(22)
115         MSI_HANDLER(23)
116         MSI_HANDLER(24)
117         MSI_HANDLER(25)
118         MSI_HANDLER(26)
119         MSI_HANDLER(27)
120         MSI_HANDLER(28)
121         MSI_HANDLER(29)
122         MSI_HANDLER(30)
123         MSI_HANDLER(31)
124         MSI_HANDLER(32)
125         MSI_HANDLER(33)
126         MSI_HANDLER(34)
127         MSI_HANDLER(35)
128         MSI_HANDLER(36)
129         MSI_HANDLER(37)
130         MSI_HANDLER(38)
131         MSI_HANDLER(39)
132         MSI_HANDLER(40)
133         MSI_HANDLER(41)
134         MSI_HANDLER(42)
135         MSI_HANDLER(43)
136         MSI_HANDLER(44)
137         MSI_HANDLER(45)
138         MSI_HANDLER(46)
139         MSI_HANDLER(47)
140         MSI_HANDLER(48)
141         MSI_HANDLER(49)
142         MSI_HANDLER(50)
143         MSI_HANDLER(51)
144         MSI_HANDLER(52)
145         MSI_HANDLER(53)
146         MSI_HANDLER(54)
147         MSI_HANDLER(55)
148         MSI_HANDLER(56)
149         MSI_HANDLER(57)
150         MSI_HANDLER(58)
151         MSI_HANDLER(59)
152         MSI_HANDLER(60)
153         MSI_HANDLER(61)
154         MSI_HANDLER(62)
155         MSI_HANDLER(63)
156         MSI_HANDLER(64)
157         MSI_HANDLER(65)
158         MSI_HANDLER(66)
159         MSI_HANDLER(67)
160         MSI_HANDLER(68)
161         MSI_HANDLER(69)
162         MSI_HANDLER(70)
163         MSI_HANDLER(71)
164         MSI_HANDLER(72)
165         MSI_HANDLER(73)
166         MSI_HANDLER(74)
167         MSI_HANDLER(75)
168         MSI_HANDLER(76)
169         MSI_HANDLER(77)
170         MSI_HANDLER(78)
171         MSI_HANDLER(79)
172         MSI_HANDLER(80)
173         MSI_HANDLER(81)
174         MSI_HANDLER(82)
175         MSI_HANDLER(83)
176         MSI_HANDLER(84)
177         MSI_HANDLER(85)
178         MSI_HANDLER(86)
179         MSI_HANDLER(87)
180         MSI_HANDLER(88)
181         MSI_HANDLER(89)
182         MSI_HANDLER(90)
183         MSI_HANDLER(91)
184         MSI_HANDLER(92)
185         MSI_HANDLER(93)
186         MSI_HANDLER(94)
187         MSI_HANDLER(95)
188         MSI_HANDLER(96)
189         MSI_HANDLER(97)
190         MSI_HANDLER(98)
191         MSI_HANDLER(99)
192         MSI_HANDLER(100)
193         MSI_HANDLER(101)
194         MSI_HANDLER(102)
195         MSI_HANDLER(103)
196         MSI_HANDLER(104)
197         MSI_HANDLER(105)
198         MSI_HANDLER(106)
199         MSI_HANDLER(107)
200         MSI_HANDLER(108)
201         MSI_HANDLER(109)
202         MSI_HANDLER(110)
203         MSI_HANDLER(111)
204         MSI_HANDLER(112)
205         MSI_HANDLER(113)
206         MSI_HANDLER(114)
207         MSI_HANDLER(115)
208         MSI_HANDLER(116)
209         MSI_HANDLER(117)
210         MSI_HANDLER(118)
211         MSI_HANDLER(119)
212         MSI_HANDLER(120)
213         MSI_HANDLER(121)
214         MSI_HANDLER(122)
215         MSI_HANDLER(123)
216         MSI_HANDLER(124)
217         MSI_HANDLER(125)
218         MSI_HANDLER(126)
219         MSI_HANDLER(127)
220         MSI_HANDLER(128)
221         MSI_HANDLER(129)
222         MSI_HANDLER(130)
223         MSI_HANDLER(131)
224         MSI_HANDLER(132)
225         MSI_HANDLER(133)
226         MSI_HANDLER(134)
227         MSI_HANDLER(135)
228         MSI_HANDLER(136)
229         MSI_HANDLER(137)
230         MSI_HANDLER(138)
231         MSI_HANDLER(139)
232         MSI_HANDLER(140)
233         MSI_HANDLER(141)
234         MSI_HANDLER(142)
235         MSI_HANDLER(143)
236         MSI_HANDLER(144)
237         MSI_HANDLER(145)
238         MSI_HANDLER(146)
239         MSI_HANDLER(147)
240         MSI_HANDLER(148)
241         MSI_HANDLER(149)
242         MSI_HANDLER(150)
243         MSI_HANDLER(151)
244         MSI_HANDLER(152)
245         MSI_HANDLER(153)
246         MSI_HANDLER(154)
247         MSI_HANDLER(155)
248         MSI_HANDLER(156)
249         MSI_HANDLER(157)
250         MSI_HANDLER(158)
251         MSI_HANDLER(159)
252         MSI_HANDLER(160)
253         MSI_HANDLER(161)
254         MSI_HANDLER(162)
255         MSI_HANDLER(163)
256         MSI_HANDLER(164)
257         MSI_HANDLER(165)
258         MSI_HANDLER(166)
259         MSI_HANDLER(167)
260         MSI_HANDLER(168)
261         MSI_HANDLER(169)
262         MSI_HANDLER(170)
263         MSI_HANDLER(171)
264         MSI_HANDLER(172)
265         MSI_HANDLER(173)
266         MSI_HANDLER(174)
267         MSI_HANDLER(175)
268         MSI_HANDLER(176)
269         MSI_HANDLER(177)
270         MSI_HANDLER(178)
271         MSI_HANDLER(179)
272         MSI_HANDLER(180)
273         MSI_HANDLER(181)
274         MSI_HANDLER(182)
275         MSI_HANDLER(183)
276         MSI_HANDLER(184)
277         MSI_HANDLER(185)
278         MSI_HANDLER(186)
279         MSI_HANDLER(187)
280         MSI_HANDLER(188)
281         MSI_HANDLER(189)
282         MSI_HANDLER(190)
283         MSI_HANDLER(191)
284 MCOUNT_LABEL(eintr)
285
286         .data
287
288         .text