Changeset 88201 in vbox
- Timestamp:
- Mar 19, 2021 8:03:46 AM (4 years ago)
- svn:sync-xref-src-repo-rev:
- 143365
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/iommu-intel.h
r88192 r88201 31 31 32 32 #include <iprt/types.h> 33 #include <iprt/assertcompile.h>34 33 35 34 … … 40 39 */ 41 40 #define VTD_MMIO_GROUP_0_OFF_FIRST 0x000 42 #define VTD_MMIO_OFF_VER_REG 0x000/**< Version. */41 #define VTD_MMIO_OFF_VER_REG VTD_MMIO_GROUP_0_OFF_FIRST /**< Version. */ 43 42 #define VTD_MMIO_OFF_CAP_REG 0x008 /**< Capability. */ 44 43 #define VTD_MMIO_OFF_ECAP_REG 0x010 /**< Extended Capability. */ … … 121 120 #define VTD_MMIO_GROUP_0_OFF_END (VTD_MMIO_GROUP_0_OFF_LAST + 8 /* sizeof MTRR_PHYSMASK9_REG */) 122 121 123 #define VTD_MMIO_GROUP_1_OFF_FIRST 0x 000124 #define VTD_MMIO_OFF_VCCAP_REG 0xe00/**< Virtual Command Capability. */122 #define VTD_MMIO_GROUP_1_OFF_FIRST 0xe00 123 #define VTD_MMIO_OFF_VCCAP_REG VTD_MMIO_GROUP_1_OFF_FIRST /**< Virtual Command Capability. */ 125 124 #define VTD_MMIO_OFF_VCMD_REG 0xe10 /**< Virtual Command. */ 126 125 #define VTD_MMIO_OFF_VCRSP_REG 0xe20 /**< Virtual Command Response. */ … … 704 703 RT_BF_ASSERT_COMPILE_CHECKS(VTX_BF_VER_REG_, UINT32_C(0), UINT32_MAX, 705 704 (MIN, MAX, RSVD_31_8)); 705 /** RW: Read/write mask. */ 706 #define VTD_VER_REG_RW_MASK UINT32_C(0) 706 707 /** @} */ 707 708 … … 784 785 (ND, AFL, RWBF, PLMR, PHMR, CM, SAGAW, RSVD_15_13, MGAW, ZLR, RSVD_23, FRO, SLLPS, RSVD_38, PSI, NFR, 785 786 MAMV, DWD, DRD, FL1GP, RSVD_58_57, PI, FL5LP, RSVD_63_61)); 787 788 /** RW: Read/write mask. */ 789 #define VTD_CAP_REG_RW_MASK UINT64_C(0x0000000000000000) 786 790 /** @} */ 787 791 … … 895 899 PRS, ERS, SRS, RSVD_32, NWFS, EAFS, PSS, PASID, DIT, PDS, SMTS, VCS, SLADS, SLTS, FLTS, SMPWCS, RPS, 896 900 RSVD_63_50)); 901 902 /** RW: Read/write mask. */ 903 #define VTD_ECAP_REG_RW_MASK UINT64_C(0x0000000000000000) 897 904 /** @} */ 898 905 … … 932 939 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_GCMD_REG_, UINT32_C(0), UINT32_MAX, 933 940 (RSVD_22_0, CFI, SIRTP, IRE, QIE, WBF, EAFL, SFL, SRTP, TE)); 941 942 /** RW: Read/write mask. */ 943 #define VTD_GCMD_REG_RW_MASK UINT32_C(0xff800000) 934 944 /** @} */ 935 945 … … 969 979 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_GSTS_REG_, UINT32_C(0), UINT32_MAX, 970 980 (RSVD_22_0, CFIS, IRTPS, IRES, QIES, WBFS, AFLS, FLS, RTPS, TES)); 981 982 /** RW: Read/write mask. */ 983 #define VTD_GSTS_REG_RW_MASK UINT32_C(0) 971 984 /** @} */ 972 985 … … 985 998 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_RTADDR_REG_, UINT64_C(0), UINT64_MAX, 986 999 (RSVD_9_0, TTM, RTA)); 1000 1001 /** RW: Read/write mask. */ 1002 #define VTD_RTADDR_REG_RW_MASK UINT64_C(0xfffffffffffffc00) 987 1003 /** @} */ 988 1004 … … 1013 1029 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_CCMD_REG_, UINT64_C(0), UINT64_MAX, 1014 1030 (DID, SID, FM, RSVD_58_34, CAIG, CIRG, ICC)); 1031 1032 /** RW: Read/write mask. */ 1033 #define VTD_CCMD_REG_RW_MASK ( VTD_BF_CCMD_REG_DID_MASK | VTD_BF_CCMD_REG_SID_MASK \ 1034 | VTD_BF_CCMD_REG_FM_MASK | VTD_BF_CCMD_REG_CIRG_MASK \ 1035 | VTD_BF_CCMD_REG_ICC_MASK) 1015 1036 /** @} */ 1016 1037 … … 1106 1127 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_FSTS_REG_, UINT32_C(0), UINT32_MAX, 1107 1128 (PFO, PPF, AFO, APF, IQE, ICE, ITE, RSVD_7, FRI, RSVD_31_16)); 1129 1130 /** RW: Read/write mask. */ 1131 #define VTD_FSTS_REG_RW_MASK ( VTD_BF_FSTS_REG_PFO_MASK | VTD_BF_FSTS_REG_AFO_MASK \ 1132 | VTD_BF_FSTS_REG_APF_MASK | VTD_BF_FSTS_REG_IQE_MASK \ 1133 | VTD_BF_FSTS_REG_ICE_MASK | VTD_BF_FSTS_REG_ITE_MASK) 1108 1134 /** @} */ 1109 1135 … … 1122 1148 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_FECTL_REG_, UINT32_C(0), UINT32_MAX, 1123 1149 (RSVD_29_0, IP, IM)); 1150 1151 /** RW: Read/write mask. */ 1152 #define VTD_FECTL_REG_RW_MASK VTD_BF_FECTL_REG_IM_MASK 1124 1153 /** @} */ 1125 1154 … … 1135 1164 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_FEDATA_REG_, UINT32_C(0), UINT32_MAX, 1136 1165 (IMD, EIMD)); 1166 1167 /** RW: Read/write mask. */ 1168 #define VTD_FEDATA_REG_RW_MASK (VTD_BF_FEDATA_REG_IMD_MASK | VTD_BF_FEDATA_REG_EIMD_MASK) 1137 1169 /** @} */ 1138 1170 … … 1148 1180 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_FEADDR_REG_, UINT32_C(0), UINT32_MAX, 1149 1181 (RSVD_1_0, MA)); 1182 1183 /** RW: Read/write mask. */ 1184 #define VTD_FEADDR_REG_RW_MASK VTD_BF_FEADDR_REG_MA_MASK 1185 /** @} */ 1186 1187 1188 /** @name Fault Event Upper Address Register (FEUADDR_REG). 1189 * @{ */ 1190 /** MUA: Message Upper Address. */ 1191 #define VTD_BF_FEUADDR_REG_MA_SHIFT 0 1192 #define VTD_BF_FEUADDR_REG_MA_MASK UINT32_C(0xffffffff) 1193 1194 /** RW: Read/write mask. */ 1195 #define VTD_FEUADDR_REG_RW_MASK VTD_BF_FEUADDR_REG_MA_MASK 1150 1196 /** @} */ 1151 1197 … … 1213 1259 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_0_AFLOG_REG_, UINT64_C(0), UINT64_MAX, 1214 1260 (RSVD_8_0, FLS, FLA)); 1261 1262 /** RW: Read/write mask. */ 1263 #define VTD_AFLOG_REG_RW_MASK (VTD_BF_0_AFLOG_REG_FLS_MASK | VTD_BF_0_AFLOG_REG_FLA_MASK) 1215 1264 /** @} */ 1216 1265 … … 1229 1278 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_PMEN_REG_, UINT32_C(0), UINT32_MAX, 1230 1279 (PRS, RSVD_30_1, EPM)); 1280 1281 /** RW: Read/write mask. */ 1282 #define VTD_PMEN_REG_RW_MASK VTD_BF_PMEN_REG_EPM_MASK 1231 1283 /** @} */ 1232 1284 … … 1245 1297 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_IQH_REG_, UINT64_C(0), UINT64_MAX, 1246 1298 (RSVD_3_0, QH, RSVD_63_19)); 1299 1300 /** RW: Read/write mask. */ 1301 #define VTD_IQH_REG_RW_MASK UINT64_C(0x0) 1247 1302 /** @} */ 1248 1303 … … 1261 1316 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_IQT_REG_, UINT64_C(0), UINT64_MAX, 1262 1317 (RSVD_3_0, QT, RSVD_63_19)); 1263 /** @} */ 1318 1319 /** RW: Read/write mask. */ 1320 #define VTD_IQT_REG_RW_MASK VTD_BF_IQT_REG_QT_MASK 1321 /** @} */ 1322 1264 1323 1265 1324 /** @name Invalidation Queue Address Register (IQA_REG). … … 1279 1338 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_IQA_REG_, UINT64_C(0), UINT64_MAX, 1280 1339 (QS, RSVD_10_3, DW, IQA)); 1340 1341 /** RW: Read/write mask. */ 1342 #define VTD_IQA_REG_RW_MASK ( VTD_BF_IQA_REG_QS_MASK | VTD_BF_IQA_REG_DW_MASK \ 1343 | VTD_BF_IQA_REG_IQA_MASK) 1281 1344 /** @} */ 1282 1345 … … 1292 1355 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_ICS_REG_, UINT32_C(0), UINT32_MAX, 1293 1356 (IWC, RSVD_31_1)); 1357 1358 /** RW: Read/write mask. */ 1359 #define VTD_ICS_REG_RW_MASK VTD_BF_ICS_REG_IWC_MASK 1294 1360 /** @} */ 1295 1361 … … 1308 1374 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_IECTL_REG_, UINT32_C(0), UINT32_MAX, 1309 1375 (RSVD_29_0, IP, IM)); 1376 1377 /** RW: Read/write mask. */ 1378 #define VTD_IECTL_REG_RW_MASK VTD_BF_IECTL_REG_IM_MASK 1310 1379 /** @} */ 1311 1380 … … 1321 1390 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_IEDATA_REG_, UINT32_C(0), UINT32_MAX, 1322 1391 (IMD, EIMD)); 1392 1393 /** RW: Read/write mask. */ 1394 #define VTD_IEDATA_REG_RW_MASK (VTD_BF_IEDATA_REG_IMD_MASK | VTD_BF_IEDATA_REG_EIMD_MASK) 1323 1395 /** @} */ 1324 1396 … … 1334 1406 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_IEADDR_REG_, UINT32_C(0), UINT32_MAX, 1335 1407 (RSVD_1_0, MA)); 1408 1409 /** RW: Read/write mask. */ 1410 #define VTD_IEADDR_REG_RW_MASK VTD_BF_IEADDR_REG_MA_MASK 1411 /** @} */ 1412 1413 1414 /** @name Invalidation Event Upper Address Register (IEUADDR_REG). 1415 * @{ */ 1416 /** MUA: Message Upper Address. */ 1417 #define VTD_BF_IEUADDR_REG_MUA_SHIFT 0 1418 #define VTD_BF_IEUADDR_REG_MUA_MASK UINT32_C(0xffffffff) 1419 1420 /** RW: Read/write mask. */ 1421 #define VTD_IEUADDR_REG_RW_MASK VTD_BF_IEUADDR_REG_MUA_MASK 1336 1422 /** @} */ 1337 1423 … … 1353 1439 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_IQERCD_REG_, UINT64_C(0), UINT64_MAX, 1354 1440 (IQEI, RSVD_31_4, ITESID, ICESID)); 1441 1442 /** RW: Read/write mask. */ 1443 #define VTD_IQERCD_REG_RW_MASK UINT64_C(0) 1355 1444 /** @} */ 1356 1445 … … 1372 1461 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_IRTA_REG_, UINT64_C(0), UINT64_MAX, 1373 1462 (S, RSVD_10_4, EIME, IRTA)); 1463 1464 /** RW: Read/write mask. */ 1465 #define VTD_IRTA_REG_RW_MASK ( VTD_BF_IRTA_REG_S_MASK | VTD_BF_IRTA_REG_EIME_MASK \ 1466 | VTD_BF_IRTA_REG_IRTA_MASK) 1374 1467 /** @} */ 1375 1468 … … 1388 1481 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_PQH_REG_, UINT64_C(0), UINT64_MAX, 1389 1482 (RSVD_4_0, PQH, RSVD_63_19)); 1483 1484 /** RW: Read/write mask. */ 1485 #define VTD_PQH_REG_RW_MASK VTD_BF_PQH_REG_PQH_MASK 1390 1486 /** @} */ 1391 1487 … … 1404 1500 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_PQT_REG_, UINT64_C(0), UINT64_MAX, 1405 1501 (RSVD_4_0, PQT, RSVD_63_19)); 1502 1503 /** RW: Read/write mask. */ 1504 #define VTD_PQT_REG_RW_MASK VTD_BF_PQT_REG_PQT_MASK 1406 1505 /** @} */ 1407 1506 … … 1420 1519 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_PQA_REG_, UINT64_C(0), UINT64_MAX, 1421 1520 (PQS, RSVD_11_3, PQA)); 1521 1522 /** RW: Read/write mask. */ 1523 #define VTD_PQA_REG_RW_MASK (VTD_BF_PQA_REG_PQS_MASK | VTD_BF_PQA_REG_PQA_MASK) 1422 1524 /** @} */ 1423 1525 … … 1436 1538 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_PRS_REG_, UINT32_C(0), UINT32_MAX, 1437 1539 (PPR, PRO, RSVD_31_2)); 1540 1541 /** RW: Read/write mask. */ 1542 #define VTD_PRS_REG_RW_MASK (VTD_BF_PRS_REG_PPR_MASK | VTD_BF_PRS_REG_PRO_MASK) 1438 1543 /** @} */ 1439 1544 … … 1452 1557 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_PECTL_REG_, UINT32_C(0), UINT32_MAX, 1453 1558 (RSVD_29_0, IP, IM)); 1559 1560 /** RW: Read/write mask. */ 1561 #define VTD_PECTL_REG_RW_MASK VTD_BF_PECTL_REG_IM_MASK 1454 1562 /** @} */ 1455 1563 … … 1465 1573 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_PEDATA_REG_, UINT32_C(0), UINT32_MAX, 1466 1574 (IMD, EIMD)); 1575 1576 /** RW: Read/write mask. */ 1577 #define VTD_PEDATA_REG_RW_MASK (VTD_BF_PEDATA_REG_IMD_MASK | VTD_BF_PEDATA_REG_EIMD_MASK) 1467 1578 /** @} */ 1468 1579 … … 1478 1589 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_PEADDR_REG_, UINT32_C(0), UINT32_MAX, 1479 1590 (RSVD_1_0, MA)); 1591 1592 /** RW: Read/write mask. */ 1593 #define VTD_PEADDR_REG_RW_MASK VTD_BF_PEADDR_REG_MA_MASK 1594 /** @} */ 1595 1596 1597 1598 /** @name Page Request Event Upper Address Register (PEUADDR_REG). 1599 * @{ */ 1600 /** MA: Message Address. */ 1601 #define VTD_BF_PEUADDR_REG_MUA_SHIFT 0 1602 #define VTD_BF_PEUADDR_REG_MUA_MASK UINT32_C(0xffffffff) 1603 1604 /** RW: Read/write mask. */ 1605 #define VTD_PEUADDR_REG_RW_MASK VTD_BF_PEUADDR_REG_MUA_MASK 1606 /** @} */ 1607 1608 1609 /** @name MTRR Capability Register (MTRRCAP_REG). 1610 * @{ */ 1611 /** VCNT: Variable MTRR Count. */ 1612 #define VTD_BF_MTRRCAP_REG_VCNT_SHIFT 0 1613 #define VTD_BF_MTRRCAP_REG_VCNT_MASK UINT64_C(0x00000000000000ff) 1614 /** FIX: Fixed range MTRRs Supported. */ 1615 #define VTD_BF_MTRRCAP_REG_FIX_SHIFT 8 1616 #define VTD_BF_MTRRCAP_REG_FIX_MASK UINT64_C(0x0000000000000100) 1617 /** R: Reserved (bit 9). */ 1618 #define VTD_BF_MTRRCAP_REG_RSVD_9_SHIFT 9 1619 #define VTD_BF_MTRRCAP_REG_RSVD_9_MASK UINT64_C(0x0000000000000200) 1620 /** WC: Write Combining. */ 1621 #define VTD_BF_MTRRCAP_REG_WC_SHIFT 10 1622 #define VTD_BF_MTRRCAP_REG_WC_MASK UINT64_C(0x0000000000000400) 1623 /** R: Reserved (bits 63:11). */ 1624 #define VTD_BF_MTRRCAP_REG_RSVD_63_11_SHIFT 11 1625 #define VTD_BF_MTRRCAP_REG_RSVD_63_11_MASK UINT64_C(0xfffffffffffff800) 1626 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_MTRRCAP_REG_, UINT64_C(0), UINT64_MAX, 1627 (VCNT, FIX, RSVD_9, WC, RSVD_63_11)); 1628 1629 /** RW: Read/write mask. */ 1630 #define VTD_MTRRCAP_REG_RW_MASK UINT64_C(0) 1480 1631 /** @} */ 1481 1632 … … 1500 1651 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_MTRRDEF_REG_, UINT64_C(0), UINT64_MAX, 1501 1652 (TYPE, RSVD_9_8, FE, E, RSVD_63_12)); 1653 1654 /** RW: Read/write mask. */ 1655 #define VTD_MTRRDEF_REG_RW_MASK ( VTD_BF_MTRRDEF_REG_TYPE_MASK | VTD_BF_MTRRDEF_REG_FE_MASK \ 1656 | VTD_BF_MTRRDEF_REG_E_MASK) 1502 1657 /** @} */ 1503 1658 … … 1513 1668 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_VCCAP_REG_, UINT64_C(0), UINT64_MAX, 1514 1669 (PAS, RSVD_63_1)); 1670 1671 /** RW: Read/write mask. */ 1672 #define VTD_VCCAP_REG_RW_MASK UINT64_C(0) 1515 1673 /** @} */ 1516 1674 … … 1526 1684 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_VCMD_REG_, UINT64_C(0), UINT64_MAX, 1527 1685 (CMD, OP)); 1528 /** @} */ 1529 1530 1531 /** @name Virtual Command Register (VCMD_REG). 1686 1687 /** RW: Read/write mask. */ 1688 #define VTD_VCMD_REG_RW_MASK (VTD_BF_VCMD_REG_CMD_MASK | VTD_BF_VCMD_REG_OP_MASK) 1689 /** @} */ 1690 1691 1692 /** @name Virtual Command Response Register (VCRSP_REG). 1532 1693 * @{ */ 1533 1694 /** IP: In Progress. */ … … 1545 1706 RT_BF_ASSERT_COMPILE_CHECKS(VTD_BF_VCRSP_REG_, UINT64_C(0), UINT64_MAX, 1546 1707 (IP, SC, RSVD_7_3, RSLT)); 1708 1709 /** RW: Read/write mask. */ 1710 #define VTD_VCRSP_REG_RW_MASK UINT64_C(0) 1547 1711 /** @} */ 1548 1712 -
trunk/src/VBox/Devices/Bus/DevIommuIntel.cpp
r88192 r88201 24 24 #include <VBox/iommu-intel.h> 25 25 26 #include <iprt/assertcompile.h> 26 27 #include <iprt/string.h> 27 28 … … 32 33 * Defined Constants And Macros * 33 34 *********************************************************************************************************************************/ 35 /** @def VTD_LO_U32 36 * Gets the low uint32_t of a uint64_t or something equivalent. 37 * 38 * This is suitable for casting constants outside code (since RT_LO_U32 can't be 39 * used as it asserts for correctness when compiling on certain compilers). */ 40 #define VTD_LO_U32(a) (uint32_t)(UINT32_MAX & (a)) 41 42 /** @def VTD_HI_U32 43 * Gets the high uint32_t of a uint64_t or something equivalent. 44 * 45 * This is suitable for casting constants outside code (since RT_HI_U32 can't be 46 * used as it asserts for correctness when compiling on certain compilers). */ 47 #define VTD_HI_U32(a) (uint32_t)((a) >> 32) 48 34 49 /** Release log prefix string. */ 35 50 #define IOMMU_LOG_PFX "Intel-IOMMU" 51 36 52 /** The current saved state version. */ 37 53 #define IOMMU_SAVED_STATE_VERSION 1 38 54 39 55 56 /********************************************************************************************************************************* 57 * Structures and Typedefs * 58 *********************************************************************************************************************************/ 40 59 /** 41 60 * The shared IOMMU device state. … … 111 130 typedef CTX_SUFF(PIOMMU) PIOMMUCC; 112 131 113 /** 114 * IOMMU register attributes. 115 */ 116 typedef struct IOMMUREGATTR 117 { 118 /** Name of the register. */ 119 const char *pszName; 120 /** RW: Read/write mask. */ 121 uint64_t fRwMask; 122 /** RO: Read-only mask. */ 123 uint64_t fRoMask; 124 /** WO: Write-only mask. */ 125 uint64_t fWoMask; 126 /** RW1C: Read-only Status, Write-1-to-clear mask. */ 127 uint64_t fRw1cMask; 128 } IOMMUREGATTR; 129 /** Pointer to an IOMMU register attributes struct. */ 130 typedef IOMMUREGATTR *PIOMMUREGATTR; 131 /** Pointer to a const IOMMU register attributes struct. */ 132 typedef IOMMUREGATTR const *PCIOMMUREGATTR; 132 133 /********************************************************************************************************************************* 134 * Global Variables * 135 *********************************************************************************************************************************/ 136 /** 137 * Read-write masks for IOMMU registers (group 0). 138 */ 139 static const uint32_t g_aRwMasks0[] = 140 { 141 /* Offset Register Low High */ 142 /* 0x000 VER_REG */ VTD_VER_REG_RW_MASK, 143 /* 0x004 Reserved */ 0, 144 /* 0x008 CAP_REG */ VTD_LO_U32(VTD_CAP_REG_RW_MASK), VTD_HI_U32(VTD_CAP_REG_RW_MASK), 145 /* 0x010 ECAP_REG */ VTD_LO_U32(VTD_ECAP_REG_RW_MASK), VTD_HI_U32(VTD_ECAP_REG_RW_MASK), 146 /* 0x018 GCMD_REG */ VTD_GCMD_REG_RW_MASK, 147 /* 0x01c GSTS_REG */ VTD_GSTS_REG_RW_MASK, 148 /* 0x020 RTADDR_REG */ VTD_LO_U32(VTD_RTADDR_REG_RW_MASK), VTD_HI_U32(VTD_RTADDR_REG_RW_MASK), 149 /* 0x028 CCMD_REG */ VTD_LO_U32(VTD_CCMD_REG_RW_MASK), VTD_HI_U32(VTD_CCMD_REG_RW_MASK), 150 /* 0x030 Reserved */ 0, 151 /* 0x034 FSTS_REG */ VTD_FSTS_REG_RW_MASK, 152 /* 0x038 FECTL_REG */ VTD_FECTL_REG_RW_MASK, 153 /* 0x03c FEDATA_REG */ VTD_FEDATA_REG_RW_MASK, 154 /* 0x040 FEADDR_REG */ VTD_FEADDR_REG_RW_MASK, 155 /* 0x044 FEUADDR_REG */ VTD_FEUADDR_REG_RW_MASK, 156 /* 0x048 Reserved */ 0, 0, 157 /* 0x050 Reserved */ 0, 0, 158 /* 0x058 AFLOG_REG */ VTD_LO_U32(VTD_AFLOG_REG_RW_MASK), VTD_HI_U32(VTD_AFLOG_REG_RW_MASK), 159 /* 0x060 Reserved */ 0, 160 /* 0x064 PMEN_REG */ 0, /* RO as we don't support PLMR and PHMR. */ 161 /* 0x068 PLMBASE_REG */ 0, /* RO as we don't support PLMR. */ 162 /* 0x06c PLMLIMIT_REG */ 0, /* RO as we don't support PLMR. */ 163 /* 0x070 PHMBASE_REG */ 0, 0, /* RO as we don't support PHMR. */ 164 /* 0x078 PHMLIMIT_REG */ 0, 0, /* RO as we don't support PHMR. */ 165 /* 0x080 IQH_REG */ VTD_LO_U32(VTD_IQH_REG_RW_MASK), VTD_HI_U32(VTD_IQH_REG_RW_MASK), 166 /* 0x088 IQT_REG */ VTD_LO_U32(VTD_IQT_REG_RW_MASK), VTD_HI_U32(VTD_IQT_REG_RW_MASK), 167 /* 0x090 IQA_REG */ VTD_LO_U32(VTD_IQA_REG_RW_MASK), VTD_HI_U32(VTD_IQA_REG_RW_MASK), 168 /* 0x098 Reserved */ 0, 169 /* 0x09c ICS_REG */ VTD_ICS_REG_RW_MASK, 170 /* 0x0a0 IECTL_REG */ VTD_IECTL_REG_RW_MASK, 171 /* 0x0a4 IEDATA_REG */ VTD_IEDATA_REG_RW_MASK, 172 /* 0x0a8 IEADDR_REG */ VTD_IEADDR_REG_RW_MASK, 173 /* 0x0ac IEUADDR_REG */ VTD_IEUADDR_REG_RW_MASK, 174 /* 0x0b0 IQERCD_REG */ VTD_LO_U32(VTD_IQERCD_REG_RW_MASK), VTD_HI_U32(VTD_IQERCD_REG_RW_MASK), 175 /* 0x0b8 IRTA_REG */ VTD_LO_U32(VTD_IRTA_REG_RW_MASK), VTD_HI_U32(VTD_IRTA_REG_RW_MASK), 176 /* 0x0c0 PQH_REG */ VTD_LO_U32(VTD_PQH_REG_RW_MASK), VTD_HI_U32(VTD_PQH_REG_RW_MASK), 177 /* 0x0c8 PQT_REG */ VTD_LO_U32(VTD_PQT_REG_RW_MASK), VTD_HI_U32(VTD_PQT_REG_RW_MASK), 178 /* 0x0d0 PQA_REG */ VTD_LO_U32(VTD_PQA_REG_RW_MASK), VTD_HI_U32(VTD_PQA_REG_RW_MASK), 179 /* 0x0d8 Reserved */ 0, 180 /* 0x0dc PRS_REG */ VTD_PRS_REG_RW_MASK, 181 /* 0x0e0 PECTL_REG */ VTD_PECTL_REG_RW_MASK, 182 /* 0x0e4 PEDATA_REG */ VTD_PEDATA_REG_RW_MASK, 183 /* 0x0e8 PEADDR_REG */ VTD_PEADDR_REG_RW_MASK, 184 /* 0x0ec PEUADDR_REG */ VTD_PEUADDR_REG_RW_MASK, 185 /* 0x0f0 Reserved */ 0, 0, 186 /* 0x0f8 Reserved */ 0, 0, 187 /* 0x100 MTRRCAP_REG */ VTD_LO_U32(VTD_MTRRCAP_REG_RW_MASK), VTD_HI_U32(VTD_MTRRCAP_REG_RW_MASK), 188 /* 0x108 MTRRDEF_REG */ 0, 0, /* RO as we don't support MTS. */ 189 /* 0x110 Reserved */ 0, 0, 190 /* 0x118 Reserved */ 0, 0, 191 /* 0x120 MTRR_FIX64_00000_REG */ 0, 0, /* RO as we don't support MTS. */ 192 /* 0x128 MTRR_FIX16K_80000_REG */ 0, 0, 193 /* 0x130 MTRR_FIX16K_A0000_REG */ 0, 0, 194 /* 0x138 MTRR_FIX4K_C0000_REG */ 0, 0, 195 /* 0x140 MTRR_FIX4K_C8000_REG */ 0, 0, 196 /* 0x148 MTRR_FIX4K_D0000_REG */ 0, 0, 197 /* 0x150 MTRR_FIX4K_D8000_REG */ 0, 0, 198 /* 0x158 MTRR_FIX4K_E0000_REG */ 0, 0, 199 /* 0x160 MTRR_FIX4K_E8000_REG */ 0, 0, 200 /* 0x168 MTRR_FIX4K_F0000_REG */ 0, 0, 201 /* 0x170 MTRR_FIX4K_F8000_REG */ 0, 0, 202 /* 0x178 Reserved */ 0, 0, 203 /* 0x180 MTRR_PHYSBASE0_REG */ 0, 0, /* RO as we don't support MTS. */ 204 /* 0x188 MTRR_PHYSMASK0_REG */ 0, 0, 205 /* 0x190 MTRR_PHYSBASE1_REG */ 0, 0, 206 /* 0x198 MTRR_PHYSMASK1_REG */ 0, 0, 207 /* 0x1a0 MTRR_PHYSBASE2_REG */ 0, 0, 208 /* 0x1a8 MTRR_PHYSMASK2_REG */ 0, 0, 209 /* 0x1b0 MTRR_PHYSBASE3_REG */ 0, 0, 210 /* 0x1b8 MTRR_PHYSMASK3_REG */ 0, 0, 211 /* 0x1c0 MTRR_PHYSBASE4_REG */ 0, 0, 212 /* 0x1c8 MTRR_PHYSMASK4_REG */ 0, 0, 213 /* 0x1d0 MTRR_PHYSBASE5_REG */ 0, 0, 214 /* 0x1d8 MTRR_PHYSMASK5_REG */ 0, 0, 215 /* 0x1e0 MTRR_PHYSBASE6_REG */ 0, 0, 216 /* 0x1e8 MTRR_PHYSMASK6_REG */ 0, 0, 217 /* 0x1f0 MTRR_PHYSBASE7_REG */ 0, 0, 218 /* 0x1f8 MTRR_PHYSMASK7_REG */ 0, 0, 219 /* 0x200 MTRR_PHYSBASE8_REG */ 0, 0, 220 /* 0x208 MTRR_PHYSMASK8_REG */ 0, 0, 221 /* 0x210 MTRR_PHYSBASE9_REG */ 0, 0, 222 /* 0x218 MTRR_PHYSMASK9_REG */ 0, 0, 223 }; 224 AssertCompile(sizeof(g_aRwMasks0) == VTD_MMIO_GROUP_0_SIZE); 225 226 /** 227 * Read-write masks for IOMMU registers (group 1). 228 */ 229 static const uint32_t g_aRwMasks1[] = 230 { 231 /* Offset Register Low High */ 232 /* 0xe00 VCCAP_REG */ VTD_LO_U32(VTD_VCCAP_REG_RW_MASK), VTD_HI_U32(VTD_VCCAP_REG_RW_MASK), 233 /* 0xe08 Reserved */ 0, 0, 234 /* 0xe10 VCMD_REG */ 0, 0, /* RO as we don't support VCS. */ 235 /* 0xe18 Reserved */ 0, 0, 236 /* 0xe20 VCRSP_REG */ 0, 0, /* RO as we don't support VCS. */ 237 }; 238 AssertCompile(sizeof(g_aRwMasks1) == VTD_MMIO_GROUP_1_SIZE); 133 239 134 240 … … 276 382 AssertRCReturn(rc, rc); 277 383 278 /*279 * Initialize read-only PCI configuration space.280 */281 PPDMPCIDEV pPciDev = pDevIns->apPciDevs[0];282 PDMPCIDEV_ASSERT_VALID(pDevIns, pPciDev);283 284 /** @todo Figure out the PCI vendor/product and other stuff. Can't seem to find285 * this yet. Maybe dump info from real hw. */286 384 287 385 return VERR_NOT_IMPLEMENTED;
Note:
See TracChangeset
for help on using the changeset viewer.