|One of our customers reported problem with ATA cards on a platform
VIA chipset. Those cards did not work on that platform both with Microsoft
PCMCIA driver and CardWare 7.0.
Brief analysis of support data showed that
- BIOS do not assign PCI interrupt for PCMCIA sockets
- NTDETECT is not able to find list of ISA interrupts available to use for PC cards
- System works in standard mode (ACPI is not used)
Since neither PCI nor ISA interrupts are available, PCMCIA driver is not
able to assign IRQ for ATA card.
We have used ACPIScope and PCIScope to find out IRQ number we can use for PC cards.
- From PCIScope data we have determined location of CardBus adapter sockets
(Bus 0, device 9, function 0 and 1) and interrupt pin value (INT-A for both sockets)
- PCI routing table for devices on Bus 0 informs that interrupt for all
functions of device 9 which have pin A is controlling by device \_SB.LNKB
- From analysis of _SRS (Set resource settings) of \_SB.LNKB device:
- IRQ assigned to sockets of CardBus adapter is stored in bits 4-11 of
register 0x55 of ISA bridge
Method(_SRS, 0x01, NotSerialized)
// Create field IRA.
// Initialize it by reference to
// WORD field with IRQ mask in resource
// descriptor passed as argument
CreateWordField(Arg0, 0x01, IRA)
// Store IRQ number in Local variable
// Write IRQ number to bits 8-11 of register 0x55
// in PCI configuration space of ISA bridge
// Store IRQ nunmber in global variable
- PCI device handle of ISA bridge is 0:7:0
Name(_ADR, 0x00070000) // Device 7, function 0
OperationRegion(PIX0, PCI_Config, 0x00000055, 0x00000004)
Field(PCI0.SBRG.PIX0, ByteAcc, NoLock, Preserve)
- According to PCIScope data, bits 8-11 of register 0x55 contain value 5.
So IRQ 5 is assigned to sockets of CardBus adapter.
|PCI IRQ 5 was forced for use via options of CardWare 7.0. It solved
the problem with ATA cards on the customer platform.|