Changeset 548 for GPL/branches/uniaud32-2.1.x/lib32/pci.c
- Timestamp:
- Mar 16, 2011, 11:54:53 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GPL/branches/uniaud32-2.1.x/lib32/pci.c
r546 r548 48 48 49 49 BOOL fSuspended = FALSE; 50 BOOL fRewired = FALSE; 50 51 extern int nrCardsDetected; 51 52 … … 248 249 "Uniaud32"); // Name for acpi log 249 250 if (!rc) { 250 // Check APIC IRQ, if we have /SMP /APIC, must be set 251 if (ApicIRQ) ulTmp1 = (ulTmp1 & (~0xff)) | (ApicIRQ & 0xff); 252 else if (PicIRQ) ulTmp1 = (ulTmp1 & (~0xff)) | (PicIRQ & 0xff); 251 if (PicIRQ) ulTmp1 = (ulTmp1 & (~0xff)) | (PicIRQ & 0xff); // Choose Pic interrupt for init time processing 252 else if (ApicIRQ) ulTmp1 = (ulTmp1 & (~0xff)) | (ApicIRQ & 0xff); 253 253 rprintf(("pci_query_device: IRQs ACPI PIC=%ld APIC=%ld chosen=%d", PicIRQ, ApicIRQ, ulTmp1&0xff)); 254 pcidev->picirq = PicIRQ; // Save the Pic and 255 pcidev->apicirq = ApicIRQ; // Save the Apic interrupt for switching later 254 256 } 255 257 #endif /* ACPI */ … … 257 259 pcidev->irq_resource[0].flags = IORESOURCE_IRQ; 258 260 pcidev->irq_resource[0].start = pcidev->irq_resource[0].end = ulTmp1 & 0xffff; 259 pcidev->irq = (u8)ulTmp1; 261 pcidev->irq = (u8)ulTmp1; // This is the interrupt used for init time processing 260 262 } 261 263 … … 502 504 503 505 // create adapter 504 RMDone((pcidev->device << 16) | pcidev->vendor );506 RMDone((pcidev->device << 16) | pcidev->vendor, &pcidev->hAdapter, &pcidev->hDevice); 505 507 iNumCards++; 506 508 … … 516 518 } 517 519 518 RMDone(0 );520 RMDone(0, 0, 0); 519 521 } 520 522 } … … 938 940 if(pci_devices[i].devfn) 939 941 { 942 RMSetHandles(pci_devices[i].hAdapter, pci_devices[i].hDevice); /* DAZ - dirty hack */ 940 943 driver = pci_devices[i].pcidriver; 941 944 if(driver && driver->resume) { … … 962 965 if(pci_devices[i].devfn) 963 966 { 967 RMSetHandles(pci_devices[i].hAdapter, pci_devices[i].hDevice); /* DAZ - dirty hack */ 964 968 driver = pci_devices[i].pcidriver; 965 969 if(driver && driver->suspend) { … … 977 981 struct pci_dev *pcidev; 978 982 struct pci_driver *driver; 979 ULONG PicIRQ, ApicIRQ,ulTmp1, rc;983 ULONG ulTmp1, rc; 980 984 981 985 for (i=0; i<MAX_PCI_DEVICES; i++) { 982 986 if (!pci_devices[i].devfn) continue; 983 987 pcidev = &pci_devices[i]; 984 rc = ACPIFindPCIDevice( pcidev->bus->number, // Bus 985 PCI_SLOT(pcidev->devfn), // Dev 986 PCI_FUNC(pcidev->devfn), // Function 987 &PicIRQ, // PIC IRQ 988 &ApicIRQ, // APIC IRQ 989 NULL, // ACPI handle to finding device 990 "Uniaud32"); // Name for acpi log 991 if (!rc) { 992 ulTmp1 = 0; 993 // Check APIC IRQ, if we have /SMP /APIC, must be set 994 if (ApicIRQ) ulTmp1 = (ulTmp1 & (~0xff)) | (ApicIRQ & 0xff); 995 else if (PicIRQ) ulTmp1 = (ulTmp1 & (~0xff)) | (PicIRQ & 0xff); 996 rprintf(("PciAdjustInterrupts: IRQs ACPI PIC=%ld APIC=%ld was=%d chosen=%ld", PicIRQ, ApicIRQ, pcidev->irq, ulTmp1)); 997 if( (u8)ulTmp1 && ((u8)ulTmp1 != 0xff) && ((u8)ulTmp1 != pcidev->irq) ) { 998 driver = pcidev->pcidriver; 999 if(driver && driver->suspend) driver->suspend(pcidev, SNDRV_CTL_POWER_D0); 1000 1001 pcidev->irq_resource[0].flags = IORESOURCE_IRQ; 1002 pcidev->irq_resource[0].start = pcidev->irq_resource[0].end = ulTmp1 & 0xffff; 1003 pcidev->irq = (u8)ulTmp1; 1004 1005 if(driver && driver->resume) driver->resume(pcidev); 1006 } 988 ulTmp1 = pcidev->irq; 989 if (pcidev->apicirq) ulTmp1 = pcidev->apicirq; 990 else if (pcidev->picirq) ulTmp1 = pcidev->picirq; 991 rprintf(("PciAdjustInterrupts: IRQs ACPI PIC=%ld APIC=%ld was=%d chosen=%ld", pcidev->picirq, pcidev->apicirq, pcidev->irq, ulTmp1)); 992 if( (u8)ulTmp1 && ((u8)ulTmp1 != 0xff) && ((u8)ulTmp1 != pcidev->irq) ) { 993 RMSetHandles(pcidev->hAdapter, pcidev->hDevice); /* DAZ - dirty hack */ 994 driver = pcidev->pcidriver; 995 if(driver && driver->suspend) driver->suspend(pcidev, SNDRV_CTL_POWER_D0); 996 fSuspended = TRUE; 997 998 pcidev->irq_resource[0].flags = IORESOURCE_IRQ; 999 pcidev->irq_resource[0].start = pcidev->irq_resource[0].end = ulTmp1 & 0xffff; 1000 pcidev->irq = (u8)ulTmp1; 1001 1002 fRewired = TRUE; 1003 // if(driver && driver->resume) driver->resume(pcidev); 1007 1004 } 1008 1005 } /* for loop */
Note:
See TracChangeset
for help on using the changeset viewer.