Ignore:
Timestamp:
Mar 16, 2011, 11:54:53 PM (14 years ago)
Author:
David Azarewicz
Message:

APIC interrupt fixes from trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • GPL/branches/uniaud32-2.1.x/drv32/rmhelp.cpp

    r546 r548  
    4040ULONG                   RMFlags;
    4141
    42 static HDRIVER          DriverHandle = (HDRIVER)-1;
    43 static ULONG            ctResHandles = 0;
    44 static HRESOURCE        arResHandles[MAX_RESHANDLES];
     42static HDRIVER DriverHandle = (HDRIVER)-1;
     43static HDEVICE DeviceHandle = 0;
     44static HADAPTER AdapterHandle = 0;
     45static ULONG ctResHandles = 0;
     46static HRESOURCE arResHandles[MAX_RESHANDLES];
    4547
    4648
     
    8082     rc = RMCreateDriver( FlatToSel((ULONG)&DriverStruct), FlatToSel((ULONG)&hDriver) );
    8183
    82      dprintf(("RMCreateDriver rc = %d\n", rc));
    83 
    8484     if( rc == RMRC_SUCCESS )   DriverHandle = hDriver;
     85     dprintf(("RMCreateDriver rc=%d DriverHandle=%x", rc, DriverHandle));
    8586  }
    8687
     
    113114  }
    114115
    115   dprintf(("RMAllocResource[%d] IO rc = %d\n", ctResHandles, rc));
     116  dprintf(("RMAllocResource[%d] IO rc = %d", ctResHandles, rc));
    116117
    117118  return FALSE;
     
    141142  }
    142143
    143   dprintf(("RMAllocResource[%d] MEM rc = %d\n", ctResHandles, rc));
     144  dprintf(("RMAllocResource[%d] MEM rc = %d", ctResHandles, rc));
    144145
    145146  return rc == 0;
     
    152153{
    153154        RESOURCESTRUCT  Resource;
    154         HRESOURCE               hres;
     155        HRESOURCE               hRes;
    155156        APIRET          rc;
    156157
     
    161162
    162163        rc = RMAllocResource(DriverHandle,                      // Handle to driver.
    163                        FlatToSel((ULONG)&hres),                 // OUT:  "allocated" resource node handle
     164                       FlatToSel((ULONG)&hRes),                 // OUT:  "allocated" resource node handle
    164165                       FlatToSel((ULONG)&Resource));    // Resource to allocate.
    165166
     167
    166168        if (rc == 0) {
    167                 if (ctResHandles < MAX_RESHANDLES ) arResHandles[ctResHandles++] = hres;
    168                 *phRes = hres;
     169                *phRes = hRes;
     170                if (DeviceHandle) {
     171                        dprintf(("RMRequestIRQ: DriverHandle=%x DeviceHandle=%x hRes=%x", DriverHandle, DeviceHandle, hRes));
     172                        rc = RMModifyResources(DriverHandle, DeviceHandle, RM_MODIFY_ADD, hRes);
     173                } else {
     174                        if (ctResHandles < MAX_RESHANDLES ) arResHandles[ctResHandles++] = hRes;
     175                }
    169176        }
    170177
    171         dprintf(("RMAllocResource[%d] IRQ rc = %d\n", ctResHandles, rc));
     178        dprintf(("RMAllocResource[%d] IRQ=%d rc=%d", ctResHandles, ulIrq, rc));
    172179
    173180        return rc == 0;
     
    178185BOOL RMDeallocateIRQ(HRESOURCE hRes)
    179186{
    180         ULONG ulI;
    181 
    182         RMDeallocResource(DriverHandle, hRes);
    183 
    184         for (ulI=0; ulI<ctResHandles; ulI++) {
    185                 if (arResHandles[ulI] == hRes) {
    186                         arResHandles[ulI] = 0;
    187                         break;
    188                 }               
    189         }
    190 
    191         return 0;
    192 }
    193 
    194 
    195 //******************************************************************************
    196 //******************************************************************************
    197 VOID RMDone(ULONG DevID)
     187        APIRET rc;
     188
     189        dprintf(("RMDeallocateIRQ: DriverHandle=%x DeviceHandle=%x hRes=%x", DriverHandle, DeviceHandle, hRes));
     190        rc = RMModifyResources(DriverHandle, DeviceHandle, RM_MODIFY_DELETE, hRes);
     191
     192        return rc == 0;
     193}
     194
     195
     196//******************************************************************************
     197//******************************************************************************
     198VOID RMDone(ULONG DevID, PHADAPTER phAdapter, PHDEVICE phDevice)
    198199{
    199200  APIRET        rc;
     
    205206  char          szDeviceName[128];
    206207  char          szMixerName[64];
    207   struct
    208   {
     208  struct {
    209209    ULONG       NumResource;
    210210    HRESOURCE   hResource[MAX_RESHANDLES];
     
    214214
    215215  if( DevID && OSS32_QueryNames(OSS32_DEFAULT_DEVICE,
    216                  szDeviceName, sizeof(szDeviceName),
    217                  szMixerName, sizeof(szMixerName), FALSE) == OSSERR_SUCCESS )
     216                szDeviceName, sizeof(szDeviceName),
     217                szMixerName, sizeof(szMixerName), FALSE) == OSSERR_SUCCESS )
    218218  {
    219219    switch(DevID) {
     
    285285        break;
    286286*/
    287     }
     287    } /* switch */
    288288
    289289
     
    317317                           NULL);                               // Allocated resources.
    318318
    319       dprintf(("RMCreateAdapter rc = %d\n", rc));
     319      dprintf(("RMCreateAdapter rc=%d", rc));
    320320
    321321      if( rc == 0 )
    322322      {
    323         if( !szDeviceName[0] )  strcpy(szDeviceName, "Unknown");
    324 
    325         //NOTE: Assumes szDeviceName is a stack pointer!!
    326         memset( (PVOID) &DeviceStruct, 0, sizeof(DeviceStruct) );
    327         DeviceStruct.DevDescriptName = FlatToSel((ULONG)szDeviceName);
    328         DeviceStruct.DevFlags        = DS_FIXED_LOGICALNAME;
    329         DeviceStruct.DevType         = DS_TYPE_AUDIO;
    330         DeviceStruct.pAdjunctList    = NULL;
    331 
    332         rc = RMCreateDevice(DriverHandle,                       // Handle to driver
     323                AdapterHandle = hAdapter;
     324                if (phAdapter) *phAdapter = hAdapter;
     325                if( !szDeviceName[0] )  strcpy(szDeviceName, "Unknown");
     326
     327                //NOTE: Assumes szDeviceName is a stack pointer!!
     328                memset( (PVOID) &DeviceStruct, 0, sizeof(DeviceStruct) );
     329                DeviceStruct.DevDescriptName = FlatToSel((ULONG)szDeviceName);
     330                DeviceStruct.DevFlags        = DS_FIXED_LOGICALNAME;
     331                DeviceStruct.DevType         = DS_TYPE_AUDIO;
     332                DeviceStruct.pAdjunctList    = NULL;
     333
     334                rc = RMCreateDevice(DriverHandle,                       // Handle to driver
    333335                            FlatToSel((ULONG)&hDevice),         // (OUT) Handle to device, unused.
    334336                            FlatToSel((ULONG)&DeviceStruct),    // Device structure
     
    336338                            FlatToSel((ULONG)&ahResource));     // Allocated resources
    337339
    338         dprintf(("RMCreateDevice rc = %d\n", rc));
    339 
    340         if( rc == 0 )
    341         {
    342           // no resource handles to be freed
    343           ctResHandles = 0;     return;
    344         }
    345 
    346 // !!! Not implemented in startup.asm
    347 //      RMDestroyAdapter(DriverHandle, hAdapter);
    348       }
    349     }
    350     else        dprintf(("No resources allocated !!!\n"));
    351   }
     340                dprintf(("RMCreateDevice rc=%d", rc));
     341
     342                if( rc == 0 )
     343                {
     344                  DeviceHandle = hDevice;
     345                  if (phDevice) *phDevice = hDevice;
     346                  ctResHandles = 0;  // no resource handles to be freed
     347                        dprintf(("RMDone: DriverHandle=%x DeviceHandle=%x", DriverHandle, DeviceHandle));
     348                  return;
     349                }
     350
     351                // !!! Not implemented in startup.asm
     352                //      RMDestroyAdapter(DriverHandle, hAdapter);
     353      } /* if rc == 0 */
     354    } /* ctResHandles */
     355    else        dprintf(("No resources allocated !!!"));
     356  } /* if DevID */
    352357
    353358
     
    358363
    359364
    360 
     365/* DAZ - dirty hack so that resource manager is updated correctly
     366 * when using APIC and multiple adapters */
     367VOID RMSetHandles(HADAPTER hAdapter, HDEVICE hDevice)
     368{
     369        AdapterHandle = hAdapter;
     370        DeviceHandle = hDevice;
     371}
     372
Note: See TracChangeset for help on using the changeset viewer.