#![allow(non_camel_case_types, non_upper_case_globals, dead_code)]
macro_rules! BIT {
($nr:expr) => {
1usize << $nr
};
}
#[repr(u32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum vendor_cmd_cc {
EXTENSION_AES = 0,
EXTENSION_HASH = 1,
EXTENSION_RSA = 2,
EXTENSION_ECC = 3,
EXTENSION_FW_UPGRADE = 4,
EXTENSION_HKDF = 5,
EXTENSION_ECIES = 6,
EXTENSION_POST_RESET = 7,
LAST_EXTENSION_COMMAND = 15,
VENDOR_CC_GET_LOCK = 16,
VENDOR_CC_SET_LOCK = 17,
VENDOR_CC_SYSINFO = 18,
VENDOR_CC_IMMEDIATE_RESET = 19,
VENDOR_CC_INVALIDATE_INACTIVE_RW = 20,
VENDOR_CC_COMMIT_NVMEM = 21,
VENDOR_CC_REPORT_TPM_STATE = 23,
VENDOR_CC_TURN_UPDATE_ON = 24,
VENDOR_CC_GET_BOARD_ID = 25,
VENDOR_CC_SET_BOARD_ID = 26,
VENDOR_CC_U2F_APDU = 27,
VENDOR_CC_POP_LOG_ENTRY = 28,
VENDOR_CC_GET_REC_BTN = 29,
VENDOR_CC_RMA_CHALLENGE_RESPONSE = 30,
VENDOR_CC_DISABLE_FACTORY = 32,
VENDOR_CC_CCD = 34,
VENDOR_CC_GET_ALERTS_DATA = 35,
VENDOR_CC_SPI_HASH = 36,
VENDOR_CC_PINWEAVER = 37,
VENDOR_CC_RESET_FACTORY = 38,
VENDOR_CC_WP = 39,
VENDOR_CC_TPM_MODE = 40,
VENDOR_CC_SN_SET_HASH = 41,
VENDOR_CC_SN_INC_RMA = 42,
VENDOR_CC_GET_PWR_BTN = 43,
VENDOR_CC_U2F_GENERATE = 44,
VENDOR_CC_U2F_SIGN = 45,
VENDOR_CC_U2F_ATTEST = 46,
VENDOR_CC_FLOG_TIMESTAMP = 47,
VENDOR_CC_ENDORSEMENT_SEED = 48,
VENDOR_CC_U2F_MODE = 49,
VENDOR_CC_DRBG_TEST = 50,
VENDOR_CC_TRNG_TEST = 51,
VENDOR_CC_GET_BOOT_MODE = 52,
VENDOR_CC_RESET_EC = 53,
VENDOR_CC_SEED_AP_RO_CHECK = 54,
VENDOR_CC_FIPS_CMD = 55,
VENDOR_CC_GET_AP_RO_HASH = 56,
VENDOR_CC_GET_AP_RO_STATUS = 57,
VENDOR_CC_AP_RO_VALIDATE = 58,
VENDOR_CC_DS_DIS_TEMP = 59,
VENDOR_CC_USER_PRES = 60,
VENDOR_CC_POP_LOG_ENTRY_MS = 61,
VENDOR_CC_GET_AP_RO_VERIFY_SETTING = 62,
VENDOR_CC_SET_AP_RO_VERIFY_SETTING = 63,
VENDOR_CC_SET_CAPABILITY = 64,
VENDOR_CC_GET_TI50_STATS = 65,
VENDOR_CC_GET_CRASHLOG = 66,
VENDOR_CC_GET_CONSOLE_LOGS = 67,
VENDOR_CC_GET_FACTORY_CONFIG = 68,
VENDOR_CC_SET_FACTORY_CONFIG = 69,
VENDOR_CC_GET_TIME = 70,
VENDOR_CC_GET_BOOT_TRACE = 71,
VENDOR_CC_GET_CHASSIS_OPEN = 72,
VENDOR_CC_GET_CR50_METRICS = 73,
VENDOR_CC_GET_CHIP_ID = 75,
VENDOR_CC_TRUSTY_STORAGE_MAC = 77,
LAST_VENDOR_COMMAND = 65535,
}
pub const CONFIG_EXTENSION_COMMAND: u32 = 0xbaccd00a;
pub const TPM_CC_VENDOR_BIT_MASK: u32 = 0x20000000;
pub type vendor_cmd_rc = u32;
pub const EXC_HASH_DUPLICATED_HANDLE: vendor_cmd_rc = 1;
pub const EXC_HASH_TOO_MANY_HANDLES: vendor_cmd_rc = 2;
pub const EXC_HASH_UNKNOWN_CONTEXT: vendor_cmd_rc = 3;
pub const VENDOR_RC_SUCCESS: vendor_cmd_rc = 0;
pub const VENDOR_RC_BOGUS_ARGS: vendor_cmd_rc = 1;
pub const VENDOR_RC_READ_FLASH_FAIL: vendor_cmd_rc = 2;
pub const VENDOR_RC_WRITE_FLASH_FAIL: vendor_cmd_rc = 3;
pub const VENDOR_RC_REQUEST_TOO_BIG: vendor_cmd_rc = 4;
pub const VENDOR_RC_RESPONSE_TOO_BIG: vendor_cmd_rc = 5;
pub const VENDOR_RC_INTERNAL_ERROR: vendor_cmd_rc = 6;
pub const VENDOR_RC_NOT_ALLOWED: vendor_cmd_rc = 7;
pub const VENDOR_RC_NO_SUCH_SUBCOMMAND: vendor_cmd_rc = 8;
pub const VENDOR_RC_IN_PROGRESS: vendor_cmd_rc = 9;
pub const VENDOR_RC_PASSWORD_REQUIRED: vendor_cmd_rc = 10;
pub const VENDOR_RC_NVMEM_LOCKED: vendor_cmd_rc = 11;
pub const VENDOR_RC_NO_SUCH_COMMAND: vendor_cmd_rc = 127;
pub const VENDOR_RC_ERR: vendor_cmd_rc = 0x500;
#[repr(u32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum tpm_modes {
TPM_MODE_ENABLED_TENTATIVE = 0,
TPM_MODE_ENABLED = 1,
TPM_MODE_DISABLED = 2,
TPM_MODE_MAX = 3,
}
#[repr(u32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum return_value {
UPGRADE_SUCCESS = 0,
UPGRADE_BAD_ADDR = 1,
UPGRADE_ERASE_FAILURE = 2,
UPGRADE_DATA_ERROR = 3,
UPGRADE_WRITE_FAILURE = 4,
UPGRADE_VERIFY_ERROR = 5,
UPGRADE_GEN_ERROR = 6,
UPGRADE_MALLOC_ERROR = 7,
UPGRADE_ROLLBACK_ERROR = 8,
UPGRADE_RATE_LIMIT_ERROR = 9,
UPGRADE_UNALIGNED_BLOCK_ERROR = 10,
UPGRADE_TRUNCATED_HEADER_ERROR = 11,
UPGRADE_BOARD_ID_ERROR = 12,
UPGRADE_BOARD_FLAGS_ERROR = 13,
UPGRADE_DEV_ID_MISMATCH_ERROR = 14,
}
#[repr(C, packed)]
#[derive(Debug, Clone, Copy)]
pub struct get_chip_id_response {
pub tpm_did_vid: u32,
pub chip_id: u32,
}
#[repr(u32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum gsc_device {
GSC_DEVICE_H1 = 0,
GSC_DEVICE_CT = 1,
GSC_DEVICE_DT = 2,
GSC_DEVICE_NT = 3,
}
#[repr(C, packed)]
#[derive(Debug, Clone, Copy)]
pub struct ti50_stats_v0 {
pub fs_init_time: u32,
pub fs_usage: u32,
pub aprov_time: u32,
pub expanded_aprov_status: u32,
}
#[repr(C, packed)]
#[derive(Debug, Clone, Copy)]
pub struct ti50_stats_v1 {
pub stats: ti50_stats_v0,
pub misc_status: u32,
}
#[repr(C, packed)]
#[derive(Debug, Clone, Copy)]
pub struct ti50_stats {
pub v1: ti50_stats_v1,
pub version: u32,
pub filesystem_busy_count: u32,
pub crypto_busy_count: u32,
pub dispatcher_busy_count: u32,
pub timeslices_expired: u32,
pub crypto_init_time: u32,
}
pub const METRICSV_BITS_USED_SHIFT: u32 = 27;
pub const METRICSV_RDD_KEEP_ALIVE_MASK: u32 = 3;
pub const METRICSV_RDD_KEEP_ALIVE_AT_BOOT_SHIFT: u32 = 2;
pub const METRICSV_RDD_KEEP_ALIVE_AT_BOOT_MASK: u32 = 1 << METRICSV_RDD_KEEP_ALIVE_AT_BOOT_SHIFT;
pub const METRICSV_CCD_MODE_SHIFT: u32 = 3;
pub const METRICSV_CCD_MODE_MASK: u32 = 1 << METRICSV_CCD_MODE_SHIFT;
pub const METRICSV_WP_ASSERTED_SHIFT: u32 = 4;
pub const METRICSV_WP_ASSERTED_MASK: u32 = 1 << METRICSV_WP_ASSERTED_SHIFT;
pub const METRICSV_ALLOW_UNVERIFIED_RO_SHIFT: u32 = 5;
pub const METRICSV_ALLOW_UNVERIFIED_RO_MASK: u32 = 1 << METRICSV_ALLOW_UNVERIFIED_RO_SHIFT;
pub const METRICSV_IS_PROD_SHIFT: u32 = 6;
pub const METRICSV_IS_PROD_MASK: u32 = 1 << METRICSV_IS_PROD_SHIFT;
pub const METRICSV_RDD_IS_DETECTED_SHIFT: u32 = 7;
pub const METRICSV_RDD_IS_DETECTED_MASK: u32 = 1 << METRICSV_RDD_IS_DETECTED_SHIFT;
#[repr(u32)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum wp_options {
WP_NONE = 0,
WP_CHECK = 1,
WP_ENABLE = 2,
WP_DISABLE = 3,
WP_FOLLOW = 4,
}
pub const WPV_UPDATE: usize = BIT!(0);
pub const WPV_ENABLE: usize = BIT!(1);
pub const WPV_FORCE: usize = BIT!(2);
pub const WPV_ATBOOT_SET: usize = BIT!(3);
pub const WPV_ATBOOT_ENABLE: usize = BIT!(4);
pub const WPV_FWMP_FORCE_WP_EN: usize = BIT!(5);
#[repr(C, packed)]
#[derive(Debug, Clone, Copy)]
pub struct signed_header_version {
pub minor: u32,
pub major: u32,
pub epoch: u32,
}
#[repr(C, packed)]
#[derive(Debug, Clone, Copy)]
pub struct first_response_pdu {
pub return_value: u32,
pub protocol_version: u32,
pub backup_ro_offset: u32,
pub backup_rw_offset: u32,
pub shv: [signed_header_version; 2],
pub keyid: [u32; 2],
}
#[repr(C, packed)]
#[derive(Debug, Clone, Copy)]
pub struct sys_info_repsonse {
pub ro_keyid: u32,
pub rw_keyid: u32,
pub dev_id0: u32,
pub dev_id1: u32,
}
#[repr(C, packed)]
#[derive(Debug, Clone, Copy)]
pub struct cr50_stats_response {
pub version: u32,
pub reset_src: u32,
pub brdprop: u32,
pub misc_status: u32,
pub reset_time_s: u32,
pub cold_reset_time_s: u32,
}
#[repr(C, packed)]
#[derive(Debug, Clone, Copy)]
pub struct board_id {
pub board_type: u32,
pub type_inv: u32,
pub flags: u32,
}
const F_TAG: usize = size_of::<u16>(); const F_SUBCMD: usize = size_of::<u16>();
const F_LEN: usize = size_of::<u32>(); const F_CODE: usize = size_of::<u32>(); const F_DIGEST: usize = size_of::<u32>(); const F_ADDR: usize = size_of::<u32>();
pub const TPM_ORDINAL_OFFSET: usize = F_TAG + F_LEN;
pub const TPM_SUBCMD_OFFSET: usize = TPM_ORDINAL_OFFSET + F_CODE;
pub const TPM_PKT_CMD_HEADER_SIZE: usize = TPM_SUBCMD_OFFSET + F_SUBCMD;
pub const TPM_PKT_UPG_HEADER_SIZE: usize = TPM_PKT_CMD_HEADER_SIZE + F_DIGEST + F_ADDR;
pub const MAX_RX_BUF_SIZE: usize = 2048;
pub const SIGNED_TRANSFER_SIZE: usize = 1024;
pub const MAX_TX_BUF_SIZE: usize = SIGNED_TRANSFER_SIZE + TPM_PKT_UPG_HEADER_SIZE;