| #ifndef TPM_DRIVERS_H |
| #define TPM_DRIVERS_H |
| |
| #include "types.h" // u32 |
| |
| |
| enum tpmDurationType { |
| TPM_DURATION_TYPE_SHORT = 0, |
| TPM_DURATION_TYPE_MEDIUM, |
| TPM_DURATION_TYPE_LONG, |
| }; |
| |
| typedef u8 TPMVersion; |
| |
| #define TPM_VERSION_NONE 0 |
| #define TPM_VERSION_1_2 1 |
| #define TPM_VERSION_2 2 |
| |
| TPMVersion tpmhw_probe(void); |
| int tpmhw_is_present(void); |
| struct tpm_req_header; |
| int tpmhw_transmit(u8 locty, struct tpm_req_header *req, |
| void *respbuffer, u32 *respbufferlen, |
| enum tpmDurationType to_t); |
| void tpmhw_set_timeouts(u32 timeouts[4], u32 durations[3]); |
| |
| /* CRB driver */ |
| /* address of locality 0 (CRB) */ |
| #define TPM_CRB_BASE_ADDRESS 0xfed40000 |
| |
| #define CRB_REG(LOCTY, REG) \ |
| (void *)(TPM_CRB_BASE_ADDRESS + (LOCTY << 12) + REG) |
| |
| /* hardware registers */ |
| #define CRB_REG_LOC_STATE 0x0 |
| #define CRB_REG_LOC_CTRL 0x8 |
| #define CRB_REG_LOC_STS 0xC |
| #define CRB_REG_INTF_ID 0x30 |
| #define CRB_REG_CTRL_EXT 0x38 |
| #define CRB_REG_CTRL_REQ 0x40 |
| #define CRB_REG_CTRL_STS 0x44 |
| #define CRB_REG_CTRL_CANCEL 0x48 |
| #define CRB_REG_CTRL_START 0x4C |
| #define CRB_REG_INT_ENABLE 0x50 |
| #define CRB_REG_INT_STS 0x54 |
| #define CRB_REG_CTRL_CMD_SIZE 0x58 |
| #define CRB_REG_CTRL_CMD_LADDR 0x5C |
| #define CRB_REG_CTRL_CMD_HADDR 0x60 |
| #define CRB_REG_CTRL_RSP_SIZE 0x64 |
| #define CRB_REG_CTRL_RSP_ADDR 0x68 |
| #define CRB_REG_DATA_BUFFER 0x80 |
| |
| /* TIS driver */ |
| /* address of locality 0 (TIS) */ |
| #define TPM_TIS_BASE_ADDRESS 0xfed40000 |
| |
| #define TIS_REG(LOCTY, REG) \ |
| (void *)(TPM_TIS_BASE_ADDRESS + (LOCTY << 12) + REG) |
| |
| /* hardware registers */ |
| #define TIS_REG_ACCESS 0x0 |
| #define TIS_REG_INT_ENABLE 0x8 |
| #define TIS_REG_INT_VECTOR 0xc |
| #define TIS_REG_INT_STATUS 0x10 |
| #define TIS_REG_INTF_CAPABILITY 0x14 |
| #define TIS_REG_STS 0x18 |
| #define TIS_REG_DATA_FIFO 0x24 |
| #define TIS_REG_IFACE_ID 0x30 |
| #define TIS_REG_DID_VID 0xf00 |
| #define TIS_REG_RID 0xf04 |
| |
| #define TIS_STS_VALID (1 << 7) /* 0x80 */ |
| #define TIS_STS_COMMAND_READY (1 << 6) /* 0x40 */ |
| #define TIS_STS_TPM_GO (1 << 5) /* 0x20 */ |
| #define TIS_STS_DATA_AVAILABLE (1 << 4) /* 0x10 */ |
| #define TIS_STS_EXPECT (1 << 3) /* 0x08 */ |
| #define TIS_STS_RESPONSE_RETRY (1 << 1) /* 0x02 */ |
| |
| #define TIS_ACCESS_TPM_REG_VALID_STS (1 << 7) /* 0x80 */ |
| #define TIS_ACCESS_ACTIVE_LOCALITY (1 << 5) /* 0x20 */ |
| #define TIS_ACCESS_BEEN_SEIZED (1 << 4) /* 0x10 */ |
| #define TIS_ACCESS_SEIZE (1 << 3) /* 0x08 */ |
| #define TIS_ACCESS_PENDING_REQUEST (1 << 2) /* 0x04 */ |
| #define TIS_ACCESS_REQUEST_USE (1 << 1) /* 0x02 */ |
| #define TIS_ACCESS_TPM_ESTABLISHMENT (1 << 0) /* 0x01 */ |
| |
| /* |
| * Default TIS timeouts used before getting them from the TPM itself |
| */ |
| #define TIS_DEFAULT_TIMEOUT_A 750000 /* us */ |
| #define TIS_DEFAULT_TIMEOUT_B 2000000 /* us */ |
| #define TIS_DEFAULT_TIMEOUT_C 750000 /* us */ |
| #define TIS_DEFAULT_TIMEOUT_D 750000 /* us */ |
| |
| /* |
| * Default TIS 2 timeouts given in TPM Profile (TPT) Spec |
| */ |
| #define TIS2_DEFAULT_TIMEOUT_A 750000 /* us */ |
| #define TIS2_DEFAULT_TIMEOUT_B 2000000 /* us */ |
| #define TIS2_DEFAULT_TIMEOUT_C 200000 /* us */ |
| #define TIS2_DEFAULT_TIMEOUT_D 30000 /* us */ |
| |
| enum tisTimeoutType { |
| TIS_TIMEOUT_TYPE_A = 0, |
| TIS_TIMEOUT_TYPE_B, |
| TIS_TIMEOUT_TYPE_C, |
| TIS_TIMEOUT_TYPE_D, |
| }; |
| |
| /* |
| * Default command durations used before getting them from the |
| * TPM itself |
| */ |
| #define TPM_DEFAULT_DURATION_SHORT 2000000 /* us */ |
| #define TPM_DEFAULT_DURATION_MEDIUM 20000000 /* us */ |
| #define TPM_DEFAULT_DURATION_LONG 60000000 /* us */ |
| |
| /* |
| * TPM 2 command durations; we set them to the timeout values |
| * given in TPM Profile (PTP) Specification; exceeding those |
| * timeout values indicates a faulty TPM. |
| */ |
| #define TPM2_DEFAULT_DURATION_SHORT 750000 /* us */ |
| #define TPM2_DEFAULT_DURATION_MEDIUM 2000000 /* us */ |
| #define TPM2_DEFAULT_DURATION_LONG 2000000 /* us */ |
| |
| #endif /* TPM_DRIVERS_H */ |