From: Ross Philipson <[email protected]>

From: Ross Philipson <[email protected]>

Gather all the TPM1 definitions and structures in the internal header
file drivers/char/tpm/tpm.h into the command header. In addition, bring
in the single RNG structure from tpm-interface.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/

Signed-off-by: Daniel P. Smith <[email protected]>
Signed-off-by: Ross Philipson <[email protected]>
Signed-off-by: Alec Brown <[email protected]>
---
 drivers/char/tpm/tpm.h      | 102 --------------------------------
 drivers/char/tpm/tpm1-cmd.c |   5 --
 include/linux/tpm_command.h | 115 ++++++++++++++++++++++++++++++++++++
 3 files changed, 115 insertions(+), 107 deletions(-)

diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
index 02c07fef41ba..1a9a46a921fe 100644
--- a/drivers/char/tpm/tpm.h
+++ b/drivers/char/tpm/tpm.h
@@ -51,105 +51,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,
@@ -224,12 +128,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;
diff --git a/drivers/char/tpm/tpm1-cmd.c b/drivers/char/tpm/tpm1-cmd.c
index 664ca1fff2e8..96f189b5fd6f 100644
--- a/drivers/char/tpm/tpm1-cmd.c
+++ b/drivers/char/tpm/tpm1-cmd.c
@@ -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
diff --git a/include/linux/tpm_command.h b/include/linux/tpm_command.h
index 9a8991b8801d..20b634591fb1 100644
--- a/include/linux/tpm_command.h
+++ b/include/linux/tpm_command.h
@@ -38,6 +38,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
-- 
2.47.3


Reply via email to