mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
tpm: Move TPM1 specific definitions to the command header
Gather all the TPM1 definitions and structures from the internal header file drivers/char/tpm/tpm.h into the command header. In addition, bring in the single RNG structure from tpm1-cmd.c. The definitions moved to these files correspond to the TCG specification for TPM 1 family: TPM 1.2 Main Specification - https://trustedcomputinggroup.org/resource/tpm-main-specification/ Co-developed-by: Daniel P. Smith <dpsmith@apertussolutions.com> Signed-off-by: Daniel P. Smith <dpsmith@apertussolutions.com> Co-developed-by: Alec Brown <alec.r.brown@oracle.com> Signed-off-by: Alec Brown <alec.r.brown@oracle.com> Signed-off-by: Ross Philipson <ross.philipson@gmail.com> Reviewed-by: Jarkko Sakkinen <jarkko@kernel.org> Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
This commit is contained in:
parent
e06f28d32f
commit
94d48062eb
|
|
@ -52,105 +52,9 @@ enum tpm_addr {
|
|||
TPM_ADDR = 0x4E,
|
||||
};
|
||||
|
||||
#define TPM_WARN_RETRY 0x800
|
||||
#define TPM_WARN_DOING_SELFTEST 0x802
|
||||
#define TPM_ERR_DEACTIVATED 0x6
|
||||
#define TPM_ERR_DISABLED 0x7
|
||||
#define TPM_ERR_FAILEDSELFTEST 0x1C
|
||||
#define TPM_ERR_INVALID_POSTINIT 38
|
||||
|
||||
#define TPM_TAG_RQU_COMMAND 193
|
||||
|
||||
/* TPM2 specific constants. */
|
||||
#define TPM2_SPACE_BUFFER_SIZE 16384 /* 16 kB */
|
||||
|
||||
struct stclear_flags_t {
|
||||
__be16 tag;
|
||||
u8 deactivated;
|
||||
u8 disableForceClear;
|
||||
u8 physicalPresence;
|
||||
u8 physicalPresenceLock;
|
||||
u8 bGlobalLock;
|
||||
} __packed;
|
||||
|
||||
struct tpm1_version {
|
||||
u8 major;
|
||||
u8 minor;
|
||||
u8 rev_major;
|
||||
u8 rev_minor;
|
||||
} __packed;
|
||||
|
||||
struct tpm1_version2 {
|
||||
__be16 tag;
|
||||
struct tpm1_version version;
|
||||
} __packed;
|
||||
|
||||
struct timeout_t {
|
||||
__be32 a;
|
||||
__be32 b;
|
||||
__be32 c;
|
||||
__be32 d;
|
||||
} __packed;
|
||||
|
||||
struct duration_t {
|
||||
__be32 tpm_short;
|
||||
__be32 tpm_medium;
|
||||
__be32 tpm_long;
|
||||
} __packed;
|
||||
|
||||
struct permanent_flags_t {
|
||||
__be16 tag;
|
||||
u8 disable;
|
||||
u8 ownership;
|
||||
u8 deactivated;
|
||||
u8 readPubek;
|
||||
u8 disableOwnerClear;
|
||||
u8 allowMaintenance;
|
||||
u8 physicalPresenceLifetimeLock;
|
||||
u8 physicalPresenceHWEnable;
|
||||
u8 physicalPresenceCMDEnable;
|
||||
u8 CEKPUsed;
|
||||
u8 TPMpost;
|
||||
u8 TPMpostLock;
|
||||
u8 FIPS;
|
||||
u8 operator;
|
||||
u8 enableRevokeEK;
|
||||
u8 nvLocked;
|
||||
u8 readSRKPub;
|
||||
u8 tpmEstablished;
|
||||
u8 maintenanceDone;
|
||||
u8 disableFullDALogicInfo;
|
||||
} __packed;
|
||||
|
||||
typedef union {
|
||||
struct permanent_flags_t perm_flags;
|
||||
struct stclear_flags_t stclear_flags;
|
||||
__u8 owned;
|
||||
__be32 num_pcrs;
|
||||
struct tpm1_version version1;
|
||||
struct tpm1_version2 version2;
|
||||
__be32 manufacturer_id;
|
||||
struct timeout_t timeout;
|
||||
struct duration_t duration;
|
||||
} cap_t;
|
||||
|
||||
enum tpm_capabilities {
|
||||
TPM_CAP_FLAG = 4,
|
||||
TPM_CAP_PROP = 5,
|
||||
TPM_CAP_VERSION_1_1 = 0x06,
|
||||
TPM_CAP_VERSION_1_2 = 0x1A,
|
||||
};
|
||||
|
||||
enum tpm_sub_capabilities {
|
||||
TPM_CAP_PROP_PCR = 0x101,
|
||||
TPM_CAP_PROP_MANUFACTURER = 0x103,
|
||||
TPM_CAP_FLAG_PERM = 0x108,
|
||||
TPM_CAP_FLAG_VOL = 0x109,
|
||||
TPM_CAP_PROP_OWNER = 0x111,
|
||||
TPM_CAP_PROP_TIS_TIMEOUT = 0x115,
|
||||
TPM_CAP_PROP_TIS_DURATION = 0x120,
|
||||
};
|
||||
|
||||
enum tpm2_pt_props {
|
||||
TPM2_PT_NONE = 0x00000000,
|
||||
TPM2_PT_GROUP = 0x00000100,
|
||||
|
|
@ -225,12 +129,6 @@ enum tpm2_pt_props {
|
|||
TPM2_PT_AUDIT_COUNTER_1 = TPM2_PT_VAR + 20,
|
||||
};
|
||||
|
||||
/* 128 bytes is an arbitrary cap. This could be as large as TPM_BUFSIZE - 18
|
||||
* bytes, but 128 is still a relatively large number of random bytes and
|
||||
* anything much bigger causes users of struct tpm_cmd_t to start getting
|
||||
* compiler warnings about stack frame size. */
|
||||
#define TPM_MAX_RNG_DATA 128
|
||||
|
||||
extern const struct class tpm_class;
|
||||
extern const struct class tpmrm_class;
|
||||
extern dev_t tpm_devt;
|
||||
|
|
|
|||
|
|
@ -504,11 +504,6 @@ ssize_t tpm1_getcap(struct tpm_chip *chip, u32 subcap_id, cap_t *cap,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(tpm1_getcap);
|
||||
|
||||
struct tpm1_get_random_out {
|
||||
__be32 rng_data_len;
|
||||
u8 rng_data[TPM_MAX_RNG_DATA];
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* tpm1_get_random() - get random bytes from the TPM's RNG
|
||||
* @chip: a &struct tpm_chip instance
|
||||
|
|
|
|||
|
|
@ -36,6 +36,121 @@ enum tpm_command_ordinals {
|
|||
TPM_ORD_UNSEAL = 24,
|
||||
};
|
||||
|
||||
enum tpm_capabilities {
|
||||
TPM_CAP_FLAG = 4,
|
||||
TPM_CAP_PROP = 5,
|
||||
TPM_CAP_VERSION_1_1 = 0x06,
|
||||
TPM_CAP_VERSION_1_2 = 0x1A,
|
||||
};
|
||||
|
||||
enum tpm_sub_capabilities {
|
||||
TPM_CAP_PROP_PCR = 0x101,
|
||||
TPM_CAP_PROP_MANUFACTURER = 0x103,
|
||||
TPM_CAP_FLAG_PERM = 0x108,
|
||||
TPM_CAP_FLAG_VOL = 0x109,
|
||||
TPM_CAP_PROP_OWNER = 0x111,
|
||||
TPM_CAP_PROP_TIS_TIMEOUT = 0x115,
|
||||
TPM_CAP_PROP_TIS_DURATION = 0x120,
|
||||
};
|
||||
|
||||
/* Return Codes */
|
||||
enum tpm_return_codes {
|
||||
TPM_BASE_MASK = 0,
|
||||
TPM_NON_FATAL_MASK = 0x00000800,
|
||||
TPM_SUCCESS = TPM_BASE_MASK + 0,
|
||||
TPM_ERR_DEACTIVATED = TPM_BASE_MASK + 6,
|
||||
TPM_ERR_DISABLED = TPM_BASE_MASK + 7,
|
||||
TPM_ERR_FAIL = TPM_BASE_MASK + 9,
|
||||
TPM_ERR_FAILEDSELFTEST = TPM_BASE_MASK + 28,
|
||||
TPM_ERR_INVALID_POSTINIT = TPM_BASE_MASK + 38,
|
||||
TPM_ERR_INVALID_FAMILY = TPM_BASE_MASK + 55,
|
||||
TPM_WARN_RETRY = TPM_BASE_MASK + TPM_NON_FATAL_MASK + 0,
|
||||
TPM_WARN_DOING_SELFTEST = TPM_BASE_MASK + TPM_NON_FATAL_MASK + 2,
|
||||
};
|
||||
|
||||
struct stclear_flags_t {
|
||||
__be16 tag;
|
||||
u8 deactivated;
|
||||
u8 disableForceClear;
|
||||
u8 physicalPresence;
|
||||
u8 physicalPresenceLock;
|
||||
u8 bGlobalLock;
|
||||
} __packed;
|
||||
|
||||
struct tpm1_version {
|
||||
u8 major;
|
||||
u8 minor;
|
||||
u8 rev_major;
|
||||
u8 rev_minor;
|
||||
} __packed;
|
||||
|
||||
struct tpm1_version2 {
|
||||
__be16 tag;
|
||||
struct tpm1_version version;
|
||||
} __packed;
|
||||
|
||||
struct timeout_t {
|
||||
__be32 a;
|
||||
__be32 b;
|
||||
__be32 c;
|
||||
__be32 d;
|
||||
} __packed;
|
||||
|
||||
struct duration_t {
|
||||
__be32 tpm_short;
|
||||
__be32 tpm_medium;
|
||||
__be32 tpm_long;
|
||||
} __packed;
|
||||
|
||||
struct permanent_flags_t {
|
||||
__be16 tag;
|
||||
u8 disable;
|
||||
u8 ownership;
|
||||
u8 deactivated;
|
||||
u8 readPubek;
|
||||
u8 disableOwnerClear;
|
||||
u8 allowMaintenance;
|
||||
u8 physicalPresenceLifetimeLock;
|
||||
u8 physicalPresenceHWEnable;
|
||||
u8 physicalPresenceCMDEnable;
|
||||
u8 CEKPUsed;
|
||||
u8 TPMpost;
|
||||
u8 TPMpostLock;
|
||||
u8 FIPS;
|
||||
u8 operator;
|
||||
u8 enableRevokeEK;
|
||||
u8 nvLocked;
|
||||
u8 readSRKPub;
|
||||
u8 tpmEstablished;
|
||||
u8 maintenanceDone;
|
||||
u8 disableFullDALogicInfo;
|
||||
} __packed;
|
||||
|
||||
typedef union {
|
||||
struct permanent_flags_t perm_flags;
|
||||
struct stclear_flags_t stclear_flags;
|
||||
__u8 owned;
|
||||
__be32 num_pcrs;
|
||||
struct tpm1_version version1;
|
||||
struct tpm1_version2 version2;
|
||||
__be32 manufacturer_id;
|
||||
struct timeout_t timeout;
|
||||
struct duration_t duration;
|
||||
} cap_t;
|
||||
|
||||
/*
|
||||
* 128 bytes is an arbitrary cap. This could be as large as TPM_BUFSIZE - 18
|
||||
* bytes, but 128 is still a relatively large number of random bytes and
|
||||
* anything much bigger causes users of struct tpm_cmd_t to start getting
|
||||
* compiler warnings about stack frame size.
|
||||
*/
|
||||
#define TPM_MAX_RNG_DATA 128
|
||||
|
||||
struct tpm1_get_random_out {
|
||||
__be32 rng_data_len;
|
||||
u8 rng_data[TPM_MAX_RNG_DATA];
|
||||
} __packed;
|
||||
|
||||
/* Other constants */
|
||||
#define SRKHANDLE 0x40000000
|
||||
#define TPM_NONCE_SIZE 20
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user