This gathers all the TPM2 definitions and structures into two separate
header files (public tpm2.h and private tpm2_structs.h). The definitions
moved to these files correspond to the TCG specification for TPM 1 family:

TPM 2.0 Library
 - https://trustedcomputinggroup.org/resource/tpm-library-specification/

Note that the structures were pulled into tpm2_structs.h to allow their
external reuse.

Signed-off-by: Daniel P. Smith <[email protected]>
Signed-off-by: Ross Philipson <[email protected]>
---
 drivers/char/tpm/tpm.h          |  78 +---------
 drivers/char/tpm/tpm2-cmd.c     |  32 +---
 drivers/char/tpm/tpm2-space.c   |  13 --
 drivers/char/tpm/tpm2_structs.h |  58 ++++++++
 include/linux/tpm.h             | 141 +-----------------
 include/linux/tpm2.h            | 252 ++++++++++++++++++++++++++++++++
 6 files changed, 313 insertions(+), 261 deletions(-)
 create mode 100644 drivers/char/tpm/tpm2_structs.h
 create mode 100644 include/linux/tpm2.h

diff --git a/drivers/char/tpm/tpm.h b/drivers/char/tpm/tpm.h
index 1f9f8540eede..faac3c7065bf 100644
--- a/drivers/char/tpm/tpm.h
+++ b/drivers/char/tpm/tpm.h
@@ -50,83 +50,6 @@ enum tpm_addr {
        TPM_ADDR = 0x4E,
 };
 
-/* TPM2 specific constants. */
-#define TPM2_SPACE_BUFFER_SIZE         16384 /* 16 kB */
-
-enum tpm2_pt_props {
-       TPM2_PT_NONE = 0x00000000,
-       TPM2_PT_GROUP = 0x00000100,
-       TPM2_PT_FIXED = TPM2_PT_GROUP * 1,
-       TPM2_PT_FAMILY_INDICATOR = TPM2_PT_FIXED + 0,
-       TPM2_PT_LEVEL = TPM2_PT_FIXED + 1,
-       TPM2_PT_REVISION = TPM2_PT_FIXED + 2,
-       TPM2_PT_DAY_OF_YEAR = TPM2_PT_FIXED + 3,
-       TPM2_PT_YEAR = TPM2_PT_FIXED + 4,
-       TPM2_PT_MANUFACTURER = TPM2_PT_FIXED + 5,
-       TPM2_PT_VENDOR_STRING_1 = TPM2_PT_FIXED + 6,
-       TPM2_PT_VENDOR_STRING_2 = TPM2_PT_FIXED + 7,
-       TPM2_PT_VENDOR_STRING_3 = TPM2_PT_FIXED + 8,
-       TPM2_PT_VENDOR_STRING_4 = TPM2_PT_FIXED + 9,
-       TPM2_PT_VENDOR_TPM_TYPE = TPM2_PT_FIXED + 10,
-       TPM2_PT_FIRMWARE_VERSION_1 = TPM2_PT_FIXED + 11,
-       TPM2_PT_FIRMWARE_VERSION_2 = TPM2_PT_FIXED + 12,
-       TPM2_PT_INPUT_BUFFER = TPM2_PT_FIXED + 13,
-       TPM2_PT_HR_TRANSIENT_MIN = TPM2_PT_FIXED + 14,
-       TPM2_PT_HR_PERSISTENT_MIN = TPM2_PT_FIXED + 15,
-       TPM2_PT_HR_LOADED_MIN = TPM2_PT_FIXED + 16,
-       TPM2_PT_ACTIVE_SESSIONS_MAX = TPM2_PT_FIXED + 17,
-       TPM2_PT_PCR_COUNT = TPM2_PT_FIXED + 18,
-       TPM2_PT_PCR_SELECT_MIN = TPM2_PT_FIXED + 19,
-       TPM2_PT_CONTEXT_GAP_MAX = TPM2_PT_FIXED + 20,
-       TPM2_PT_NV_COUNTERS_MAX = TPM2_PT_FIXED + 22,
-       TPM2_PT_NV_INDEX_MAX = TPM2_PT_FIXED + 23,
-       TPM2_PT_MEMORY = TPM2_PT_FIXED + 24,
-       TPM2_PT_CLOCK_UPDATE = TPM2_PT_FIXED + 25,
-       TPM2_PT_CONTEXT_HASH = TPM2_PT_FIXED + 26,
-       TPM2_PT_CONTEXT_SYM = TPM2_PT_FIXED + 27,
-       TPM2_PT_CONTEXT_SYM_SIZE = TPM2_PT_FIXED + 28,
-       TPM2_PT_ORDERLY_COUNT = TPM2_PT_FIXED + 29,
-       TPM2_PT_MAX_COMMAND_SIZE = TPM2_PT_FIXED + 30,
-       TPM2_PT_MAX_RESPONSE_SIZE = TPM2_PT_FIXED + 31,
-       TPM2_PT_MAX_DIGEST = TPM2_PT_FIXED + 32,
-       TPM2_PT_MAX_OBJECT_CONTEXT = TPM2_PT_FIXED + 33,
-       TPM2_PT_MAX_SESSION_CONTEXT = TPM2_PT_FIXED + 34,
-       TPM2_PT_PS_FAMILY_INDICATOR = TPM2_PT_FIXED + 35,
-       TPM2_PT_PS_LEVEL = TPM2_PT_FIXED + 36,
-       TPM2_PT_PS_REVISION = TPM2_PT_FIXED + 37,
-       TPM2_PT_PS_DAY_OF_YEAR = TPM2_PT_FIXED + 38,
-       TPM2_PT_PS_YEAR = TPM2_PT_FIXED + 39,
-       TPM2_PT_SPLIT_MAX = TPM2_PT_FIXED + 40,
-       TPM2_PT_TOTAL_COMMANDS = TPM2_PT_FIXED + 41,
-       TPM2_PT_LIBRARY_COMMANDS = TPM2_PT_FIXED + 42,
-       TPM2_PT_VENDOR_COMMANDS = TPM2_PT_FIXED + 43,
-       TPM2_PT_NV_BUFFER_MAX = TPM2_PT_FIXED + 44,
-       TPM2_PT_MODES = TPM2_PT_FIXED + 45,
-       TPM2_PT_MAX_CAP_BUFFER = TPM2_PT_FIXED + 46,
-       TPM2_PT_VAR = TPM2_PT_GROUP * 2,
-       TPM2_PT_PERMANENT = TPM2_PT_VAR + 0,
-       TPM2_PT_STARTUP_CLEAR = TPM2_PT_VAR + 1,
-       TPM2_PT_HR_NV_INDEX = TPM2_PT_VAR + 2,
-       TPM2_PT_HR_LOADED = TPM2_PT_VAR + 3,
-       TPM2_PT_HR_LOADED_AVAIL = TPM2_PT_VAR + 4,
-       TPM2_PT_HR_ACTIVE = TPM2_PT_VAR + 5,
-       TPM2_PT_HR_ACTIVE_AVAIL = TPM2_PT_VAR + 6,
-       TPM2_PT_HR_TRANSIENT_AVAIL = TPM2_PT_VAR + 7,
-       TPM2_PT_HR_PERSISTENT = TPM2_PT_VAR + 8,
-       TPM2_PT_HR_PERSISTENT_AVAIL = TPM2_PT_VAR + 9,
-       TPM2_PT_NV_COUNTERS = TPM2_PT_VAR + 10,
-       TPM2_PT_NV_COUNTERS_AVAIL = TPM2_PT_VAR + 11,
-       TPM2_PT_ALGORITHM_SET = TPM2_PT_VAR + 12,
-       TPM2_PT_LOADED_CURVES = TPM2_PT_VAR + 13,
-       TPM2_PT_LOCKOUT_COUNTER = TPM2_PT_VAR + 14,
-       TPM2_PT_MAX_AUTH_FAIL = TPM2_PT_VAR + 15,
-       TPM2_PT_LOCKOUT_INTERVAL = TPM2_PT_VAR + 16,
-       TPM2_PT_LOCKOUT_RECOVERY = TPM2_PT_VAR + 17,
-       TPM2_PT_NV_WRITE_RECOVERY = TPM2_PT_VAR + 18,
-       TPM2_PT_AUDIT_COUNTER_0 = TPM2_PT_VAR + 19,
-       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
@@ -134,6 +57,7 @@ enum tpm2_pt_props {
 #define TPM_MAX_RNG_DATA       128
 
 #include "tpm1_structs.h"
+#include "tpm2_structs.h"
 
 extern const struct class tpm_class;
 extern const struct class tpmrm_class;
diff --git a/drivers/char/tpm/tpm2-cmd.c b/drivers/char/tpm/tpm2-cmd.c
index a0fcd3cd00b7..7308b08a915f 100644
--- a/drivers/char/tpm/tpm2-cmd.c
+++ b/drivers/char/tpm/tpm2-cmd.c
@@ -11,8 +11,8 @@
  * used by the kernel internally.
  */
 
-#include "tpm.h"
 #include <crypto/hash_info.h>
+#include "tpm.h"
 
 static bool disable_pcr_integrity;
 module_param(disable_pcr_integrity, bool, 0444);
@@ -79,17 +79,6 @@ unsigned long tpm2_calc_ordinal_duration(u32 ordinal)
        return msecs_to_jiffies(TPM2_DURATION_DEFAULT);
 }
 
-struct tpm2_pcr_read_out {
-       __be32  update_cnt;
-       __be32  pcr_selects_cnt;
-       __be16  hash_alg;
-       u8      pcr_select_size;
-       u8      pcr_select[TPM2_PCR_SELECT_MIN];
-       __be32  digests_cnt;
-       __be16  digest_size;
-       u8      digest[];
-} __packed;
-
 /**
  * tpm2_pcr_read() - read a PCR value
  * @chip:      TPM chip to use.
@@ -205,11 +194,6 @@ int tpm2_pcr_extend(struct tpm_chip *chip, u32 pcr_idx,
        return rc;
 }
 
-struct tpm2_get_random_out {
-       __be16 size;
-       u8 buffer[TPM_MAX_RNG_DATA];
-} __packed;
-
 /**
  * tpm2_get_random() - get random bytes from the TPM RNG
  *
@@ -322,14 +306,6 @@ void tpm2_flush_context(struct tpm_chip *chip, u32 handle)
 }
 EXPORT_SYMBOL_GPL(tpm2_flush_context);
 
-struct tpm2_get_cap_out {
-       u8 more_data;
-       __be32 subcap_id;
-       __be32 property_cnt;
-       __be32 property_id;
-       __be32 value;
-} __packed;
-
 /**
  * tpm2_get_tpm_pt() - get value of a TPM_CAP_TPM_PROPERTIES type property
  * @chip:              a &tpm_chip instance
@@ -498,12 +474,6 @@ static int tpm2_init_bank_info(struct tpm_chip *chip, u32 
bank_index)
        return tpm2_pcr_read(chip, 0, &digest, &bank->digest_size);
 }
 
-struct tpm2_pcr_selection {
-       __be16  hash_alg;
-       u8  size_of_select;
-       u8  pcr_select[3];
-} __packed;
-
 ssize_t tpm2_get_pcr_allocation(struct tpm_chip *chip)
 {
        struct tpm2_pcr_selection pcr_selection;
diff --git a/drivers/char/tpm/tpm2-space.c b/drivers/char/tpm/tpm2-space.c
index e80fd767998f..8595107ab5b2 100644
--- a/drivers/char/tpm/tpm2-space.c
+++ b/drivers/char/tpm/tpm2-space.c
@@ -15,19 +15,6 @@
 #include <linux/unaligned.h>
 #include "tpm.h"
 
-enum tpm2_handle_types {
-       TPM2_HT_HMAC_SESSION    = 0x02000000,
-       TPM2_HT_POLICY_SESSION  = 0x03000000,
-       TPM2_HT_TRANSIENT       = 0x80000000,
-};
-
-struct tpm2_context {
-       __be64 sequence;
-       __be32 saved_handle;
-       __be32 hierarchy;
-       __be16 blob_size;
-} __packed;
-
 static void tpm2_flush_sessions(struct tpm_chip *chip, struct tpm_space *space)
 {
        int i;
diff --git a/drivers/char/tpm/tpm2_structs.h b/drivers/char/tpm/tpm2_structs.h
new file mode 100644
index 000000000000..85c15f2369f2
--- /dev/null
+++ b/drivers/char/tpm/tpm2_structs.h
@@ -0,0 +1,58 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2004 IBM Corporation
+ * Copyright (C) 2015 Intel Corporation
+ *
+ * Authors:
+ * Leendert van Doorn <[email protected]>
+ * Dave Safford <[email protected]>
+ * Reiner Sailer <[email protected]>
+ * Kylene Hall <[email protected]>
+ *
+ * Maintained by: <[email protected]>
+ *
+ * Device driver for TCG/TCPA TPM (trusted platform module).
+ * Specifications at www.trustedcomputinggroup.org
+ */
+
+#ifndef __TPM2_STRUCTS_H__
+#define __TPM2_STRUCTS_H__
+
+struct tpm2_pcr_read_out {
+       __be32  update_cnt;
+       __be32  pcr_selects_cnt;
+       __be16  hash_alg;
+       u8      pcr_select_size;
+       u8      pcr_select[TPM2_PCR_SELECT_MIN];
+       __be32  digests_cnt;
+       __be16  digest_size;
+       u8      digest[];
+} __packed;
+
+struct tpm2_get_random_out {
+       __be16 size;
+       u8 buffer[TPM_MAX_RNG_DATA];
+} __packed;
+
+struct tpm2_get_cap_out {
+       u8 more_data;
+       __be32 subcap_id;
+       __be32 property_cnt;
+       __be32 property_id;
+       __be32 value;
+} __packed;
+
+struct tpm2_pcr_selection {
+       __be16  hash_alg;
+       u8  size_of_select;
+       u8  pcr_select[3];
+} __packed;
+
+struct tpm2_context {
+       __be64 sequence;
+       __be32 saved_handle;
+       __be32 hierarchy;
+       __be16 blob_size;
+} __packed;
+
+#endif
diff --git a/include/linux/tpm.h b/include/linux/tpm.h
index ef81e0b59657..e77e3e2c1d9e 100644
--- a/include/linux/tpm.h
+++ b/include/linux/tpm.h
@@ -27,6 +27,7 @@
 
 #include "tpm_common.h"
 #include "tpm1.h"
+#include "tpm2.h"
 
 #define TPM_DIGEST_SIZE                20      /* Max TPM v1.2 PCR size */
 #define TPM_HEADER_SIZE                10
@@ -43,12 +44,6 @@ struct trusted_key_options;
 /* opaque structure, holds auth session parameters like the session key */
 struct tpm2_auth;
 
-enum tpm2_session_types {
-       TPM2_SE_HMAC    = 0x00,
-       TPM2_SE_POLICY  = 0x01,
-       TPM2_SE_TRIAL   = 0x02,
-};
-
 /* if you add a new hash to this, increment TPM_MAX_HASHES below */
 enum tpm_algorithms {
        TPM_ALG_ERROR           = 0x0000,
@@ -70,11 +65,6 @@ enum tpm_algorithms {
  */
 #define TPM_MAX_HASHES 5
 
-enum tpm2_curves {
-       TPM2_ECC_NONE           = 0x0000,
-       TPM2_ECC_NIST_P256      = 0x0003,
-};
-
 struct tpm_digest {
        u16 alg_id;
        u8 digest[TPM2_MAX_DIGEST_SIZE];
@@ -225,117 +215,11 @@ struct tpm_chip {
 #endif
 };
 
-enum tpm2_timeouts {
-       TPM2_TIMEOUT_A          =    750,
-       TPM2_TIMEOUT_B          =   4000,
-       TPM2_TIMEOUT_C          =    200,
-       TPM2_TIMEOUT_D          =     30,
-};
-
-enum tpm2_durations {
-       TPM2_DURATION_SHORT     =     20,
-       TPM2_DURATION_LONG      =   2000,
-       TPM2_DURATION_DEFAULT   = 120000,
-};
-
-enum tpm2_structures {
-       TPM2_ST_NO_SESSIONS     = 0x8001,
-       TPM2_ST_SESSIONS        = 0x8002,
-       TPM2_ST_CREATION        = 0x8021,
-};
-
-/* Indicates from what layer of the software stack the error comes from */
-#define TSS2_RC_LAYER_SHIFT     16
-#define TSS2_RESMGR_TPM_RC_LAYER (11 << TSS2_RC_LAYER_SHIFT)
-
-enum tpm2_return_codes {
-       TPM2_RC_SUCCESS         = 0x0000,
-       TPM2_RC_HASH            = 0x0083, /* RC_FMT1 */
-       TPM2_RC_HANDLE          = 0x008B,
-       TPM2_RC_INTEGRITY       = 0x009F,
-       TPM2_RC_INITIALIZE      = 0x0100, /* RC_VER1 */
-       TPM2_RC_FAILURE         = 0x0101,
-       TPM2_RC_DISABLED        = 0x0120,
-       TPM2_RC_UPGRADE         = 0x012D,
-       TPM2_RC_COMMAND_CODE    = 0x0143,
-       TPM2_RC_TESTING         = 0x090A, /* RC_WARN */
-       TPM2_RC_REFERENCE_H0    = 0x0910,
-       TPM2_RC_RETRY           = 0x0922,
-       TPM2_RC_SESSION_MEMORY  = 0x0903,
-};
-
-enum tpm2_command_codes {
-       TPM2_CC_FIRST                   = 0x011F,
-       TPM2_CC_HIERARCHY_CONTROL       = 0x0121,
-       TPM2_CC_HIERARCHY_CHANGE_AUTH   = 0x0129,
-       TPM2_CC_CREATE_PRIMARY          = 0x0131,
-       TPM2_CC_SEQUENCE_COMPLETE       = 0x013E,
-       TPM2_CC_SELF_TEST               = 0x0143,
-       TPM2_CC_STARTUP                 = 0x0144,
-       TPM2_CC_SHUTDOWN                = 0x0145,
-       TPM2_CC_NV_READ                 = 0x014E,
-       TPM2_CC_CREATE                  = 0x0153,
-       TPM2_CC_LOAD                    = 0x0157,
-       TPM2_CC_SEQUENCE_UPDATE         = 0x015C,
-       TPM2_CC_UNSEAL                  = 0x015E,
-       TPM2_CC_CONTEXT_LOAD            = 0x0161,
-       TPM2_CC_CONTEXT_SAVE            = 0x0162,
-       TPM2_CC_FLUSH_CONTEXT           = 0x0165,
-       TPM2_CC_READ_PUBLIC             = 0x0173,
-       TPM2_CC_START_AUTH_SESS         = 0x0176,
-       TPM2_CC_VERIFY_SIGNATURE        = 0x0177,
-       TPM2_CC_GET_CAPABILITY          = 0x017A,
-       TPM2_CC_GET_RANDOM              = 0x017B,
-       TPM2_CC_PCR_READ                = 0x017E,
-       TPM2_CC_PCR_EXTEND              = 0x0182,
-       TPM2_CC_EVENT_SEQUENCE_COMPLETE = 0x0185,
-       TPM2_CC_HASH_SEQUENCE_START     = 0x0186,
-       TPM2_CC_CREATE_LOADED           = 0x0191,
-       TPM2_CC_LAST                    = 0x0193, /* Spec 1.36 */
-};
-
-enum tpm2_permanent_handles {
-       TPM2_RH_NULL            = 0x40000007,
-       TPM2_RS_PW              = 0x40000009,
-};
-
-/* Most Significant Octet for key types  */
-enum tpm2_mso_type {
-       TPM2_MSO_NVRAM          = 0x01,
-       TPM2_MSO_SESSION        = 0x02,
-       TPM2_MSO_POLICY         = 0x03,
-       TPM2_MSO_PERMANENT      = 0x40,
-       TPM2_MSO_VOLATILE       = 0x80,
-       TPM2_MSO_PERSISTENT     = 0x81,
-};
-
 static inline enum tpm2_mso_type tpm2_handle_mso(u32 handle)
 {
        return handle >> 24;
 }
 
-enum tpm2_capabilities {
-       TPM2_CAP_HANDLES        = 1,
-       TPM2_CAP_COMMANDS       = 2,
-       TPM2_CAP_PCRS           = 5,
-       TPM2_CAP_TPM_PROPERTIES = 6,
-};
-
-enum tpm2_properties {
-       TPM_PT_TOTAL_COMMANDS   = 0x0129,
-};
-
-enum tpm2_startup_types {
-       TPM2_SU_CLEAR   = 0x0000,
-       TPM2_SU_STATE   = 0x0001,
-};
-
-enum tpm2_cc_attrs {
-       TPM2_CC_ATTR_CHANDLES   = 25,
-       TPM2_CC_ATTR_RHANDLE    = 28,
-       TPM2_CC_ATTR_VENDOR     = 29,
-};
-
 #define TPM_VID_INTEL    0x8086
 #define TPM_VID_WINBOND  0x1050
 #define TPM_VID_STM      0x104A
@@ -387,29 +271,6 @@ struct tpm_buf {
        u8 data[];
 };
 
-enum tpm2_object_attributes {
-       TPM2_OA_FIXED_TPM               = BIT(1),
-       TPM2_OA_ST_CLEAR                = BIT(2),
-       TPM2_OA_FIXED_PARENT            = BIT(4),
-       TPM2_OA_SENSITIVE_DATA_ORIGIN   = BIT(5),
-       TPM2_OA_USER_WITH_AUTH          = BIT(6),
-       TPM2_OA_ADMIN_WITH_POLICY       = BIT(7),
-       TPM2_OA_NO_DA                   = BIT(10),
-       TPM2_OA_ENCRYPTED_DUPLICATION   = BIT(11),
-       TPM2_OA_RESTRICTED              = BIT(16),
-       TPM2_OA_DECRYPT                 = BIT(17),
-       TPM2_OA_SIGN                    = BIT(18),
-};
-
-enum tpm2_session_attributes {
-       TPM2_SA_CONTINUE_SESSION        = BIT(0),
-       TPM2_SA_AUDIT_EXCLUSIVE         = BIT(1),
-       TPM2_SA_AUDIT_RESET             = BIT(3),
-       TPM2_SA_DECRYPT                 = BIT(5),
-       TPM2_SA_ENCRYPT                 = BIT(6),
-       TPM2_SA_AUDIT                   = BIT(7),
-};
-
 struct tpm2_hash {
        unsigned int crypto_id;
        unsigned int tpm_id;
diff --git a/include/linux/tpm2.h b/include/linux/tpm2.h
new file mode 100644
index 000000000000..f87489aea780
--- /dev/null
+++ b/include/linux/tpm2.h
@@ -0,0 +1,252 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2004,2007,2008 IBM Corporation
+ *
+ * Authors:
+ * Leendert van Doorn <[email protected]>
+ * Dave Safford <[email protected]>
+ * Reiner Sailer <[email protected]>
+ * Kylene Hall <[email protected]>
+ * Debora Velarde <[email protected]>
+ *
+ * Maintained by: <[email protected]>
+ *
+ * Device driver for TCG/TCPA TPM (trusted platform module).
+ * Specifications at www.trustedcomputinggroup.org
+ */
+#ifndef __LINUX_TPM2_H__
+#define __LINUX_TPM2_H__
+
+/*
+ * TPM 2.0 Library
+ * https://trustedcomputinggroup.org/resource/tpm-library-specification/
+ */
+
+/* TPM2 specific constants. */
+#define TPM2_SPACE_BUFFER_SIZE 16384 /* 16 kB */
+
+enum tpm2_session_types {
+       TPM2_SE_HMAC    = 0x00,
+       TPM2_SE_POLICY  = 0x01,
+       TPM2_SE_TRIAL   = 0x02,
+};
+
+enum tpm2_structures {
+       TPM2_ST_NO_SESSIONS     = 0x8001,
+       TPM2_ST_SESSIONS        = 0x8002,
+       TPM2_ST_CREATION        = 0x8021,
+};
+
+enum tpm2_timeouts {
+       TPM2_TIMEOUT_A          =    750,
+       TPM2_TIMEOUT_B          =   4000,
+       TPM2_TIMEOUT_C          =    200,
+       TPM2_TIMEOUT_D          =     30,
+       TPM2_DURATION_SHORT     =     20,
+       TPM2_DURATION_MEDIUM    =    750,
+       TPM2_DURATION_LONG      =   2000,
+       TPM2_DURATION_LONG_LONG = 300000,
+       TPM2_DURATION_DEFAULT   = 120000,
+};
+
+/* Indicates from what layer of the software stack the error comes from */
+#define TSS2_RC_LAYER_SHIFT     16
+#define TSS2_RESMGR_TPM_RC_LAYER (11 << TSS2_RC_LAYER_SHIFT)
+
+enum tpm2_return_codes {
+       TPM2_RC_SUCCESS         = 0x0000,
+       TPM2_RC_HASH            = 0x0083, /* RC_FMT1 */
+       TPM2_RC_HANDLE          = 0x008B,
+       TPM2_RC_INTEGRITY       = 0x009F,
+       TPM2_RC_INITIALIZE      = 0x0100, /* RC_VER1 */
+       TPM2_RC_FAILURE         = 0x0101,
+       TPM2_RC_DISABLED        = 0x0120,
+       TPM2_RC_UPGRADE         = 0x012D,
+       TPM2_RC_COMMAND_CODE    = 0x0143,
+       TPM2_RC_TESTING         = 0x090A, /* RC_WARN */
+       TPM2_RC_REFERENCE_H0    = 0x0910,
+       TPM2_RC_RETRY           = 0x0922,
+       TPM2_RC_SESSION_MEMORY  = 0x0903,
+};
+
+enum tpm2_command_codes {
+       TPM2_CC_FIRST                   = 0x011F,
+       TPM2_CC_HIERARCHY_CONTROL       = 0x0121,
+       TPM2_CC_HIERARCHY_CHANGE_AUTH   = 0x0129,
+       TPM2_CC_CREATE_PRIMARY          = 0x0131,
+       TPM2_CC_SEQUENCE_COMPLETE       = 0x013E,
+       TPM2_CC_SELF_TEST               = 0x0143,
+       TPM2_CC_STARTUP                 = 0x0144,
+       TPM2_CC_SHUTDOWN                = 0x0145,
+       TPM2_CC_NV_READ                 = 0x014E,
+       TPM2_CC_CREATE                  = 0x0153,
+       TPM2_CC_LOAD                    = 0x0157,
+       TPM2_CC_SEQUENCE_UPDATE         = 0x015C,
+       TPM2_CC_UNSEAL                  = 0x015E,
+       TPM2_CC_CONTEXT_LOAD            = 0x0161,
+       TPM2_CC_CONTEXT_SAVE            = 0x0162,
+       TPM2_CC_FLUSH_CONTEXT           = 0x0165,
+       TPM2_CC_READ_PUBLIC             = 0x0173,
+       TPM2_CC_START_AUTH_SESS         = 0x0176,
+       TPM2_CC_VERIFY_SIGNATURE        = 0x0177,
+       TPM2_CC_GET_CAPABILITY          = 0x017A,
+       TPM2_CC_GET_RANDOM              = 0x017B,
+       TPM2_CC_PCR_READ                = 0x017E,
+       TPM2_CC_PCR_EXTEND              = 0x0182,
+       TPM2_CC_EVENT_SEQUENCE_COMPLETE = 0x0185,
+       TPM2_CC_HASH_SEQUENCE_START     = 0x0186,
+       TPM2_CC_CREATE_LOADED           = 0x0191,
+       TPM2_CC_LAST                    = 0x0193, /* Spec 1.36 */
+};
+
+enum tpm2_capabilities {
+       TPM2_CAP_HANDLES        = 1,
+       TPM2_CAP_COMMANDS       = 2,
+       TPM2_CAP_PCRS           = 5,
+       TPM2_CAP_TPM_PROPERTIES = 6,
+};
+
+enum tpm2_properties {
+       TPM_PT_TOTAL_COMMANDS   = 0x0129,
+};
+
+enum tpm2_startup_types {
+       TPM2_SU_CLEAR   = 0x0000,
+       TPM2_SU_STATE   = 0x0001,
+};
+
+enum tpm2_cc_attrs {
+       TPM2_CC_ATTR_CHANDLES   = 25,
+       TPM2_CC_ATTR_RHANDLE    = 28,
+       TPM2_CC_ATTR_VENDOR     = 29,
+};
+
+enum tpm2_permanent_handles {
+       TPM2_RH_NULL            = 0x40000007,
+       TPM2_RS_PW              = 0x40000009,
+};
+
+/* Most Significant Octet for key types  */
+enum tpm2_mso_type {
+       TPM2_MSO_NVRAM          = 0x01,
+       TPM2_MSO_SESSION        = 0x02,
+       TPM2_MSO_POLICY         = 0x03,
+       TPM2_MSO_PERMANENT      = 0x40,
+       TPM2_MSO_VOLATILE       = 0x80,
+       TPM2_MSO_PERSISTENT     = 0x81,
+};
+
+enum tpm2_ecc_curve {
+       TPM2_ECC_NONE           = 0x0000,
+       TPM2_ECC_NIST_P256      = 0x0003,
+};
+
+enum tpm2_object_attributes {
+       TPM2_OA_FIXED_TPM               = BIT(1),
+       TPM2_OA_ST_CLEAR                = BIT(2),
+       TPM2_OA_FIXED_PARENT            = BIT(4),
+       TPM2_OA_SENSITIVE_DATA_ORIGIN   = BIT(5),
+       TPM2_OA_USER_WITH_AUTH          = BIT(6),
+       TPM2_OA_ADMIN_WITH_POLICY       = BIT(7),
+       TPM2_OA_NO_DA                   = BIT(10),
+       TPM2_OA_ENCRYPTED_DUPLICATION   = BIT(11),
+       TPM2_OA_RESTRICTED              = BIT(16),
+       TPM2_OA_DECRYPT                 = BIT(17),
+       TPM2_OA_SIGN                    = BIT(18),
+};
+
+enum tpm2_session_attributes {
+       TPM2_SA_CONTINUE_SESSION        = BIT(0),
+       TPM2_SA_AUDIT_EXCLUSIVE         = BIT(1),
+       TPM2_SA_AUDIT_RESET             = BIT(3),
+       TPM2_SA_DECRYPT                 = BIT(5),
+       TPM2_SA_ENCRYPT                 = BIT(6),
+       TPM2_SA_AUDIT                   = BIT(7),
+};
+
+enum tpm2_pcr_select {
+       TPM2_PLATFORM_PCR       = 24,
+       TPM2_PCR_SELECT_MIN     = ((TPM2_PLATFORM_PCR + 7) / 8),
+};
+
+enum tpm2_handle_types {
+       TPM2_HT_HMAC_SESSION    = 0x02000000,
+       TPM2_HT_POLICY_SESSION  = 0x03000000,
+       TPM2_HT_TRANSIENT       = 0x80000000,
+};
+
+enum tpm2_pt_props {
+       TPM2_PT_NONE                    = 0x00000000,
+       TPM2_PT_GROUP                   = 0x00000100,
+       TPM2_PT_FIXED                   = TPM2_PT_GROUP * 1,
+       TPM2_PT_FAMILY_INDICATOR        = TPM2_PT_FIXED + 0,
+       TPM2_PT_LEVEL           = TPM2_PT_FIXED + 1,
+       TPM2_PT_REVISION        = TPM2_PT_FIXED + 2,
+       TPM2_PT_DAY_OF_YEAR     = TPM2_PT_FIXED + 3,
+       TPM2_PT_YEAR            = TPM2_PT_FIXED + 4,
+       TPM2_PT_MANUFACTURER    = TPM2_PT_FIXED + 5,
+       TPM2_PT_VENDOR_STRING_1 = TPM2_PT_FIXED + 6,
+       TPM2_PT_VENDOR_STRING_2 = TPM2_PT_FIXED + 7,
+       TPM2_PT_VENDOR_STRING_3 = TPM2_PT_FIXED + 8,
+       TPM2_PT_VENDOR_STRING_4 = TPM2_PT_FIXED + 9,
+       TPM2_PT_VENDOR_TPM_TYPE = TPM2_PT_FIXED + 10,
+       TPM2_PT_FIRMWARE_VERSION_1      = TPM2_PT_FIXED + 11,
+       TPM2_PT_FIRMWARE_VERSION_2      = TPM2_PT_FIXED + 12,
+       TPM2_PT_INPUT_BUFFER            = TPM2_PT_FIXED + 13,
+       TPM2_PT_HR_TRANSIENT_MIN        = TPM2_PT_FIXED + 14,
+       TPM2_PT_HR_PERSISTENT_MIN       = TPM2_PT_FIXED + 15,
+       TPM2_PT_HR_LOADED_MIN           = TPM2_PT_FIXED + 16,
+       TPM2_PT_ACTIVE_SESSIONS_MAX     = TPM2_PT_FIXED + 17,
+       TPM2_PT_PCR_COUNT       = TPM2_PT_FIXED + 18,
+       TPM2_PT_PCR_SELECT_MIN  = TPM2_PT_FIXED + 19,
+       TPM2_PT_CONTEXT_GAP_MAX = TPM2_PT_FIXED + 20,
+       TPM2_PT_NV_COUNTERS_MAX = TPM2_PT_FIXED + 22,
+       TPM2_PT_NV_INDEX_MAX    = TPM2_PT_FIXED + 23,
+       TPM2_PT_MEMORY          = TPM2_PT_FIXED + 24,
+       TPM2_PT_CLOCK_UPDATE    = TPM2_PT_FIXED + 25,
+       TPM2_PT_CONTEXT_HASH    = TPM2_PT_FIXED + 26,
+       TPM2_PT_CONTEXT_SYM     = TPM2_PT_FIXED + 27,
+       TPM2_PT_CONTEXT_SYM_SIZE        = TPM2_PT_FIXED + 28,
+       TPM2_PT_ORDERLY_COUNT           = TPM2_PT_FIXED + 29,
+       TPM2_PT_MAX_COMMAND_SIZE        = TPM2_PT_FIXED + 30,
+       TPM2_PT_MAX_RESPONSE_SIZE       = TPM2_PT_FIXED + 31,
+       TPM2_PT_MAX_DIGEST              = TPM2_PT_FIXED + 32,
+       TPM2_PT_MAX_OBJECT_CONTEXT      = TPM2_PT_FIXED + 33,
+       TPM2_PT_MAX_SESSION_CONTEXT     = TPM2_PT_FIXED + 34,
+       TPM2_PT_PS_FAMILY_INDICATOR     = TPM2_PT_FIXED + 35,
+       TPM2_PT_PS_LEVEL        = TPM2_PT_FIXED + 36,
+       TPM2_PT_PS_REVISION     = TPM2_PT_FIXED + 37,
+       TPM2_PT_PS_DAY_OF_YEAR  = TPM2_PT_FIXED + 38,
+       TPM2_PT_PS_YEAR         = TPM2_PT_FIXED + 39,
+       TPM2_PT_SPLIT_MAX       = TPM2_PT_FIXED + 40,
+       TPM2_PT_TOTAL_COMMANDS  = TPM2_PT_FIXED + 41,
+       TPM2_PT_LIBRARY_COMMANDS        = TPM2_PT_FIXED + 42,
+       TPM2_PT_VENDOR_COMMANDS         = TPM2_PT_FIXED + 43,
+       TPM2_PT_NV_BUFFER_MAX           = TPM2_PT_FIXED + 44,
+       TPM2_PT_MODES                   = TPM2_PT_FIXED + 45,
+       TPM2_PT_MAX_CAP_BUFFER          = TPM2_PT_FIXED + 46,
+       TPM2_PT_VAR             = TPM2_PT_GROUP * 2,
+       TPM2_PT_PERMANENT       = TPM2_PT_VAR + 0,
+       TPM2_PT_STARTUP_CLEAR   = TPM2_PT_VAR + 1,
+       TPM2_PT_HR_NV_INDEX     = TPM2_PT_VAR + 2,
+       TPM2_PT_HR_LOADED       = TPM2_PT_VAR + 3,
+       TPM2_PT_HR_LOADED_AVAIL = TPM2_PT_VAR + 4,
+       TPM2_PT_HR_ACTIVE       = TPM2_PT_VAR + 5,
+       TPM2_PT_HR_ACTIVE_AVAIL = TPM2_PT_VAR + 6,
+       TPM2_PT_HR_TRANSIENT_AVAIL      = TPM2_PT_VAR + 7,
+       TPM2_PT_HR_PERSISTENT           = TPM2_PT_VAR + 8,
+       TPM2_PT_HR_PERSISTENT_AVAIL     = TPM2_PT_VAR + 9,
+       TPM2_PT_NV_COUNTERS             = TPM2_PT_VAR + 10,
+       TPM2_PT_NV_COUNTERS_AVAIL       = TPM2_PT_VAR + 11,
+       TPM2_PT_ALGORITHM_SET           = TPM2_PT_VAR + 12,
+       TPM2_PT_LOADED_CURVES           = TPM2_PT_VAR + 13,
+       TPM2_PT_LOCKOUT_COUNTER         = TPM2_PT_VAR + 14,
+       TPM2_PT_MAX_AUTH_FAIL           = TPM2_PT_VAR + 15,
+       TPM2_PT_LOCKOUT_INTERVAL        = TPM2_PT_VAR + 16,
+       TPM2_PT_LOCKOUT_RECOVERY        = TPM2_PT_VAR + 17,
+       TPM2_PT_NV_WRITE_RECOVERY       = TPM2_PT_VAR + 18,
+       TPM2_PT_AUDIT_COUNTER_0 = TPM2_PT_VAR + 19,
+       TPM2_PT_AUDIT_COUNTER_1 = TPM2_PT_VAR + 20,
+};
+
+#endif
-- 
2.43.7


Reply via email to