Subversion Repositories Kolibri OS

Rev

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