Get some more details about interrupt in resource list.

This lets ne2000 share its interrupt with another device

svn path=/trunk/; revision=31141
This commit is contained in:
Hervé Poussineau 2007-12-11 12:58:05 +00:00
parent b3b1b632cb
commit 5692e5315f
2 changed files with 11 additions and 2 deletions

View file

@ -29,6 +29,8 @@
#define DRIVER_DEFAULT_IO_BASE_ADDRESS 0x280 /* bochs default */
#define DRIVER_DEFAULT_INTERRUPT_NUMBER 9 /* bochs default */
#define DRIVER_DEFAULT_INTERRUPT_SHARED FALSE
#define DRIVER_DEFAULT_INTERRUPT_MODE NdisInterruptLatched
#define DRIVER_MAX_MULTICAST_LIST_SIZE 8
@ -80,6 +82,8 @@ typedef struct _NIC_ADAPTER
ULONG IoBaseAddress;
ULONG InterruptLevel;
ULONG InterruptVector;
BOOLEAN InterruptShared;
KINTERRUPT_MODE InterruptMode;
/* Mapped address of the I/O base port */
PUCHAR IOBase;

View file

@ -190,6 +190,9 @@ static VOID STDCALL MiQueryResources(
case CmResourceTypeInterrupt:
Adapter->InterruptLevel = Descriptor->u.Interrupt.Level;
Adapter->InterruptVector = Descriptor->u.Interrupt.Vector;
Adapter->InterruptShared = (Descriptor->ShareDisposition == CmResourceShareShared);
Adapter->InterruptMode = Descriptor->Flags & CM_RESOURCE_INTERRUPT_LATCHED ?
NdisInterruptLatched : NdisInterruptLevelSensitive;
break;
case CmResourceTypePort:
Adapter->IoBaseAddress = Descriptor->u.Port.Start.LowPart;
@ -252,6 +255,8 @@ static NDIS_STATUS STDCALL MiniportInitialize(
Adapter->IoBaseAddress = DRIVER_DEFAULT_IO_BASE_ADDRESS;
Adapter->InterruptLevel = DRIVER_DEFAULT_INTERRUPT_NUMBER;
Adapter->InterruptVector = DRIVER_DEFAULT_INTERRUPT_NUMBER;
Adapter->InterruptShared = DRIVER_DEFAULT_INTERRUPT_SHARED;
Adapter->InterruptMode = DRIVER_DEFAULT_INTERRUPT_MODE;
Adapter->MaxMulticastListSize = DRIVER_MAX_MULTICAST_LIST_SIZE;
Adapter->InterruptMask = DRIVER_INTERRUPT_MASK;
Adapter->LookaheadSize = DRIVER_MAXIMUM_LOOKAHEAD;
@ -392,8 +397,8 @@ static NDIS_STATUS STDCALL MiniportInitialize(
Adapter->InterruptVector,
Adapter->InterruptLevel,
FALSE,
FALSE,
NdisInterruptLatched);
Adapter->InterruptShared,
Adapter->InterruptMode);
if (Status != NDIS_STATUS_SUCCESS) {
NDIS_DbgPrint(MIN_TRACE, ("Cannot register interrupt. Status (0x%X).\n", Status));
MiniportHalt((NDIS_HANDLE)Adapter);