Changeset 91687 in vbox
- Timestamp:
- Oct 12, 2021 10:26:53 AM (3 years ago)
- Location:
- trunk/src/VBox/Devices/Audio
- Files:
-
- 3 edited
-
DevHda.cpp (modified) (3 diffs)
-
DevIchAc97.cpp (modified) (5 diffs)
-
DevSB16.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Audio/DevHda.cpp
r90448 r91687 191 191 HDADRIVERSTREAM Rear; 192 192 #endif 193 /** The LUN description. */ 194 char szDesc[48 - 2]; 193 195 } HDADRIVER; 194 196 /** The HDA host driver backend. */ … … 4526 4528 static int hdaR3AttachInternal(PPDMDEVINS pDevIns, PHDASTATE pThis, PHDASTATER3 pThisCC, unsigned uLUN, PHDADRIVER *ppDrv) 4527 4529 { 4528 /* 4529 * Attach driver. 4530 */ 4531 char *pszDesc = RTStrAPrintf2("Audio driver port (HDA) for LUN#%u", uLUN); 4532 AssertLogRelReturn(pszDesc, VERR_NO_STR_MEMORY); 4530 PHDADRIVER pDrv = (PHDADRIVER)RTMemAllocZ(sizeof(HDADRIVER)); 4531 AssertPtrReturn(pDrv, VERR_NO_MEMORY); 4532 RTStrPrintf(pDrv->szDesc, sizeof(pDrv->szDesc), "Audio driver port (HDA) for LUN #%u", uLUN); 4533 4533 4534 4534 PPDMIBASE pDrvBase; 4535 int rc = PDMDevHlpDriverAttach(pDevIns, uLUN, &pThisCC->IBase, &pDrvBase, p szDesc);4535 int rc = PDMDevHlpDriverAttach(pDevIns, uLUN, &pThisCC->IBase, &pDrvBase, pDrv->szDesc); 4536 4536 if (RT_SUCCESS(rc)) 4537 4537 { 4538 PHDADRIVER pDrv = (PHDADRIVER)RTMemAllocZ(sizeof(HDADRIVER)); 4539 if (pDrv) 4540 { 4541 pDrv->pConnector = PDMIBASE_QUERY_INTERFACE(pDrvBase, PDMIAUDIOCONNECTOR); 4542 AssertPtr(pDrv->pConnector); 4543 if (RT_VALID_PTR(pDrv->pConnector)) 4538 pDrv->pConnector = PDMIBASE_QUERY_INTERFACE(pDrvBase, PDMIAUDIOCONNECTOR); 4539 AssertPtr(pDrv->pConnector); 4540 if (RT_VALID_PTR(pDrv->pConnector)) 4541 { 4542 pDrv->pDrvBase = pDrvBase; 4543 pDrv->pHDAStateShared = pThis; 4544 pDrv->pHDAStateR3 = pThisCC; 4545 pDrv->uLUN = uLUN; 4546 4547 /* Attach to driver list if not attached yet. */ 4548 if (!pDrv->fAttached) 4544 4549 { 4545 pDrv->pDrvBase = pDrvBase; 4546 pDrv->pHDAStateShared = pThis; 4547 pDrv->pHDAStateR3 = pThisCC; 4548 pDrv->uLUN = uLUN; 4549 4550 /* Attach to driver list if not attached yet. */ 4551 if (!pDrv->fAttached) 4552 { 4553 RTListAppend(&pThisCC->lstDrv, &pDrv->Node); 4554 pDrv->fAttached = true; 4555 } 4556 4557 if (ppDrv) 4558 *ppDrv = pDrv; 4559 4560 /* 4561 * While we're here, give the windows backends a hint about our typical playback 4562 * configuration. 4563 * Note! If 48000Hz is advertised to the guest, add it here. 4564 */ 4565 if ( pDrv->pConnector 4566 && pDrv->pConnector->pfnStreamConfigHint) 4567 { 4568 PDMAUDIOSTREAMCFG Cfg; 4569 RT_ZERO(Cfg); 4570 Cfg.enmDir = PDMAUDIODIR_OUT; 4571 Cfg.enmPath = PDMAUDIOPATH_OUT_FRONT; 4572 Cfg.Device.cMsSchedulingHint = 10; 4573 Cfg.Backend.cFramesPreBuffering = UINT32_MAX; 4574 PDMAudioPropsInit(&Cfg.Props, 2, true /*fSigned*/, 2, 44100); 4575 RTStrPrintf(Cfg.szName, sizeof(Cfg.szName), "output 44.1kHz 2ch S16 (HDA config hint)"); 4576 4577 pDrv->pConnector->pfnStreamConfigHint(pDrv->pConnector, &Cfg); /* (may trash CfgReq) */ 4578 } 4579 4580 LogFunc(("LUN#%u: returns VINF_SUCCESS (pCon=%p)\n", uLUN, pDrv->pConnector)); 4581 return VINF_SUCCESS; 4550 RTListAppend(&pThisCC->lstDrv, &pDrv->Node); 4551 pDrv->fAttached = true; 4582 4552 } 4583 4553 4584 rc = VERR_PDM_MISSING_INTERFACE_BELOW; 4585 } 4586 else 4587 rc = VERR_NO_MEMORY; 4554 if (ppDrv) 4555 *ppDrv = pDrv; 4556 4557 /* 4558 * While we're here, give the windows backends a hint about our typical playback 4559 * configuration. 4560 * Note! If 48000Hz is advertised to the guest, add it here. 4561 */ 4562 if ( pDrv->pConnector 4563 && pDrv->pConnector->pfnStreamConfigHint) 4564 { 4565 PDMAUDIOSTREAMCFG Cfg; 4566 RT_ZERO(Cfg); 4567 Cfg.enmDir = PDMAUDIODIR_OUT; 4568 Cfg.enmPath = PDMAUDIOPATH_OUT_FRONT; 4569 Cfg.Device.cMsSchedulingHint = 10; 4570 Cfg.Backend.cFramesPreBuffering = UINT32_MAX; 4571 PDMAudioPropsInit(&Cfg.Props, 2, true /*fSigned*/, 2, 44100); 4572 RTStrPrintf(Cfg.szName, sizeof(Cfg.szName), "output 44.1kHz 2ch S16 (HDA config hint)"); 4573 4574 pDrv->pConnector->pfnStreamConfigHint(pDrv->pConnector, &Cfg); /* (may trash CfgReq) */ 4575 } 4576 4577 LogFunc(("LUN#%u: returns VINF_SUCCESS (pCon=%p)\n", uLUN, pDrv->pConnector)); 4578 return VINF_SUCCESS; 4579 } 4580 4581 rc = VERR_PDM_MISSING_INTERFACE_BELOW; 4588 4582 } 4589 4583 else if (rc == VERR_PDM_NO_ATTACHED_DRIVER) … … 4591 4585 else 4592 4586 LogFunc(("Failed attaching driver for LUN #%u: %Rrc\n", uLUN, rc)); 4593 4594 RTStrFree(pszDesc); 4587 RTMemFree(pDrv); 4588 4595 4589 LogFunc(("LUN#%u: rc=%Rrc\n", uLUN, rc)); 4596 4590 return rc; -
trunk/src/VBox/Devices/Audio/DevIchAc97.cpp
r90447 r91687 515 515 bool fAttached; 516 516 uint8_t abPadding[6]; 517 /** Pointer to the description string passed to PDMDevHlpDriverAttach(). */518 R3PTRTYPE(char *) pszDesc;519 517 /** Pointer to attached driver base interface. */ 520 518 R3PTRTYPE(PPDMIBASE) pDrvBase; … … 527 525 /** Driver stream for output. */ 528 526 AC97DRIVERSTREAM Out; 527 /** The LUN description. */ 528 char szDesc[48 - 2]; 529 529 } AC97DRIVER; 530 530 /** Pointer to a host backend driver (LUN). */ … … 4145 4145 * @param pDevIns The device instance. 4146 4146 * @param pThisCC The ring-3 AC'97 device state. 4147 * @param iLunThe logical unit which is being attached.4147 * @param uLUN The logical unit which is being attached. 4148 4148 * @param ppDrv Attached driver instance on success. Optional. 4149 4149 */ 4150 static int ichac97R3AttachInternal(PPDMDEVINS pDevIns, PAC97STATER3 pThisCC, unsigned iLun, PAC97DRIVER *ppDrv)4150 static int ichac97R3AttachInternal(PPDMDEVINS pDevIns, PAC97STATER3 pThisCC, unsigned uLUN, PAC97DRIVER *ppDrv) 4151 4151 { 4152 4152 /* 4153 * A ttachdriver.4153 * Allocate a new driver structure and try attach the driver. 4154 4154 */ 4155 char *pszDesc = RTStrAPrintf2("Audio driver port (AC'97) for LUN #%u", iLun); 4156 AssertLogRelReturn(pszDesc, VERR_NO_STR_MEMORY); 4155 PAC97DRIVER pDrv = (PAC97DRIVER)RTMemAllocZ(sizeof(AC97DRIVER)); 4156 AssertPtrReturn(pDrv, VERR_NO_MEMORY); 4157 RTStrPrintf(pDrv->szDesc, sizeof(pDrv->szDesc), "Audio driver port (AC'97) for LUN #%u", uLUN); 4157 4158 4158 4159 PPDMIBASE pDrvBase; 4159 int rc = PDMDevHlpDriverAttach(pDevIns, iLun, &pThisCC->IBase, &pDrvBase, pszDesc);4160 int rc = PDMDevHlpDriverAttach(pDevIns, uLUN, &pThisCC->IBase, &pDrvBase, pDrv->szDesc); 4160 4161 if (RT_SUCCESS(rc)) 4161 4162 { 4162 PAC97DRIVER pDrv = (PAC97DRIVER)RTMemAllocZ(sizeof(AC97DRIVER)); 4163 if (pDrv) 4163 pDrv->pConnector = PDMIBASE_QUERY_INTERFACE(pDrvBase, PDMIAUDIOCONNECTOR); 4164 AssertPtr(pDrv->pConnector); 4165 if (RT_VALID_PTR(pDrv->pConnector)) 4164 4166 { 4165 pDrv->pConnector = PDMIBASE_QUERY_INTERFACE(pDrvBase, PDMIAUDIOCONNECTOR); 4166 AssertPtr(pDrv->pConnector); 4167 if (RT_VALID_PTR(pDrv->pConnector)) 4167 pDrv->pDrvBase = pDrvBase; 4168 pDrv->uLUN = uLUN; 4169 4170 /* Attach to driver list if not attached yet. */ 4171 if (!pDrv->fAttached) 4168 4172 { 4169 pDrv->pDrvBase = pDrvBase; 4170 pDrv->uLUN = iLun; 4171 pDrv->pszDesc = pszDesc; 4172 4173 /* Attach to driver list if not attached yet. */ 4174 if (!pDrv->fAttached) 4175 { 4176 RTListAppend(&pThisCC->lstDrv, &pDrv->Node); 4177 pDrv->fAttached = true; 4178 } 4179 4180 if (ppDrv) 4181 *ppDrv = pDrv; 4182 4183 /* 4184 * While we're here, give the windows backends a hint about our typical playback 4185 * configuration. 4186 */ 4187 if ( pDrv->pConnector 4188 && pDrv->pConnector->pfnStreamConfigHint) 4189 { 4190 /* 48kHz */ 4191 PDMAUDIOSTREAMCFG Cfg; 4192 RT_ZERO(Cfg); 4193 Cfg.enmDir = PDMAUDIODIR_OUT; 4194 Cfg.enmPath = PDMAUDIOPATH_OUT_FRONT; 4195 Cfg.Device.cMsSchedulingHint = 5; 4196 Cfg.Backend.cFramesPreBuffering = UINT32_MAX; 4197 PDMAudioPropsInit(&Cfg.Props, 2, true /*fSigned*/, 2, 48000); 4198 RTStrPrintf(Cfg.szName, sizeof(Cfg.szName), "output 48kHz 2ch S16 (HDA config hint)"); 4199 4200 pDrv->pConnector->pfnStreamConfigHint(pDrv->pConnector, &Cfg); /* (may trash CfgReq) */ 4173 RTListAppend(&pThisCC->lstDrv, &pDrv->Node); 4174 pDrv->fAttached = true; 4175 } 4176 4177 if (ppDrv) 4178 *ppDrv = pDrv; 4179 4180 /* 4181 * While we're here, give the windows backends a hint about our typical playback 4182 * configuration. 4183 */ 4184 if ( pDrv->pConnector 4185 && pDrv->pConnector->pfnStreamConfigHint) 4186 { 4187 /* 48kHz */ 4188 PDMAUDIOSTREAMCFG Cfg; 4189 RT_ZERO(Cfg); 4190 Cfg.enmDir = PDMAUDIODIR_OUT; 4191 Cfg.enmPath = PDMAUDIOPATH_OUT_FRONT; 4192 Cfg.Device.cMsSchedulingHint = 5; 4193 Cfg.Backend.cFramesPreBuffering = UINT32_MAX; 4194 PDMAudioPropsInit(&Cfg.Props, 2, true /*fSigned*/, 2, 48000); 4195 RTStrPrintf(Cfg.szName, sizeof(Cfg.szName), "output 48kHz 2ch S16 (HDA config hint)"); 4196 4197 pDrv->pConnector->pfnStreamConfigHint(pDrv->pConnector, &Cfg); /* (may trash CfgReq) */ 4201 4198 # if 0 4202 /* 44.1kHz */4203 RT_ZERO(Cfg);4204 Cfg.enmDir = PDMAUDIODIR_OUT;4205 Cfg.enmPath = PDMAUDIOPATH_OUT_FRONT;4206 Cfg.Device.cMsSchedulingHint = 10;4207 Cfg.Backend.cFramesPreBuffering = UINT32_MAX;4208 PDMAudioPropsInit(&Cfg.Props, 2, true /*fSigned*/, 2, 44100);4209 RTStrPrintf(Cfg.szName, sizeof(Cfg.szName), "output 44.1kHz 2ch S16 (HDA config hint)");4210 4211 pDrv->pConnector->pfnStreamConfigHint(pDrv->pConnector, &Cfg); /* (may trash CfgReq) */4199 /* 44.1kHz */ 4200 RT_ZERO(Cfg); 4201 Cfg.enmDir = PDMAUDIODIR_OUT; 4202 Cfg.enmPath = PDMAUDIOPATH_OUT_FRONT; 4203 Cfg.Device.cMsSchedulingHint = 10; 4204 Cfg.Backend.cFramesPreBuffering = UINT32_MAX; 4205 PDMAudioPropsInit(&Cfg.Props, 2, true /*fSigned*/, 2, 44100); 4206 RTStrPrintf(Cfg.szName, sizeof(Cfg.szName), "output 44.1kHz 2ch S16 (HDA config hint)"); 4207 4208 pDrv->pConnector->pfnStreamConfigHint(pDrv->pConnector, &Cfg); /* (may trash CfgReq) */ 4212 4209 # endif 4213 }4214 4215 LogFunc(("LUN#%u: returns VINF_SUCCESS (pCon=%p)\n", iLun, pDrv->pConnector));4216 return VINF_SUCCESS;4217 4210 } 4218 RTMemFree(pDrv); 4219 rc = VERR_PDM_MISSING_INTERFACE_BELOW; 4211 4212 LogFunc(("LUN#%u: returns VINF_SUCCESS (pCon=%p)\n", uLUN, pDrv->pConnector)); 4213 return VINF_SUCCESS; 4220 4214 } 4221 else4222 rc = VERR_NO_MEMORY;4215 RTMemFree(pDrv); 4216 rc = VERR_PDM_MISSING_INTERFACE_BELOW; 4223 4217 } 4224 4218 else if (rc == VERR_PDM_NO_ATTACHED_DRIVER) 4225 LogFunc(("No attached driver for LUN #%u\n", iLun));4219 LogFunc(("No attached driver for LUN #%u\n", uLUN)); 4226 4220 else 4227 LogFunc(("Attached driver for LUN #%u failed: %Rrc\n", iLun, rc));4228 4229 RTStrFree(pszDesc); 4230 LogFunc(("LUN#%u: rc=%Rrc\n", iLun, rc));4221 LogFunc(("Attached driver for LUN #%u failed: %Rrc\n", uLUN, rc)); 4222 RTMemFree(pDrv); 4223 4224 LogFunc(("LUN#%u: rc=%Rrc\n", uLUN, rc)); 4231 4225 return rc; 4232 4226 } … … 4322 4316 DEVAC97_UNLOCK(pDevIns, pThis); 4323 4317 4324 RTStrFree(pDrv->pszDesc);4325 4318 RTMemFree(pDrv); 4326 4319 return; … … 4347 4340 { 4348 4341 RTListNodeRemove(&pDrv->Node); 4349 RTMemFree(pDrv->pszDesc);4350 4342 RTMemFree(pDrv); 4351 4343 } -
trunk/src/VBox/Devices/Audio/DevSB16.cpp
r90016 r91687 2630 2630 */ 2631 2631 PSB16DRIVER pDrv = (PSB16DRIVER)RTMemAllocZ(sizeof(SB16DRIVER)); 2632 Assert Return(pDrv, VERR_NO_MEMORY);2632 AssertPtrReturn(pDrv, VERR_NO_MEMORY); 2633 2633 RTStrPrintf(pDrv->szDesc, sizeof(pDrv->szDesc), "Audio driver port (SB16) for LUN #%u", uLUN); 2634 2634
Note:
See TracChangeset
for help on using the changeset viewer.

