summaryrefslogtreecommitdiff
path: root/src/security/tpm/tss.h
diff options
context:
space:
mode:
authorSergii Dmytruk <sergii.dmytruk@3mdeb.com>2022-11-02 00:50:03 +0200
committerMartin L Roth <gaumless@gmail.com>2024-03-28 15:18:04 +0000
commit47e9e8cde1810ee9f249027b14ee9f82a7a52d84 (patch)
tree77771e49f8121bebb1b5904940ff7abf2714dccb /src/security/tpm/tss.h
parent094a051732341d20e82c349ea10f85faea6e58d1 (diff)
security/tpm: replace CONFIG(TPMx) checks with runtime check
This prepares the code for enabling both CONFIG_TPM1 and CONFIG_TPM2 during compilation, in which case actual TPM family in use can be determined at runtime. In some places both compile-time and runtime checks are necessary. Yet in places like probe functions runtime state checks don't make sense as runtime state is defined by results of probing. Change-Id: Id9cc25aad8d1d7bfad12b7a92059b1b3641bbfa9 Ticket: https://ticket.coreboot.org/issues/433 Signed-off-by: Sergii Dmytruk <sergii.dmytruk@3mdeb.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/69161 Reviewed-by: Jérémy Compostella <jeremy.compostella@intel.com> Reviewed-by: Julius Werner <jwerner@chromium.org> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/security/tpm/tss.h')
-rw-r--r--src/security/tpm/tss.h31
1 files changed, 23 insertions, 8 deletions
diff --git a/src/security/tpm/tss.h b/src/security/tpm/tss.h
index 3a019ead32..c9aec08262 100644
--- a/src/security/tpm/tss.h
+++ b/src/security/tpm/tss.h
@@ -33,16 +33,31 @@
*/
tpm_result_t tlcl_lib_init(void);
-/* Commands */
+/**
+ * Query active TPM family. Returns TPM_UNKNOWN if uninitialized and TPM_1 or TPM_2 otherwise.
+ */
+static inline enum tpm_family tlcl_get_family(void)
+{
+ /* Defined in tss/tss.c */
+ extern enum tpm_family tlcl_tpm_family;
+
+ if (CONFIG(TPM1) && CONFIG(TPM2))
+ return tlcl_tpm_family;
+ if (CONFIG(TPM1))
+ return TPM_1;
+ if (CONFIG(TPM2))
+ return TPM_2;
+ return TPM_UNKNOWN;
+}
-extern enum tpm_family tlcl_tpm_family;
+/* Commands */
-#define TLCL_CALL(name, ...) do { \
- if (CONFIG(TPM1) && (!CONFIG(TPM2) || tlcl_tpm_family == TPM_1)) \
- return tlcl1_##name(__VA_ARGS__); \
- if (CONFIG(TPM2) && (!CONFIG(TPM1) || tlcl_tpm_family == TPM_2)) \
- return tlcl2_##name(__VA_ARGS__); \
- return TPM_CB_INTERNAL_INCONSISTENCY; \
+#define TLCL_CALL(name, ...) do { \
+ if (tlcl_get_family() == TPM_1) \
+ return tlcl1_##name(__VA_ARGS__); \
+ if (tlcl_get_family() == TPM_2) \
+ return tlcl2_##name(__VA_ARGS__); \
+ return TPM_CB_INTERNAL_INCONSISTENCY; \
} while (0)
/**