Changeset 530


Ignore:
Timestamp:
Jul 27, 2010, 6:32:21 PM (15 years ago)
Author:
David Azarewicz
Message:

pci bus scan changes, xrun recovery

Location:
GPL/trunk
Files:
4 edited

Legend:

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

    r522 r530  
    269269void flush_workqueue(struct workqueue_struct *wq)
    270270{
    271         short sDAZ;
    272271
    273272        if (wq->task == current) {
     
    280279                spin_lock_irq(&wq->lock);
    281280                add_wait_queue(&wq->work_done, &wait);
    282                 sDAZ = 0;
     281#ifndef TARGET_OS2
    283282                while (!list_empty(&wq->worklist)) {
    284                         if (sDAZ++ > 20) { // Temporary hack to prevent system hangs
    285                                 rprintf(("flush_workqueue: can't empty list"));
    286                                 break;
    287                         }                       
    288283                        spin_unlock_irq(&wq->lock);
    289284                        schedule();  // DAZ system hangs here because this function does nothing
    290285                        spin_lock_irq(&wq->lock);
    291286                }
     287#endif
    292288                set_current_state(TASK_RUNNING);
    293289                remove_wait_queue(&wq->work_done, &wait);
  • GPL/trunk/lib32/pci.c

    r520 r530  
    4141#include <osspci.h>
    4242
    43 #define MAX_PCI_BUSSES          16
     43#define MAX_PCI_BUSSES          256
    4444#define MAX_PCI_DEVICES         16
    4545
    4646struct pci_dev pci_devices[MAX_PCI_DEVICES] = {0};
    47 struct pci_bus pci_busses[MAX_PCI_BUSSES] = {0};
     47//struct pci_bus pci_busses[MAX_PCI_BUSSES] = {0};
    4848
    4949BOOL    fSuspended = FALSE;
     
    158158        u8              headerType;
    159159
    160         busNr = (ulLast >> 8) & 0x1f;
     160        busNr = (ulLast >> 8) & 0xff;
    161161        devNr = PCI_SLOT(ulLast);
    162162        funcNr = PCI_FUNC(ulLast);
     
    200200                                pcidev->vendor          = detectedId & 0xffff;
    201201                                pcidev->device          = detectedId >> 16;
    202                                 pcidev->bus             = &pci_busses[busNr];
     202                                //pcidev->bus           = &pci_busses[busNr];
     203                                pcidev->bus             = kmalloc(sizeof(struct pci_bus), GFP_KERNEL);
     204                                if (pcidev->bus == NULL) return 0;
     205                                memset (pcidev->bus, 0, sizeof(struct pci_bus));
    203206                                pcidev->bus->number = busNr;
    204207                                pcidev->devfn           = PCI_DEVFN(devNr, funcNr);
     
    507510                while( (ulLast = pci_query_device(&driver->id_table[iTableIx], pcidev, ulLast)) ) {
    508511
    509 
    510512                        RMInit();
    511513                        dprintf(("pci_register_driver: found=%x:%x searching for %x:%x\n",
     
    526528                                if (iTmp >= MAX_PCI_DEVICES) break;
    527529                                pcidev = &pci_devices[iTmp];
    528                         } else pcidev->devfn = 0;
     530                        } else {
     531                                kfree(pcidev->bus);
     532                                pcidev->devfn = 0;
     533                        }
    529534
    530535                        RMDone(0);
     
    553558                        pcidev = &pci_devices[j];
    554559                        if (pcidev->devfn == 0) continue;
    555                         if(pcidev->vendor != driver->id_table[i].vendor) continue;
     560                        if (pcidev->vendor != driver->id_table[i].vendor) continue;
    556561                        if ( (driver->id_table[i].device != PCI_ANY_ID) && (pcidev->device != driver->id_table[i].device) ) continue;
    557562                        dprintf(("pci unreg match: %x:%x %x:%x", pci_devices[j].vendor, pci_devices[j].device, driver->id_table[i].vendor, driver->id_table[i].device));
    558                         if(!driver->remove) continue;
    559                         driver->remove(pcidev);
     563                        if (driver->remove) driver->remove(pcidev);
     564                        kfree(pcidev->bus);
     565                        pcidev->devfn = 0;
    560566                }
    561567        }
  • GPL/trunk/lib32/sound.c

    r528 r530  
    11041104
    11051105                if (ulSize == 0) {
    1106                         rprintf(("OSS32_WaveAddBuffer: no room left in hardware buffer!!\n"));
    1107                         rprintf(("state=%x avail=%x ReqSize=%x\n", status.state, status.avail, ulReqSize));
     1106                        rprintf(("OSS32_WaveAddBuffer: no room left in hardware buffer!!"));
     1107                        rprintf(("state=%x avail=%x ReqSize=%x", status.state, status.avail, ulReqSize));
    11081108                        *pulTransferred = 0;
    11091109                        return OSSERR_BUFFER_FULL;
    11101110                }
    11111111
     1112                //rprintf(("AddBuffer: state=%x avail=%x ReqSize=%x", status.state, status.avail, ulReqSize));
    11121113                if (status.state == SNDRV_PCM_STATE_XRUN) {
    1113                         rprintf(("Internal Error: Xrun\n"));
     1114                        rprintf(("Internal Error: Xrun"));
     1115                        iRet = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0);
     1116                        if (iRet < 0) {
     1117                                rprintf(("Prepare failed: state=%x avail=%x ReqSize=%x", status.state, status.avail, ulReqSize));
     1118                                return UNIXToOSSError(iRet);
     1119                        }
     1120                        iRet = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_STATUS, (ULONG)__Stack32ToFlat(&status));
     1121                        rprintf(("Xrun restarted: state=%x avail=%x ReqSize=%x", status.state, status.avail, ulReqSize));
     1122                        if (iRet < 0) return UNIXToOSSError(iRet);
    11141123                }
    11151124
    11161125                iRet = pHandle->file.f_op->write(&pHandle->file, (char *)ulBuffer, ulSize, &pHandle->file.f_pos);
    11171126
    1118                 if (iRet != ulSize) rprintf(("WaveAddBuffer: ReqSize=%x Size=%x iRet=%x\n", ulReqSize, ulSize, iRet));
    1119 
    1120                 if (iRet < 0 ) break;
     1127                if (iRet != ulSize) rprintf(("WaveAddBuffer: ReqSize=%x Size=%x iRet=%x", ulReqSize, ulSize, iRet));
     1128
     1129                if (iRet < 0) return UNIXToOSSError(iRet);
    11211130                ulTransferred = iRet;
    11221131#else
     
    11261135                ulSize = min(ulReqSize, samples_to_bytes(status.avail));
    11271136
    1128                 //printk("OSS32_WaveAddBuffer N:%d hw=%x app=%x avail=%x req size=%x size=%x\n",
     1137                //printk("OSS32_WaveAddBuffer N:%d hw=%x app=%x avail=%x req size=%x size=%x",
    11291138                //      CountWv, samples_to_bytes(status.hw_ptr), samples_to_bytes(status.appl_ptr), samples_to_bytes(status.avail), ulSize, ulReqSize);
    11301139
    11311140                if (ulSize == 0) {
    1132                         rprintf(("OSS32_WaveAddBuffer: no room left in hardware buffer!!\n"));
    1133                         rprintf(("state=%x avail=%x SizeReq=%x\n", status.state, status.avail, ulReqSize));
     1141                        rprintf(("OSS32_WaveAddBuffer: no room left in hardware buffer!!"));
     1142                        rprintf(("state=%x avail=%x SizeReq=%x", status.state, status.avail, ulReqSize));
    11341143                        *pulTransferred = 0;
    11351144                        return OSSERR_BUFFER_FULL;
    11361145                }
    11371146
    1138                 rprintf(("WaveAddBuffer: ReqSize=%x Size=%x\n", ulReqSize, ulSize));
     1147                rprintf(("WaveAddBuffer: ReqSize=%x Size=%x", ulReqSize, ulSize));
    11391148
    11401149                // size should be aligned to channels number * samplesize  //PS+++ what is it and why?!?!?!
     
    11471156                                if ((status.state != SNDRV_PCM_STATE_XRUN ) && samples_to_bytes(status.avail) ) break;
    11481157                                if (status.state == SNDRV_PCM_STATE_XRUN) {
    1149                                         rprintf(("Internal Error: Xrun\n"));
     1158                                        rprintf(("Internal Error: Xrun"));
    11501159                                }
    11511160                                if (ulI > 998) {
     
    11561165
    11571166                        if (iRet1 < 0) {
    1158                                 rprintf(("iRet1=%i trans=%x ReqSize=%x Size=%x\n", iRet1, ulTransferred, ulReqSize, ulSize));
     1167                                rprintf(("iRet1=%i trans=%x ReqSize=%x Size=%x", iRet1, ulTransferred, ulReqSize, ulSize));
    11591168                                break;     // We have any global error, don't try more
    11601169                        }
     
    11761185                        }
    11771186                        ulTransferred += iRet;
    1178                         // printk("written: now: %d, trans: %d need %d tot:%d\n", iRet, ulTransferred, ulReqSize,ulSize);
     1187                        // printk("written: now: %d, trans: %d need %d tot:%d", iRet, ulTransferred, ulReqSize,ulSize);
    11791188                        ulBuffer += iRet;
    11801189                        if (ulSize > iRet) ulSize       -= iRet;
     
    11841193                break;
    11851194        case SNDRV_MINOR_PCM_CAPTURE:
    1186                 //printk("OSS32_WaveAddBuffer N:%d state=%x hw=%x app=%x avail=%x size=%x\n",
     1195                //printk("OSS32_WaveAddBuffer N:%d state=%x hw=%x app=%x avail=%x size=%x",
    11871196                //      CountWv, status.state, samples_to_bytes(status.hw_ptr), samples_to_bytes(status.appl_ptr), samples_to_bytes(status.avail), ulReqSize);
    11881197//              Need to handle overrun condition when reading
     
    12081217//        if (*pulTransferred < ulSize)
    12091218//        {
    1210 //                printk("warning: ulTransferred [%d] less than requested [%d]\n", *pulTransferred, ulSize);
     1219//                printk("warning: ulTransferred [%d] less than requested [%d]", *pulTransferred, ulSize);
    12111220//                iRet1 = pHandle->file.f_op->ioctl(&pHandle->inode, &pHandle->file, SNDRV_PCM_IOCTL_PREPARE, 0);
    12121221//        }
  • GPL/trunk/uniaud.inc

    r522 r530  
    77# BUILDVERSION must be 3 parts, and only numbers like 5.44.108
    88# It is best that 2'nd number is always 2 digits, eg at least 10
    9 BUILDVERSION = 1.9.23
     9BUILDVERSION = 1.9.24
    1010
    1111# Fixpack version
     
    1313# ex RC3  GA  FIXPACK2 beta_47
    1414# Comment out to avoid a fixpack line in bldlevel
    15 FIXPACK = SVN r522
     15FIXPACK = SVN r530
    1616
    1717# ALSA BUILD VERSION
Note: See TracChangeset for help on using the changeset viewer.