summaryrefslogtreecommitdiffstats
path: root/src/security/tpm/tss/tcg-2.0/tss.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/security/tpm/tss/tcg-2.0/tss.c')
-rw-r--r--src/security/tpm/tss/tcg-2.0/tss.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/security/tpm/tss/tcg-2.0/tss.c b/src/security/tpm/tss/tcg-2.0/tss.c
index c4b553840f91..08a7caa1a9d3 100644
--- a/src/security/tpm/tss/tcg-2.0/tss.c
+++ b/src/security/tpm/tss/tcg-2.0/tss.c
@@ -1,5 +1,6 @@
/*
* Copyright 2016 The Chromium OS Authors. All rights reserved.
+ * Copyright 2017-2019 Eltan B.V.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
@@ -366,3 +367,31 @@ uint32_t tlcl_disable_platform_hierarchy(void)
return TPM_SUCCESS;
}
+
+uint32_t tlcl_get_capability(TPM_CAP capability, uint32_t property,
+ uint32_t property_count,
+ TPMS_CAPABILITY_DATA *capability_data)
+{
+ struct tpm2_get_capability cmd;
+ struct tpm2_response *response;
+
+ cmd.capability = capability;
+ cmd.property = property;
+ cmd.propertyCount = property_count;
+
+ if (property_count > 1) {
+ printk(BIOS_ERR, "%s: property_count more than one not "
+ "supported yet\n", __func__);
+ return TPM_E_IOERROR;
+ }
+
+ response = tpm_process_command(TPM2_GetCapability, &cmd);
+
+ if (!response) {
+ printk(BIOS_ERR, "%s: Command Failed\n", __func__);
+ return TPM_E_IOERROR;
+ }
+
+ memcpy(capability_data, &response->gc.cd, sizeof(TPMS_CAPABILITY_DATA));
+ return TPM_SUCCESS;
+}