Changeset 547 for GPL/trunk/lib32


Ignore:
Timestamp:
Mar 16, 2011, 10:31:12 PM (15 years ago)
Author:
David Azarewicz
Message:

APIC interrupt transition fixes

Location:
GPL/trunk/lib32
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • GPL/trunk/lib32/irq.c

    r545 r547  
    7373        ULONG hRes;
    7474
    75         dprintf(("request_irq: Enter for irq %d", irq & 0xff ));
     75        rprintf(("request_irq: irq %d", irq & 0xff ));
    7676        if ( !pSlot ) {
    7777                // find empty slot
     
    127127                                pSlot->flHandlers &= ~(1 << u);
    128128                                if( pSlot->flHandlers == 0 ) {
    129                                         dprintf(("free_irq: irq %d", irq & 0xff ));
     129                                        rprintf(("free_irq: irq %d", irq & 0xff ));
    130130                                        ALSA_FreeIrq(pSlot->irqNo);
    131131                                        pSlot->irqNo = 0;
     
    177177                //Don't pass it to the linux handler as the device doesn't respond as expected
    178178                //when suspended
    179                 dprintf(("Slot %d IRQ %d suspended",ulSlotNo, *pulIrq));
     179                rprintf(("Slot %d IRQ %d suspended",ulSlotNo, *pulIrq));
    180180                return FALSE;
    181181        }
  • GPL/trunk/lib32/ossidc.cpp

    r535 r547  
    113113                return OSSERR_INIT_FAILED;
    114114        }
    115         dprintf(("OSS32_Initialize. Start address: %X", OffsetBeginCS32));
     115        dprintf(("OSS32_Initialize: Start address: %X", OffsetBeginCS32));
    116116
    117117        if(call_module_init(alsa_sound_init) != 0)               return OSSERR_INIT_FAILED;
    118         dprintf(("OSS32_Initialize1. Start address: %X", OffsetBeginCS32));
     118        dprintf(("OSS32_Initialize1: Start address: %X", OffsetBeginCS32));
    119119        if(call_module_init(alsa_pcm_init) != 0)                 return OSSERR_INIT_FAILED;
    120120        if(call_module_init(alsa_hwdep_init) != 0)               return OSSERR_INIT_FAILED;
     
    164164                return OSSERR_SUCCESS;
    165165        }
    166         rprintf(("OSS32_Initialize. FAILED"));
     166        rprintf(("OSS32_Initialize: FAILED"));
    167167        return OSSERR_INIT_FAILED;
    168168}
  • GPL/trunk/lib32/pci.c

    r545 r547  
    4848
    4949BOOL    fSuspended = FALSE;
     50BOOL    fRewired = FALSE;
    5051extern int nrCardsDetected;
    5152
     
    248249                                                                                "Uniaud32");                                             // Name for acpi log
    249250                                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);
    253253                                        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
    254256                                }
    255257#endif /* ACPI */
     
    257259                                        pcidev->irq_resource[0].flags = IORESOURCE_IRQ;
    258260                                        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
    260262                                }
    261263
     
    502504
    503505                                // create adapter
    504                                 RMDone((pcidev->device << 16) | pcidev->vendor);
     506                                RMDone((pcidev->device << 16) | pcidev->vendor, &pcidev->hAdapter, &pcidev->hDevice);
    505507                                iNumCards++;
    506508
     
    516518                        }
    517519
    518                         RMDone(0);
     520                        RMDone(0, 0, 0);
    519521                }
    520522        }
     
    938940                if(pci_devices[i].devfn)
    939941                {
     942                        RMSetHandles(pci_devices[i].hAdapter, pci_devices[i].hDevice); /* DAZ - dirty hack */
    940943                        driver = pci_devices[i].pcidriver;
    941944                        if(driver && driver->resume) {
     
    962965                if(pci_devices[i].devfn)
    963966                {
     967                        RMSetHandles(pci_devices[i].hAdapter, pci_devices[i].hDevice); /* DAZ - dirty hack */
    964968                        driver = pci_devices[i].pcidriver;
    965969                        if(driver && driver->suspend) {
     
    977981        struct pci_dev *pcidev;
    978982        struct pci_driver *driver;
    979         ULONG PicIRQ, ApicIRQ, ulTmp1, rc;
     983        ULONG ulTmp1, rc;
    980984
    981985        for (i=0; i<MAX_PCI_DEVICES; i++) {
    982986                if (!pci_devices[i].devfn) continue;
    983987                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);
    10071004                }
    10081005        } /* for loop */
Note: See TracChangeset for help on using the changeset viewer.