- Timestamp:
- Aug 30, 2021 12:57:49 PM (3 years ago)
- Location:
- trunk/src/VBox/Devices/Security
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Security/DevTpm.cpp
r90904 r90996 205 205 /** TPM start of HASH operation signal register for locality 4. */ 206 206 #define TPM_FIFO_LOCALITY_REG_HASH_START 0x28 207 208 /** Locality interface ID register. */ 209 #define TPM_FIFO_LOCALITY_REG_INTF_ID 0x30 210 /** Interface type field. */ 211 # define TPM_FIFO_LOCALITY_REG_INTF_ID_IF_TYPE_MASK UINT32_C(0xf) 212 # define TPM_FIFO_LOCALITY_REG_INTF_ID_IF_TYPE_SHIFT 0 213 # define TPM_FIFO_LOCALITY_REG_INTF_ID_IF_TYPE_SET(a) ((a) << TPM_FIFO_LOCALITY_REG_INTF_ID_IF_TYPE_SHIFT) 214 /** FIFO interface as defined in PTP for TPM 2.0 is active. */ 215 # define TPM_FIFO_LOCALITY_REG_INTF_ID_IF_TYPE_FIFO_TPM20 0x0 216 /** CRB interface is active. */ 217 # define TPM_FIFO_LOCALITY_REG_INTF_ID_IF_TYPE_CRB 0x1 218 /** FIFO interface as defined in TIS 1.3 is active. */ 219 # define TPM_FIFO_LOCALITY_REG_INTF_ID_IF_TYPE_TIS1_3 0xf 220 /** Interface type field. */ 221 # define TPM_FIFO_LOCALITY_REG_INTF_ID_IF_VERS_MASK UINT32_C(0xf) 222 # define TPM_FIFO_LOCALITY_REG_INTF_ID_IF_VERS_SHIFT 4 223 # define TPM_FIFO_LOCALITY_REG_INTF_ID_IF_VERS_SET(a) ((a) << TPM_FIFO_LOCALITY_REG_INTF_ID_IF_VERS_SHIFT) 224 /** FIFO interface for TPM 2.0 */ 225 # define TPM_FIFO_LOCALITY_REG_INTF_ID_IF_VERS_FIFO 0 226 /** CRB interface version 0. */ 227 # define TPM_FIFO_LOCALITY_REG_INTF_ID_IF_VERS_CRB 1 228 /** Only locality 0 is supported when clear, set if 5 localities are supported. */ 229 # define TPM_FIFO_LOCALITY_REG_INTF_ID_CAP_LOCALITY RT_BIT(8) 230 /** Maximum transfer size support. */ 231 # define TPM_FIFO_LOCALITY_REG_INTF_ID_CAP_DATA_XFER_SZ_MASK 0x1800 232 # define TPM_FIFO_LOCALITY_REG_INTF_ID_CAP_DATA_XFER_SZ_SHIFT 11 233 # define TPM_FIFO_LOCALITY_REG_INTF_ID_CAP_DATA_XFER_SZ_SET(a) ((a) << TPM_FIFO_LOCALITY_REG_INTF_ID_CAP_DATA_XFER_SZ_SHIFT) 234 /** Only legacy transfers supported. */ 235 # define TPM_FIFO_LOCALITY_REG_INTF_ID_CAP_DATA_XFER_SZ_LEGACY 0x0 236 /** 8B maximum transfer size. */ 237 # define TPM_FIFO_LOCALITY_REG_INTF_ID_CAP_DATA_XFER_SZ_8B 0x1 238 /** 32B maximum transfer size. */ 239 # define TPM_FIFO_LOCALITY_REG_INTF_ID_CAP_DATA_XFER_SZ_32B 0x2 240 /** 64B maximum transfer size. */ 241 # define TPM_FIFO_LOCALITY_REG_INTF_ID_CAP_DATA_XFER_SZ_64B 0x3 242 /** FIFO interface is supported and may be selected. */ 243 # define TPM_FIFO_LOCALITY_REG_INTF_ID_CAP_FIFO RT_BIT(13) 244 /** CRB interface is supported and may be selected. */ 245 # define TPM_FIFO_LOCALITY_REG_INTF_ID_CAP_CRB RT_BIT(14) 246 /** Interrupt polarity configuration. */ 247 # define TPM_FIFO_LOCALITY_REG_INTF_ID_IF_SEL_MASK 0x60000 248 # define TPM_FIFO_LOCALITY_REG_INTF_ID_IF_SEL_SHIFT 17 249 # define TPM_FIFO_LOCALITY_REG_INTF_ID_IF_SEL_SET(a) ((a) << TPM_FIFO_LOCALITY_REG_INTF_ID_IF_SEL_SHIFT) 250 # define TPM_FIFO_LOCALITY_REG_INTF_ID_IF_SEL_GET(a) (((a) & TPM_FIFO_LOCALITY_REG_INTF_ID_IF_SEL_MASK) >> TPM_FIFO_LOCALITY_REG_INTF_ID_IF_SEL_SHIFT) 251 /** Selects the FIFO interface, takes effect on next _TPM_INIT. */ 252 # define TPM_FIFO_LOCALITY_REG_INTF_ID_IF_SEL_FIFO 0 253 /** Selects the CRB interface, takes effect on next _TPM_INIT. */ 254 # define TPM_FIFO_LOCALITY_REG_INTF_ID_IF_SEL_CRB 1 255 /** Locks the interface selector field and prevents further changes. */ 256 # define TPM_FIFO_LOCALITY_REG_INTF_ID_IF_SEL_LOCK RT_BIT(19) 257 258 207 259 /** Extended data FIFO read/write register. */ 208 260 #define TPM_FIFO_LOCALITY_REG_XDATA_FIFO 0x80 … … 274 326 # define TPM_CRB_LOCALITY_REG_INTF_ID_CAP_DATA_XFER_SZ_MASK 0x1800 275 327 # define TPM_CRB_LOCALITY_REG_INTF_ID_CAP_DATA_XFER_SZ_SHIFT 11 276 # define TPM_CRB_LOCALITY_REG_INTF_ID_CAP_DATA_XFER_SZ_SET(a) ((a) << TPM_ FIFO_LOCALITY_REG_IF_CAP_DATA_XFER_SZ_SHIFT)328 # define TPM_CRB_LOCALITY_REG_INTF_ID_CAP_DATA_XFER_SZ_SET(a) ((a) << TPM_CRB_LOCALITY_REG_INTF_ID_CAP_DATA_XFER_SZ_SHIFT) 277 329 /** Only legacy transfers supported. */ 278 330 # define TPM_CRB_LOCALITY_REG_INTF_ID_CAP_DATA_XFER_SZ_LEGACY 0x0 … … 439 491 /** Flag whether CRB access mode is used. */ 440 492 bool fCrb; 493 /** Flag whether the TPM driver below supportes other localities than 0. */ 494 bool fLocChangeSup; 441 495 442 496 /** Currently selected locality. */ … … 699 753 } 700 754 break; 755 case TPM_FIFO_LOCALITY_REG_INTF_ID: 756 u64 = TPM_FIFO_LOCALITY_REG_INTF_ID_IF_VERS_SET(TPM_FIFO_LOCALITY_REG_INTF_ID_IF_VERS_FIFO) 757 | TPM_FIFO_LOCALITY_REG_INTF_ID_CAP_DATA_XFER_SZ_SET(TPM_FIFO_LOCALITY_REG_INTF_ID_CAP_DATA_XFER_SZ_64B) 758 | TPM_FIFO_LOCALITY_REG_INTF_ID_IF_SEL_GET(TPM_FIFO_LOCALITY_REG_INTF_ID_IF_SEL_FIFO) 759 | TPM_FIFO_LOCALITY_REG_INTF_ID_IF_SEL_LOCK; 760 if (pThis->enmTpmVers == TPMVERSION_1_2) 761 u64 |= TPM_FIFO_LOCALITY_REG_INTF_ID_IF_TYPE_SET(TPM_FIFO_LOCALITY_REG_INTF_ID_IF_TYPE_TIS1_3); 762 else 763 u64 |= TPM_FIFO_LOCALITY_REG_INTF_ID_IF_TYPE_SET(TPM_FIFO_LOCALITY_REG_INTF_ID_IF_TYPE_FIFO_TPM20); 764 765 if (pThis->fLocChangeSup) /* Only advertise the locality capability if the driver below supports it. */ 766 u64 |= TPM_FIFO_LOCALITY_REG_INTF_ID_CAP_LOCALITY; 767 break; 701 768 case TPM_FIFO_LOCALITY_REG_DID_VID: 702 769 u64 = RT_H2BE_U32(RT_MAKE_U32(pThis->uVenId, pThis->uDevId)); … … 897 964 u64 = TPM_CRB_LOCALITY_REG_INTF_ID_IF_TYPE_SET(TPM_CRB_LOCALITY_REG_INTF_ID_IF_TYPE_CRB) 898 965 | TPM_CRB_LOCALITY_REG_INTF_ID_IF_VERS_SET(TPM_CRB_LOCALITY_REG_INTF_ID_IF_VERS_CRB) 899 | TPM_CRB_LOCALITY_REG_INTF_ID_CAP_LOCALITY900 966 | TPM_CRB_LOCALITY_REG_INTF_ID_CAP_DATA_XFER_SZ_SET(TPM_CRB_LOCALITY_REG_INTF_ID_CAP_DATA_XFER_SZ_64B) 901 967 | TPM_CRB_LOCALITY_REG_INTF_ID_CAP_CRB … … 905 971 | TPM_CRB_LOCALITY_REG_INTF_ID_VID_SET(pThis->uVenId) 906 972 | TPM_CRB_LOCALITY_REG_INTF_ID_DID_SET(pThis->uDevId); 973 974 if (pThis->fLocChangeSup) /* Only advertise the locality capability if the driver below supports it. */ 975 u64 |= TPM_CRB_LOCALITY_REG_INTF_ID_CAP_LOCALITY; 976 907 977 break; 908 978 case TPM_CRB_LOCALITY_REG_CTRL_REQ: … … 1448 1518 if (pThis->enmTpmVers == TPMVERSION_UNKNOWN) 1449 1519 return PDMDEV_SET_ERROR(pDevIns, VERR_NOT_SUPPORTED, N_("The emulated TPM version is not supported")); 1520 1521 pThis->fLocChangeSup = pThisCC->pDrvTpm->pfnGetLocalityMax(pThisCC->pDrvTpm) > 0; 1450 1522 } 1451 1523 else if (rc == VERR_PDM_NO_ATTACHED_DRIVER) 1452 1524 { 1525 pThis->fLocChangeSup = false; 1526 1453 1527 pThisCC->pDrvBase = NULL; 1454 1528 pThisCC->pDrvTpm = NULL; -
trunk/src/VBox/Devices/Security/DrvTpmEmu.cpp
r90904 r90996 602 602 603 603 604 /** @interface_method_impl{PDMITPMCONNECTOR,pfnGetLocalityMax} */ 605 static DECLCALLBACK(uint32_t) drvTpmEmuGetLocalityMax(PPDMITPMCONNECTOR pInterface) 606 { 607 RT_NOREF(pInterface); 608 return 4; 609 } 610 611 604 612 /** @interface_method_impl{PDMITPMCONNECTOR,pfnGetEstablishedFlag} */ 605 613 static DECLCALLBACK(bool) drvTpmEmuGetEstablishedFlag(PPDMITPMCONNECTOR pInterface) … … 795 803 pThis->ITpmConnector.pfnReset = drvTpmEmuReset; 796 804 pThis->ITpmConnector.pfnGetVersion = drvTpmEmuGetVersion; 805 pThis->ITpmConnector.pfnGetLocalityMax = drvTpmEmuGetLocalityMax; 797 806 pThis->ITpmConnector.pfnGetEstablishedFlag = drvTpmEmuGetEstablishedFlag; 798 807 pThis->ITpmConnector.pfnResetEstablishedFlag = drvTpmEmuResetEstablishedFlag; -
trunk/src/VBox/Devices/Security/DrvTpmHost.cpp
r90946 r90996 109 109 } 110 110 111 AssertFailed(); /* Shouldn b't get here. */111 AssertFailed(); /* Shouldn't get here. */ 112 112 return TPMVERSION_UNKNOWN; 113 } 114 115 116 /** @interface_method_impl{PDMITPMCONNECTOR,pfnGetLocalityMax} */ 117 static DECLCALLBACK(uint32_t) drvTpmHostGetLocalityMax(PPDMITPMCONNECTOR pInterface) 118 { 119 PDRVTPMHOST pThis = RT_FROM_MEMBER(pInterface, DRVTPMHOST, ITpmConnector); 120 return RTTpmGetLocalityMax(pThis->hTpm); 113 121 } 114 122 … … 200 208 pThis->ITpmConnector.pfnReset = drvTpmHostReset; 201 209 pThis->ITpmConnector.pfnGetVersion = drvTpmHostGetVersion; 210 pThis->ITpmConnector.pfnGetLocalityMax = drvTpmHostGetLocalityMax; 202 211 pThis->ITpmConnector.pfnGetEstablishedFlag = drvTpmHostGetEstablishedFlag; 203 212 pThis->ITpmConnector.pfnResetEstablishedFlag = drvTpmHostResetEstablishedFlag;
Note:
See TracChangeset
for help on using the changeset viewer.