- Timestamp:
- Jun 2, 2017 3:24:56 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Audio/DevHDA.cpp
r67241 r67248 307 307 /** @todo Condense marcos! */ 308 308 309 #define HDA_REG_SD0CTL HDA_NUM_GENERAL_REGS /* 0x80 */ 310 #define HDA_REG_SD1CTL (HDA_STREAM_REG_DEF(CTL, 0) + 10) /* 0xA0 */ 311 #define HDA_REG_SD2CTL (HDA_STREAM_REG_DEF(CTL, 0) + 20) /* 0xC0 */ 312 #define HDA_REG_SD3CTL (HDA_STREAM_REG_DEF(CTL, 0) + 30) /* 0xE0 */ 313 #define HDA_REG_SD4CTL (HDA_STREAM_REG_DEF(CTL, 0) + 40) /* 0x100 */ 314 #define HDA_REG_SD5CTL (HDA_STREAM_REG_DEF(CTL, 0) + 50) /* 0x120 */ 315 #define HDA_REG_SD6CTL (HDA_STREAM_REG_DEF(CTL, 0) + 60) /* 0x140 */ 316 #define HDA_REG_SD7CTL (HDA_STREAM_REG_DEF(CTL, 0) + 70) /* 0x160 */ 309 #define HDA_REG_SD0CTL HDA_NUM_GENERAL_REGS /* 0x80; other streams offset by 0x20 */ 317 310 #define HDA_RMX_SD0CTL 32 318 311 #define HDA_RMX_SD1CTL (HDA_STREAM_RMX_DEF(CTL, 0) + 10) … … 326 319 #define SD(func, num) SD##num##func 327 320 328 #define HDA_SDCTL(pThis, num) HDA_REG((pThis), SD(CTL, num))329 321 #define HDA_SDCTL_NUM_MASK 0xF 330 322 #define HDA_SDCTL_NUM_SHIFT 20 … … 339 331 #define HDA_SDCTL_SRST RT_BIT(0) /* Stream Reset */ 340 332 341 #define HDA_REG_SD0STS 35 /* 0x83 */ 342 #define HDA_REG_SD1STS (HDA_STREAM_REG_DEF(STS, 0) + 10) /* 0xA3 */ 343 #define HDA_REG_SD2STS (HDA_STREAM_REG_DEF(STS, 0) + 20) /* 0xC3 */ 344 #define HDA_REG_SD3STS (HDA_STREAM_REG_DEF(STS, 0) + 30) /* 0xE3 */ 345 #define HDA_REG_SD4STS (HDA_STREAM_REG_DEF(STS, 0) + 40) /* 0x103 */ 346 #define HDA_REG_SD5STS (HDA_STREAM_REG_DEF(STS, 0) + 50) /* 0x123 */ 347 #define HDA_REG_SD6STS (HDA_STREAM_REG_DEF(STS, 0) + 60) /* 0x143 */ 348 #define HDA_REG_SD7STS (HDA_STREAM_REG_DEF(STS, 0) + 70) /* 0x163 */ 333 #define HDA_REG_SD0STS 35 /* 0x83; other streams offset by 0x20 */ 349 334 #define HDA_RMX_SD0STS 33 350 335 #define HDA_RMX_SD1STS (HDA_STREAM_RMX_DEF(STS, 0) + 10) … … 362 347 #define HDA_SDSTS_BCIS RT_BIT(2) /* Buffer Completion Interrupt Status */ 363 348 364 #define HDA_REG_SD0LPIB 36 /* 0x84 */349 #define HDA_REG_SD0LPIB 36 /* 0x84; other streams offset by 0x20 */ 365 350 #define HDA_REG_SD1LPIB (HDA_STREAM_REG_DEF(LPIB, 0) + 10) /* 0xA4 */ 366 351 #define HDA_REG_SD2LPIB (HDA_STREAM_REG_DEF(LPIB, 0) + 20) /* 0xC4 */ … … 379 364 #define HDA_RMX_SD7LPIB (HDA_STREAM_RMX_DEF(LPIB, 0) + 70) 380 365 381 #define HDA_REG_SD0CBL 37 /* 0x88 */ 382 #define HDA_REG_SD1CBL (HDA_STREAM_REG_DEF(CBL, 0) + 10) /* 0xA8 */ 383 #define HDA_REG_SD2CBL (HDA_STREAM_REG_DEF(CBL, 0) + 20) /* 0xC8 */ 384 #define HDA_REG_SD3CBL (HDA_STREAM_REG_DEF(CBL, 0) + 30) /* 0xE8 */ 385 #define HDA_REG_SD4CBL (HDA_STREAM_REG_DEF(CBL, 0) + 40) /* 0x108 */ 386 #define HDA_REG_SD5CBL (HDA_STREAM_REG_DEF(CBL, 0) + 50) /* 0x128 */ 387 #define HDA_REG_SD6CBL (HDA_STREAM_REG_DEF(CBL, 0) + 60) /* 0x148 */ 388 #define HDA_REG_SD7CBL (HDA_STREAM_REG_DEF(CBL, 0) + 70) /* 0x168 */ 366 #define HDA_REG_SD0CBL 37 /* 0x88; other streams offset by 0x20 */ 389 367 #define HDA_RMX_SD0CBL 35 390 368 #define HDA_RMX_SD1CBL (HDA_STREAM_RMX_DEF(CBL, 0) + 10) … … 396 374 #define HDA_RMX_SD7CBL (HDA_STREAM_RMX_DEF(CBL, 0) + 70) 397 375 398 #define HDA_REG_SD0LVI 38 /* 0x8C */ 399 #define HDA_REG_SD1LVI (HDA_STREAM_REG_DEF(LVI, 0) + 10) /* 0xAC */ 400 #define HDA_REG_SD2LVI (HDA_STREAM_REG_DEF(LVI, 0) + 20) /* 0xCC */ 401 #define HDA_REG_SD3LVI (HDA_STREAM_REG_DEF(LVI, 0) + 30) /* 0xEC */ 402 #define HDA_REG_SD4LVI (HDA_STREAM_REG_DEF(LVI, 0) + 40) /* 0x10C */ 403 #define HDA_REG_SD5LVI (HDA_STREAM_REG_DEF(LVI, 0) + 50) /* 0x12C */ 404 #define HDA_REG_SD6LVI (HDA_STREAM_REG_DEF(LVI, 0) + 60) /* 0x14C */ 405 #define HDA_REG_SD7LVI (HDA_STREAM_REG_DEF(LVI, 0) + 70) /* 0x16C */ 376 #define HDA_REG_SD0LVI 38 /* 0x8C; other streams offset by 0x20 */ 406 377 #define HDA_RMX_SD0LVI 36 407 378 #define HDA_RMX_SD1LVI (HDA_STREAM_RMX_DEF(LVI, 0) + 10) … … 413 384 #define HDA_RMX_SD7LVI (HDA_STREAM_RMX_DEF(LVI, 0) + 70) 414 385 415 #define HDA_REG_SD0FIFOW 39 /* 0x8E */ 416 #define HDA_REG_SD1FIFOW (HDA_STREAM_REG_DEF(FIFOW, 0) + 10) /* 0xAE */ 417 #define HDA_REG_SD2FIFOW (HDA_STREAM_REG_DEF(FIFOW, 0) + 20) /* 0xCE */ 418 #define HDA_REG_SD3FIFOW (HDA_STREAM_REG_DEF(FIFOW, 0) + 30) /* 0xEE */ 419 #define HDA_REG_SD4FIFOW (HDA_STREAM_REG_DEF(FIFOW, 0) + 40) /* 0x10E */ 420 #define HDA_REG_SD5FIFOW (HDA_STREAM_REG_DEF(FIFOW, 0) + 50) /* 0x12E */ 421 #define HDA_REG_SD6FIFOW (HDA_STREAM_REG_DEF(FIFOW, 0) + 60) /* 0x14E */ 422 #define HDA_REG_SD7FIFOW (HDA_STREAM_REG_DEF(FIFOW, 0) + 70) /* 0x16E */ 386 #define HDA_REG_SD0FIFOW 39 /* 0x8E; other streams offset by 0x20 */ 423 387 #define HDA_RMX_SD0FIFOW 37 424 388 #define HDA_RMX_SD1FIFOW (HDA_STREAM_RMX_DEF(FIFOW, 0) + 10) … … 437 401 #define HDA_SDFIFOW_32B 0x4 438 402 439 #define HDA_REG_SD0FIFOS 40 /* 0x90 */ 440 #define HDA_REG_SD1FIFOS (HDA_STREAM_REG_DEF(FIFOS, 0) + 10) /* 0xB0 */ 441 #define HDA_REG_SD2FIFOS (HDA_STREAM_REG_DEF(FIFOS, 0) + 20) /* 0xD0 */ 442 #define HDA_REG_SD3FIFOS (HDA_STREAM_REG_DEF(FIFOS, 0) + 30) /* 0xF0 */ 443 #define HDA_REG_SD4FIFOS (HDA_STREAM_REG_DEF(FIFOS, 0) + 40) /* 0x110 */ 444 #define HDA_REG_SD5FIFOS (HDA_STREAM_REG_DEF(FIFOS, 0) + 50) /* 0x130 */ 445 #define HDA_REG_SD6FIFOS (HDA_STREAM_REG_DEF(FIFOS, 0) + 60) /* 0x150 */ 446 #define HDA_REG_SD7FIFOS (HDA_STREAM_REG_DEF(FIFOS, 0) + 70) /* 0x170 */ 403 #define HDA_REG_SD0FIFOS 40 /* 0x90; other streams offset by 0x20 */ 447 404 #define HDA_RMX_SD0FIFOS 38 448 405 #define HDA_RMX_SD1FIFOS (HDA_STREAM_RMX_DEF(FIFOS, 0) + 10) … … 473 430 #define SDFIFOS(pThis, num) HDA_REG((pThis), SD(FIFOS, num)) 474 431 475 #define HDA_REG_SD0FMT 41 /* 0x92 */ 476 #define HDA_REG_SD1FMT (HDA_STREAM_REG_DEF(FMT, 0) + 10) /* 0xB2 */ 477 #define HDA_REG_SD2FMT (HDA_STREAM_REG_DEF(FMT, 0) + 20) /* 0xD2 */ 478 #define HDA_REG_SD3FMT (HDA_STREAM_REG_DEF(FMT, 0) + 30) /* 0xF2 */ 479 #define HDA_REG_SD4FMT (HDA_STREAM_REG_DEF(FMT, 0) + 40) /* 0x112 */ 480 #define HDA_REG_SD5FMT (HDA_STREAM_REG_DEF(FMT, 0) + 50) /* 0x132 */ 481 #define HDA_REG_SD6FMT (HDA_STREAM_REG_DEF(FMT, 0) + 60) /* 0x152 */ 482 #define HDA_REG_SD7FMT (HDA_STREAM_REG_DEF(FMT, 0) + 70) /* 0x172 */ 432 #define HDA_REG_SD0FMT 41 /* 0x92; other streams offset by 0x20 */ 483 433 #define HDA_RMX_SD0FMT 39 484 434 #define HDA_RMX_SD1FMT (HDA_STREAM_RMX_DEF(FMT, 0) + 10) … … 492 442 #define SDFMT(pThis, num) (HDA_REG((pThis), SD(FMT, num))) 493 443 494 #define HDA_REG_SD0BDPL 42 /* 0x98 */ 495 #define HDA_REG_SD1BDPL (HDA_STREAM_REG_DEF(BDPL, 0) + 10) /* 0xB8 */ 496 #define HDA_REG_SD2BDPL (HDA_STREAM_REG_DEF(BDPL, 0) + 20) /* 0xD8 */ 497 #define HDA_REG_SD3BDPL (HDA_STREAM_REG_DEF(BDPL, 0) + 30) /* 0xF8 */ 498 #define HDA_REG_SD4BDPL (HDA_STREAM_REG_DEF(BDPL, 0) + 40) /* 0x118 */ 499 #define HDA_REG_SD5BDPL (HDA_STREAM_REG_DEF(BDPL, 0) + 50) /* 0x138 */ 500 #define HDA_REG_SD6BDPL (HDA_STREAM_REG_DEF(BDPL, 0) + 60) /* 0x158 */ 501 #define HDA_REG_SD7BDPL (HDA_STREAM_REG_DEF(BDPL, 0) + 70) /* 0x178 */ 444 #define HDA_REG_SD0BDPL 42 /* 0x98; other streams offset by 0x20 */ 502 445 #define HDA_RMX_SD0BDPL 40 503 446 #define HDA_RMX_SD1BDPL (HDA_STREAM_RMX_DEF(BDPL, 0) + 10) … … 509 452 #define HDA_RMX_SD7BDPL (HDA_STREAM_RMX_DEF(BDPL, 0) + 70) 510 453 511 #define HDA_REG_SD0BDPU 43 /* 0x9C */ 512 #define HDA_REG_SD1BDPU (HDA_STREAM_REG_DEF(BDPU, 0) + 10) /* 0xBC */ 513 #define HDA_REG_SD2BDPU (HDA_STREAM_REG_DEF(BDPU, 0) + 20) /* 0xDC */ 514 #define HDA_REG_SD3BDPU (HDA_STREAM_REG_DEF(BDPU, 0) + 30) /* 0xFC */ 515 #define HDA_REG_SD4BDPU (HDA_STREAM_REG_DEF(BDPU, 0) + 40) /* 0x11C */ 516 #define HDA_REG_SD5BDPU (HDA_STREAM_REG_DEF(BDPU, 0) + 50) /* 0x13C */ 517 #define HDA_REG_SD6BDPU (HDA_STREAM_REG_DEF(BDPU, 0) + 60) /* 0x15C */ 518 #define HDA_REG_SD7BDPU (HDA_STREAM_REG_DEF(BDPU, 0) + 70) /* 0x17C */ 454 #define HDA_REG_SD0BDPU 43 /* 0x9C; other streams offset by 0x20 */ 519 455 #define HDA_RMX_SD0BDPU 41 520 456 #define HDA_RMX_SD1BDPU (HDA_STREAM_RMX_DEF(BDPU, 0) + 10) … … 1440 1376 } 1441 1377 1442 #define HDA_MARK_STREAM(x) \ 1443 if ( (HDA_REG(pThis, INTCTL) & RT_BIT(x)) \ 1444 && ((SDSTS(pThis, x) & (HDA_SDSTS_DESE | HDA_SDSTS_FIFOE | HDA_SDSTS_BCIS))) \ 1445 ) \ 1446 { \ 1447 Log3Func(("[SD%RU8] Marked\n", x)); \ 1448 intSts |= RT_BIT(x); \ 1449 } 1450 1451 HDA_MARK_STREAM(0); 1452 HDA_MARK_STREAM(1); 1453 HDA_MARK_STREAM(2); 1454 HDA_MARK_STREAM(3); 1455 HDA_MARK_STREAM(4); 1456 HDA_MARK_STREAM(5); 1457 HDA_MARK_STREAM(6); 1458 HDA_MARK_STREAM(7); 1459 1460 #undef HDA_MARK_STREAM 1378 /** @todo r=michaln The logic here ignores enable bits and is generally completely broken. */ 1379 for (int iStrm = 0; iStrm < 8; ++iStrm) 1380 { 1381 if ( (HDA_REG(pThis, INTCTL) & RT_BIT(iStrm)) 1382 && (HDA_STREAM_REG(pThis, STS, iStrm) & (HDA_SDSTS_DESE | HDA_SDSTS_FIFOE | HDA_SDSTS_BCIS))) 1383 { 1384 Log3Func(("[SD%d] interrupt set\n", iStrm)); 1385 intSts |= RT_BIT(iStrm); 1386 } 1387 } 1461 1388 1462 1389 if (intSts) … … 1475 1402 1476 1403 /* Global Interrupt Status (GIS) set? */ 1404 /** @todo r=michaln: This is wrong. It is possible to have GIS set when CIS and all stream interrupts are disabled. */ 1477 1405 if (HDA_REG(pThis, INTSTS) & HDA_INTSTS_GIS) 1478 1406 iLevel = 1;
Note:
See TracChangeset
for help on using the changeset viewer.