Rev 3505 | Rev 3511 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3505 | Rev 3509 | ||
---|---|---|---|
Line 215... | Line 215... | ||
215 | ; that it has acknowledged an IRQ, and assume that handlers with at least one |
215 | ; that it has acknowledged an IRQ, and assume that handlers with at least one |
216 | ; acknowledged IRQ are registered properly. |
216 | ; acknowledged IRQ are registered properly. |
217 | ; Note: this still isn't 100% correct, because two IRQs can fire simultaneously, |
217 | ; Note: this still isn't 100% correct, because two IRQs can fire simultaneously, |
218 | ; the better way would be to find the correct IRQ, but I don't know how to do |
218 | ; the better way would be to find the correct IRQ, but I don't know how to do |
219 | ; this in that case. |
219 | ; this in that case. |
- | 220 | ; Also, [fdc_irq_func], [irq14_func], [irq15_func] could process interrupt |
|
- | 221 | ; but do not return whether they did it, so just ignore IRQs 6, 14, 15. |
|
- | 222 | cmp ebp, 6 |
|
- | 223 | jz .fail |
|
- | 224 | cmp ebp, 14 |
|
- | 225 | jz .fail |
|
- | 226 | cmp ebp, 15 |
|
- | 227 | jz .fail |
|
220 | push ebp |
228 | push ebp |
221 | xor ebp, ebp |
229 | xor ebp, ebp |
222 | .try_other_irqs: |
230 | .try_other_irqs: |
223 | cmp ebp, [esp] |
231 | cmp ebp, [esp] |
224 | jz .try_next_irq |
232 | jz .try_next_irq |
Line 228... | Line 236... | ||
228 | mov ebx, [ebx+IRQH.list.next] |
236 | mov ebx, [ebx+IRQH.list.next] |
229 | cmp ebx, esi |
237 | cmp ebx, esi |
230 | je .try_next_irq |
238 | je .try_next_irq |
231 | cmp [ebx+IRQH.num_ints], 0 |
239 | cmp [ebx+IRQH.num_ints], 0 |
232 | jne .try_next_irq |
240 | jne .try_next_irq |
- | 241 | ; keyboard handler acknowledges everything |
|
- | 242 | cmp [ebx+IRQH.handler], irq1 |
|
- | 243 | jz .try_next_irq |
|
233 | push [ebx+IRQH.data] |
244 | push [ebx+IRQH.data] |
234 | call [ebx+IRQH.handler] |
245 | call [ebx+IRQH.handler] |
235 | pop ecx |
246 | pop ecx |
236 | test eax, eax |
247 | test eax, eax |
237 | jnz .found_in_wrong_list |
248 | jnz .found_in_wrong_list |
Line 239... | Line 250... | ||
239 | inc ebp |
250 | inc ebp |
240 | cmp ebp, 16 |
251 | cmp ebp, 16 |
241 | jb .try_other_irqs |
252 | jb .try_other_irqs |
242 | pop ebp |
253 | pop ebp |
Line -... | Line 254... | ||
- | 254 | ||
243 | 255 | .fail: |
|
244 | inc [irq_failed+ebp*4] |
256 | inc [irq_failed+ebp*4] |
245 | .exit: |
257 | .exit: |
Line 246... | Line 258... | ||
246 | mov [check_idle_semaphore], 5 |
258 | mov [check_idle_semaphore], 5 |