Ignore:
Timestamp:
Mar 23, 2009, 9:13:00 AM (16 years ago)
Author:
Paul Smedley
Message:

Updates from Pasha to improve IRQ handling and resolve long delays at startup in APIC mode when using ACPI

File:
1 edited

Legend:

Unmodified
Added
Removed
  • GPL/branches/uniaud32-2.0/lib32/pci.c

    r410 r421  
    135135//******************************************************************************
    136136//******************************************************************************
     137#ifdef ACPI
     138struct SaveIRQForSlot
     139{
     140    ULONG  ulSlotNo;
     141    BYTE   LowIRQ;
     142    BYTE   HighIRQ;
     143    BYTE   Pin;   
     144};
     145extern struct SaveIRQForSlot sISRHigh[];
     146extern int  SaveIRQCounter;
     147#endif
     148
    137149static int pci_query_device(unsigned int vendor, unsigned int device,
    138150                            struct pci_dev near *pcidev, int idx)
     
    230242                        // IRQ and PIN
    231243                        pci_read_config_dword(pcidev, PCI_INTERRUPT_LINE, &temp);
     244                        sISRHigh[SaveIRQCounter].Pin  = (temp >> 8) & 0xf;
    232245#ifdef ACPI
    233246                        temp2 = temp3 = 0;
     
    242255                        {
    243256                        // Check APIC IRQ, if we have /SMP /APIC, must be set
    244                         if (temp3)
    245                            temp = (temp & (~0xff)) | (temp3 & 0xff);
     257                        if (temp1)
     258                           temp = (temp & (~0xff)) | (temp1 & 0xff);
    246259                        // Check PIC IRQ
    247                         else if (temp1)
    248                                  temp = (temp & (~0xff)) | (temp1 & 0xff);
     260                        else if (temp3)
     261                                 temp = (temp & (~0xff)) | (temp3 & 0xff);
    249262                        dprintf(("pci_query_device: IRQs ACPI PIC%d APIC%d", temp1, temp3));
     263                        sISRHigh[SaveIRQCounter].LowIRQ  = temp1;
     264                        sISRHigh[SaveIRQCounter].HighIRQ = temp3;
    250265                        }
    251266#endif /* ACPI */
Note: See TracChangeset for help on using the changeset viewer.