Changeset 69948 in vbox for trunk/src/VBox/Devices
- Timestamp:
- Dec 6, 2017 9:59:08 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Audio/DevHDA.cpp
r69939 r69948 3384 3384 /* Saved state callbacks. */ 3385 3385 3386 static int hdaSaveStream(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, PHDASTREAM pStr m)3386 static int hdaSaveStream(PPDMDEVINS pDevIns, PSSMHANDLE pSSM, PHDASTREAM pStream) 3387 3387 { 3388 3388 RT_NOREF(pDevIns); … … 3391 3391 #endif 3392 3392 3393 Log2Func(("[SD%RU8]\n", pStr m->u8SD));3393 Log2Func(("[SD%RU8]\n", pStream->u8SD)); 3394 3394 3395 3395 /* Save stream ID. */ 3396 int rc = SSMR3PutU8(pSSM, pStr m->u8SD);3396 int rc = SSMR3PutU8(pSSM, pStream->u8SD); 3397 3397 AssertRCReturn(rc, rc); 3398 Assert(pStr m->u8SD < HDA_MAX_STREAMS);3399 3400 rc = SSMR3PutStructEx(pSSM, &pStr m->State, sizeof(HDASTREAMSTATE), 0 /*fFlags*/, g_aSSMStreamStateFields7, NULL);3398 Assert(pStream->u8SD < HDA_MAX_STREAMS); 3399 3400 rc = SSMR3PutStructEx(pSSM, &pStream->State, sizeof(HDASTREAMSTATE), 0 /*fFlags*/, g_aSSMStreamStateFields7, NULL); 3401 3401 AssertRCReturn(rc, rc); 3402 3402 3403 3403 #ifdef VBOX_STRICT /* Sanity checks. */ 3404 uint64_t u64BaseDMA = RT_MAKE_U64(HDA_STREAM_REG(pThis, BDPL, pStr m->u8SD),3405 HDA_STREAM_REG(pThis, BDPU, pStr m->u8SD));3406 uint16_t u16LVI = HDA_STREAM_REG(pThis, LVI, pStr m->u8SD);3407 uint32_t u32CBL = HDA_STREAM_REG(pThis, CBL, pStr m->u8SD);3408 3409 Assert(u64BaseDMA == pStr m->u64BDLBase);3410 Assert(u16LVI == pStr m->u16LVI);3411 Assert(u32CBL == pStr m->u32CBL);3412 #endif 3413 3414 rc = SSMR3PutStructEx(pSSM, &pStr m->State.BDLE.Desc, sizeof(HDABDLEDESC),3404 uint64_t u64BaseDMA = RT_MAKE_U64(HDA_STREAM_REG(pThis, BDPL, pStream->u8SD), 3405 HDA_STREAM_REG(pThis, BDPU, pStream->u8SD)); 3406 uint16_t u16LVI = HDA_STREAM_REG(pThis, LVI, pStream->u8SD); 3407 uint32_t u32CBL = HDA_STREAM_REG(pThis, CBL, pStream->u8SD); 3408 3409 Assert(u64BaseDMA == pStream->u64BDLBase); 3410 Assert(u16LVI == pStream->u16LVI); 3411 Assert(u32CBL == pStream->u32CBL); 3412 #endif 3413 3414 rc = SSMR3PutStructEx(pSSM, &pStream->State.BDLE.Desc, sizeof(HDABDLEDESC), 3415 3415 0 /*fFlags*/, g_aSSMBDLEDescFields7, NULL); 3416 3416 AssertRCReturn(rc, rc); 3417 3417 3418 rc = SSMR3PutStructEx(pSSM, &pStr m->State.BDLE.State, sizeof(HDABDLESTATE),3418 rc = SSMR3PutStructEx(pSSM, &pStream->State.BDLE.State, sizeof(HDABDLESTATE), 3419 3419 0 /*fFlags*/, g_aSSMBDLEStateFields7, NULL); 3420 3420 AssertRCReturn(rc, rc); 3421 3421 3422 rc = SSMR3PutStructEx(pSSM, &pStr m->State.Period, sizeof(HDASTREAMPERIOD),3422 rc = SSMR3PutStructEx(pSSM, &pStream->State.Period, sizeof(HDASTREAMPERIOD), 3423 3423 0 /* fFlags */, g_aSSMStreamPeriodFields7, NULL); 3424 3424 AssertRCReturn(rc, rc); 3425 3425 3426 3426 #ifdef VBOX_STRICT /* Sanity checks. */ 3427 PHDABDLE pBDLE = &pStr m->State.BDLE;3427 PHDABDLE pBDLE = &pStream->State.BDLE; 3428 3428 if (u64BaseDMA) 3429 3429 { 3430 Assert(pStr m->State.uCurBDLE <= u16LVI + 1);3430 Assert(pStream->State.uCurBDLE <= u16LVI + 1); 3431 3431 3432 3432 HDABDLE curBDLE; 3433 rc = hdaBDLEFetch(pThis, &curBDLE, u64BaseDMA, pStr m->State.uCurBDLE);3433 rc = hdaBDLEFetch(pThis, &curBDLE, u64BaseDMA, pStream->State.uCurBDLE); 3434 3434 AssertRC(rc); 3435 3435 … … 3448 3448 uint32_t cbCircBufUsed = 0; 3449 3449 3450 if (pStr m->State.pCircBuf)3451 { 3452 cbCircBufSize = (uint32_t)RTCircBufSize(pStr m->State.pCircBuf);3453 cbCircBufUsed = (uint32_t)RTCircBufUsed(pStr m->State.pCircBuf);3450 if (pStream->State.pCircBuf) 3451 { 3452 cbCircBufSize = (uint32_t)RTCircBufSize(pStream->State.pCircBuf); 3453 cbCircBufUsed = (uint32_t)RTCircBufUsed(pStream->State.pCircBuf); 3454 3454 } 3455 3455 … … 3469 3469 * So get the current read offset and serialize the buffer data manually based on that. 3470 3470 */ 3471 size_t cbCircBufOffRead = RTCircBufOffsetRead(pStr m->State.pCircBuf);3471 size_t cbCircBufOffRead = RTCircBufOffsetRead(pStream->State.pCircBuf); 3472 3472 3473 3473 void *pvBuf; 3474 3474 size_t cbBuf; 3475 RTCircBufAcquireReadBlock(pStr m->State.pCircBuf, cbCircBufUsed, &pvBuf, &cbBuf);3475 RTCircBufAcquireReadBlock(pStream->State.pCircBuf, cbCircBufUsed, &pvBuf, &cbBuf); 3476 3476 3477 3477 if (cbBuf) … … 3499 3499 } 3500 3500 3501 RTCircBufReleaseReadBlock(pStr m->State.pCircBuf, 0 /* Don't advance read pointer -- see comment above */);3501 RTCircBufReleaseReadBlock(pStream->State.pCircBuf, 0 /* Don't advance read pointer -- see comment above */); 3502 3502 } 3503 3503 3504 3504 Log2Func(("[SD%RU8] LPIB=%RU32, CBL=%RU32, LVI=%RU32\n", 3505 pStr m->u8SD,3506 HDA_STREAM_REG(pThis, LPIB, pStr m->u8SD), HDA_STREAM_REG(pThis, CBL, pStrm->u8SD), HDA_STREAM_REG(pThis, LVI, pStrm->u8SD)));3505 pStream->u8SD, 3506 HDA_STREAM_REG(pThis, LPIB, pStream->u8SD), HDA_STREAM_REG(pThis, CBL, pStream->u8SD), HDA_STREAM_REG(pThis, LVI, pStream->u8SD))); 3507 3507 3508 3508 #ifdef LOG_ENABLED 3509 hdaBDLEDumpAll(pThis, pStr m->u64BDLBase, pStrm->u16LVI + 1);3509 hdaBDLEDumpAll(pThis, pStream->u64BDLBase, pStream->u16LVI + 1); 3510 3510 #endif 3511 3511 … … 3786 3786 break; 3787 3787 3788 PHDASTREAM pStr m = hdaGetStreamFromSD(pThis, uStreamID);3788 PHDASTREAM pStream = hdaGetStreamFromSD(pThis, uStreamID); 3789 3789 HDASTREAM StreamDummy; 3790 3790 3791 if (!pStr m)3791 if (!pStream) 3792 3792 { 3793 pStr m = &StreamDummy;3793 pStream = &StreamDummy; 3794 3794 LogRel2(("HDA: Warning: Stream ID=%RU32 not supported, skipping to load ...\n", uStreamID)); 3795 3795 } 3796 3796 3797 rc = hdaStreamInit(pStr m, uStreamID);3797 rc = hdaStreamInit(pStream, uStreamID); 3798 3798 if (RT_FAILURE(rc)) 3799 3799 { … … 3815 3815 rc = SSMR3GetU16(pSSM, &cBDLE); /* cBDLE */ 3816 3816 AssertRC(rc); 3817 rc = SSMR3GetU16(pSSM, &pStr m->State.uCurBDLE); /* uCurBDLE */3817 rc = SSMR3GetU16(pSSM, &pStream->State.uCurBDLE); /* uCurBDLE */ 3818 3818 AssertRC(rc); 3819 3819 rc = SSMR3Skip(pSSM, sizeof(uint32_t)); /* End marker */ … … 3829 3829 3830 3830 /* Does the current BDLE index match the current BDLE to process? */ 3831 if (u32BDLEIndex == pStr m->State.uCurBDLE)3831 if (u32BDLEIndex == pStream->State.uCurBDLE) 3832 3832 { 3833 rc = SSMR3GetU32(pSSM, &pStr m->State.BDLE.State.cbBelowFIFOW); /* cbBelowFIFOW */3833 rc = SSMR3GetU32(pSSM, &pStream->State.BDLE.State.cbBelowFIFOW); /* cbBelowFIFOW */ 3834 3834 AssertRC(rc); 3835 3835 rc = SSMR3Skip(pSSM, sizeof(uint8_t) * 256); /* FIFO, deprecated */ 3836 3836 AssertRC(rc); 3837 rc = SSMR3GetU32(pSSM, &pStr m->State.BDLE.State.u32BufOff); /* u32BufOff */3837 rc = SSMR3GetU32(pSSM, &pStream->State.BDLE.State.u32BufOff); /* u32BufOff */ 3838 3838 AssertRC(rc); 3839 3839 rc = SSMR3Skip(pSSM, sizeof(uint32_t)); /* End marker */ … … 3852 3852 else 3853 3853 { 3854 rc = SSMR3GetStructEx(pSSM, &pStr m->State, sizeof(HDASTREAMSTATE),3854 rc = SSMR3GetStructEx(pSSM, &pStream->State, sizeof(HDASTREAMSTATE), 3855 3855 0 /* fFlags */, g_aSSMStreamStateFields6, NULL); 3856 3856 if (RT_FAILURE(rc)) … … 3862 3862 AssertRC(rc); 3863 3863 Assert(uMarker == UINT32_C(0x19200102) /* SSMR3STRUCT_BEGIN */); 3864 rc = SSMR3GetU64(pSSM, &pStr m->State.BDLE.Desc.u64BufAdr);3864 rc = SSMR3GetU64(pSSM, &pStream->State.BDLE.Desc.u64BufAdr); 3865 3865 AssertRC(rc); 3866 rc = SSMR3GetU32(pSSM, &pStr m->State.BDLE.Desc.u32BufSize);3866 rc = SSMR3GetU32(pSSM, &pStream->State.BDLE.Desc.u32BufSize); 3867 3867 AssertRC(rc); 3868 3868 bool fFlags = false; 3869 3869 rc = SSMR3GetBool(pSSM, &fFlags); /* Saved states < v7 only stored the IOC as boolean flag. */ 3870 3870 AssertRC(rc); 3871 pStr m->State.BDLE.Desc.fFlags = fFlags ? HDA_BDLE_FLAG_IOC : 0;3871 pStream->State.BDLE.Desc.fFlags = fFlags ? HDA_BDLE_FLAG_IOC : 0; 3872 3872 rc = SSMR3GetU32(pSSM, &uMarker); /* End marker. */ 3873 3873 AssertRC(rc); 3874 3874 Assert(uMarker == UINT32_C(0x19920406) /* SSMR3STRUCT_END */); 3875 3875 3876 rc = SSMR3GetStructEx(pSSM, &pStr m->State.BDLE.State, sizeof(HDABDLESTATE),3876 rc = SSMR3GetStructEx(pSSM, &pStream->State.BDLE.State, sizeof(HDABDLESTATE), 3877 3877 0 /* fFlags */, g_aSSMBDLEStateFields6, NULL); 3878 3878 if (RT_FAILURE(rc)) … … 3883 3883 HDA_STREAM_REG(pThis, LPIB, uStreamID), HDA_STREAM_REG(pThis, CBL, uStreamID), HDA_STREAM_REG(pThis, LVI, uStreamID))); 3884 3884 #ifdef LOG_ENABLED 3885 hdaBDLEDumpAll(pThis, pStr m->u64BDLBase, pStrm->u16LVI + 1);3885 hdaBDLEDumpAll(pThis, pStream->u64BDLBase, pStream->u16LVI + 1); 3886 3886 #endif 3887 3887 } … … 3982 3982 AssertRC(rc); 3983 3983 3984 PHDASTREAM pStr m = hdaGetStreamFromSD(pThis, uStreamID);3984 PHDASTREAM pStream = hdaGetStreamFromSD(pThis, uStreamID); 3985 3985 HDASTREAM StreamDummy; 3986 3986 3987 if (!pStr m)3988 { 3989 pStr m = &StreamDummy;3987 if (!pStream) 3988 { 3989 pStream = &StreamDummy; 3990 3990 LogRel2(("HDA: Warning: Loading of stream #%RU8 not supported, skipping to load ...\n", uStreamID)); 3991 3991 } 3992 3992 3993 rc = hdaStreamInit(pStr m, uStreamID);3993 rc = hdaStreamInit(pStream, uStreamID); 3994 3994 if (RT_FAILURE(rc)) 3995 3995 { … … 3998 3998 } 3999 3999 4000 rc = SSMR3GetStructEx(pSSM, &pStr m->State, sizeof(HDASTREAMSTATE),4000 rc = SSMR3GetStructEx(pSSM, &pStream->State, sizeof(HDASTREAMSTATE), 4001 4001 0 /* fFlags */, g_aSSMStreamStateFields7, 4002 4002 NULL); … … 4006 4006 * Load BDLEs (Buffer Descriptor List Entries) and DMA counters. 4007 4007 */ 4008 rc = SSMR3GetStructEx(pSSM, &pStr m->State.BDLE.Desc, sizeof(HDABDLEDESC),4008 rc = SSMR3GetStructEx(pSSM, &pStream->State.BDLE.Desc, sizeof(HDABDLEDESC), 4009 4009 0 /* fFlags */, g_aSSMBDLEDescFields7, NULL); 4010 4010 AssertRC(rc); 4011 4011 4012 rc = SSMR3GetStructEx(pSSM, &pStr m->State.BDLE.State, sizeof(HDABDLESTATE),4012 rc = SSMR3GetStructEx(pSSM, &pStream->State.BDLE.State, sizeof(HDABDLESTATE), 4013 4013 0 /* fFlags */, g_aSSMBDLEStateFields7, NULL); 4014 4014 AssertRC(rc); 4015 4015 4016 Log2Func(("[SD%RU8] %R[bdle]\n", pStr m->u8SD, &pStrm->State.BDLE));4016 Log2Func(("[SD%RU8] %R[bdle]\n", pStream->u8SD, &pStream->State.BDLE)); 4017 4017 4018 4018 /* … … 4020 4020 * Don't annoy other team mates (forgot this for state v7). 4021 4021 */ 4022 hdaStreamPeriodInit(&pStr m->State.Period,4023 pStr m->u8SD, pStrm->u16LVI, pStrm->u32CBL, &pStrm->State.Cfg);4022 hdaStreamPeriodInit(&pStream->State.Period, 4023 pStream->u8SD, pStream->u16LVI, pStream->u32CBL, &pStream->State.Cfg); 4024 4024 4025 4025 if ( SSMR3HandleRevision(pSSM) >= 116273 4026 4026 || SSMR3HandleVersion(pSSM) >= VBOX_FULL_VERSION_MAKE(5, 2, 0)) 4027 4027 { 4028 rc = SSMR3GetStructEx(pSSM, &pStr m->State.Period, sizeof(HDASTREAMPERIOD),4028 rc = SSMR3GetStructEx(pSSM, &pStream->State.Period, sizeof(HDASTREAMPERIOD), 4029 4029 0 /* fFlags */, g_aSSMStreamPeriodFields7, NULL); 4030 4030 AssertRC(rc); … … 4051 4051 ("HDA: Saved state contains invalid DMA buffer usage (%RU32/%RU32) for stream #%RU8", 4052 4052 cbCircBufUsed, cbCircBufSize, uStreamID)); 4053 AssertPtr(pStr m->State.pCircBuf);4053 AssertPtr(pStream->State.pCircBuf); 4054 4054 4055 4055 /* Do we need to cre-create the circular buffer do fit the data size? */ 4056 if (cbCircBufSize != (uint32_t)RTCircBufSize(pStr m->State.pCircBuf))4056 if (cbCircBufSize != (uint32_t)RTCircBufSize(pStream->State.pCircBuf)) 4057 4057 { 4058 RTCircBufDestroy(pStr m->State.pCircBuf);4059 pStr m->State.pCircBuf = NULL;4060 4061 rc = RTCircBufCreate(&pStr m->State.pCircBuf, cbCircBufSize);4058 RTCircBufDestroy(pStream->State.pCircBuf); 4059 pStream->State.pCircBuf = NULL; 4060 4061 rc = RTCircBufCreate(&pStream->State.pCircBuf, cbCircBufSize); 4062 4062 AssertRC(rc); 4063 4063 } … … 4069 4069 size_t cbBuf; 4070 4070 4071 RTCircBufAcquireWriteBlock(pStr m->State.pCircBuf, cbCircBufUsed, &pvBuf, &cbBuf);4071 RTCircBufAcquireWriteBlock(pStream->State.pCircBuf, cbCircBufUsed, &pvBuf, &cbBuf); 4072 4072 4073 4073 if (cbBuf) … … 4077 4077 } 4078 4078 4079 RTCircBufReleaseWriteBlock(pStr m->State.pCircBuf, cbBuf);4079 RTCircBufReleaseWriteBlock(pStream->State.pCircBuf, cbBuf); 4080 4080 4081 4081 Assert(cbBuf == cbCircBufUsed); … … 4087 4087 HDA_STREAM_REG(pThis, LPIB, uStreamID), HDA_STREAM_REG(pThis, CBL, uStreamID), HDA_STREAM_REG(pThis, LVI, uStreamID))); 4088 4088 #ifdef LOG_ENABLED 4089 hdaBDLEDumpAll(pThis, pStr m->u64BDLBase, pStrm->u16LVI + 1);4089 hdaBDLEDumpAll(pThis, pStream->u64BDLBase, pStream->u16LVI + 1); 4090 4090 #endif 4091 4091 /** @todo (Re-)initialize active periods? */ … … 4226 4226 && iIdx < HDA_MAX_STREAMS); 4227 4227 4228 const PHDASTREAM pStr m = &pThis->aStreams[iIdx];4228 const PHDASTREAM pStream = &pThis->aStreams[iIdx]; 4229 4229 4230 4230 pHlp->pfnPrintf(pHlp, "Stream #%d:\n", iIdx); … … 4233 4233 pHlp->pfnPrintf(pHlp, "\tSD%dFIFOS: %R[sdfifos]\n", iIdx, HDA_STREAM_REG(pThis, FIFOS, iIdx)); 4234 4234 pHlp->pfnPrintf(pHlp, "\tSD%dFIFOW: %R[sdfifow]\n", iIdx, HDA_STREAM_REG(pThis, FIFOW, iIdx)); 4235 pHlp->pfnPrintf(pHlp, "\tBDLE : %R[bdle]\n", &pStr m->State.BDLE);4235 pHlp->pfnPrintf(pHlp, "\tBDLE : %R[bdle]\n", &pStream->State.BDLE); 4236 4236 } 4237 4237 … … 4242 4242 && iIdx < HDA_MAX_STREAMS); 4243 4243 4244 const PHDASTREAM pStr m = &pThis->aStreams[iIdx];4245 const PHDABDLE pBDLE = &pStrm->State.BDLE;4244 const PHDASTREAM pStream = &pThis->aStreams[iIdx]; 4245 const PHDABDLE pBDLE = &pStream->State.BDLE; 4246 4246 4247 4247 pHlp->pfnPrintf(pHlp, "Stream #%d BDLE:\n", iIdx);
Note:
See TracChangeset
for help on using the changeset viewer.