aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorBill Paul <wpaul@FreeBSD.org>2005-11-20 01:29:29 +0000
committerBill Paul <wpaul@FreeBSD.org>2005-11-20 01:29:29 +0000
commit78edd540cf2d5df183e4993a0e69efd8940f4acb (patch)
tree54fa6d8022a3050b8deb7b8503f1c7012bada254 /sys
parent3d19fd319099ed12ef7a113b7ebe7740c9e86faa (diff)
Notes
Diffstat (limited to 'sys')
-rw-r--r--sys/compat/ndis/subr_ndis.c19
-rw-r--r--sys/compat/ndis/subr_ntoskrnl.c5
2 files changed, 13 insertions, 11 deletions
diff --git a/sys/compat/ndis/subr_ndis.c b/sys/compat/ndis/subr_ndis.c
index 4ce9259ed0a02..ee8a0f926ae7f 100644
--- a/sys/compat/ndis/subr_ndis.c
+++ b/sys/compat/ndis/subr_ndis.c
@@ -275,7 +275,7 @@ static uint8_t NdisSystemProcessorCount(void);
static void NdisMIndicateStatusComplete(ndis_handle);
static void NdisMIndicateStatus(ndis_handle, ndis_status,
void *, uint32_t);
-static void ndis_intr(void *);
+static uint8_t ndis_intr(kinterrupt *, void *);
static void ndis_intrhand(kdpc *, ndis_miniport_interrupt *, void *, void *);
static funcptr ndis_findwrap(funcptr);
static void NdisCopyFromPacketToPacket(ndis_packet *,
@@ -2326,22 +2326,21 @@ NdisMPciAssignResources(adapter, slot, list)
return (NDIS_STATUS_SUCCESS);
}
-static void
-ndis_intr(arg)
+static uint8_t
+ndis_intr(iobj, arg)
+ kinterrupt *iobj;
void *arg;
{
struct ndis_softc *sc;
- struct ifnet *ifp;
- int is_our_intr = 0;
+ uint8_t is_our_intr = FALSE;
int call_isr = 0;
ndis_miniport_interrupt *intr;
sc = arg;
- ifp = sc->ifp;
intr = sc->ndis_block->nmb_interrupt;
if (intr == NULL || sc->ndis_block->nmb_miniportadapterctx == NULL)
- return;
+ return(FALSE);
if (sc->ndis_block->nmb_interrupt->ni_isrreq == TRUE)
MSCALL3(intr->ni_isrfunc, &is_our_intr, &call_isr,
@@ -2352,10 +2351,10 @@ ndis_intr(arg)
call_isr = 1;
}
- if ((is_our_intr || call_isr))
+ if (call_isr)
IoRequestDpc(sc->ndis_block->nmb_deviceobj, NULL, sc);
- return;
+ return(is_our_intr);
}
static void
@@ -3517,7 +3516,7 @@ image_patch_table ndis_functbl[] = {
IMPORT_SFUNC(NdisMRegisterUnloadHandler, 2),
IMPORT_SFUNC(ndis_timercall, 4),
IMPORT_SFUNC(ndis_asyncmem_complete, 2),
- IMPORT_SFUNC(ndis_intr, 1),
+ IMPORT_SFUNC(ndis_intr, 2),
IMPORT_SFUNC(ndis_intrhand, 4),
/*
diff --git a/sys/compat/ndis/subr_ntoskrnl.c b/sys/compat/ndis/subr_ntoskrnl.c
index 06d42fb80ca76..19b97a1533f22 100644
--- a/sys/compat/ndis/subr_ntoskrnl.c
+++ b/sys/compat/ndis/subr_ntoskrnl.c
@@ -1204,13 +1204,16 @@ ntoskrnl_intr(arg)
{
kinterrupt *iobj;
uint8_t irql;
+ uint8_t claimed;
list_entry *l;
KeAcquireSpinLock(&ntoskrnl_intlock, &irql);
l = ntoskrnl_intlist.nle_flink;
while (l != &ntoskrnl_intlist) {
iobj = CONTAINING_RECORD(l, kinterrupt, ki_list);
- MSCALL1(iobj->ki_svcfunc, iobj->ki_svcctx);
+ claimed = MSCALL2(iobj->ki_svcfunc, iobj, iobj->ki_svcctx);
+ if (claimed == TRUE)
+ break;
l = l->nle_flink;
}
KeReleaseSpinLock(&ntoskrnl_intlock, irql);