xref: /aosp_15_r20/external/tpm2-tss/src/tss2-fapi/api/Fapi_GetTcti.c (revision 758e9fba6fc9adbf15340f70c73baee7b168b1c9)
1*758e9fbaSOystein Eftevaag /* SPDX-License-Identifier: BSD-2-Clause */
2*758e9fbaSOystein Eftevaag /*******************************************************************************
3*758e9fbaSOystein Eftevaag  * Copyright 2018-2019, Fraunhofer SIT sponsored by Infineon Technologies AG
4*758e9fbaSOystein Eftevaag  * All rights reserved.
5*758e9fbaSOystein Eftevaag  ******************************************************************************/
6*758e9fbaSOystein Eftevaag 
7*758e9fbaSOystein Eftevaag #ifdef HAVE_CONFIG_H
8*758e9fbaSOystein Eftevaag #include <config.h>
9*758e9fbaSOystein Eftevaag #endif
10*758e9fbaSOystein Eftevaag 
11*758e9fbaSOystein Eftevaag #include "tss2_fapi.h"
12*758e9fbaSOystein Eftevaag #include "tss2_esys.h"
13*758e9fbaSOystein Eftevaag #include "tss2_tcti.h"
14*758e9fbaSOystein Eftevaag 
15*758e9fbaSOystein Eftevaag #include "fapi_int.h"
16*758e9fbaSOystein Eftevaag #define LOGMODULE fapi
17*758e9fbaSOystein Eftevaag #include "util/log.h"
18*758e9fbaSOystein Eftevaag #include "util/aux_util.h"
19*758e9fbaSOystein Eftevaag 
20*758e9fbaSOystein Eftevaag /** One-Call function for Fapi_GetTcti
21*758e9fbaSOystein Eftevaag  *
22*758e9fbaSOystein Eftevaag  * Fapi_GetTcti returns the TSS2_TCTI_CONTEXT currently used by the provided FAPI_CONTEXT.
23*758e9fbaSOystein Eftevaag  * The purpose is to enable advanced access to the TPM that is currently being talked to.
24*758e9fbaSOystein Eftevaag  * It is especially useful in combination with Fapi_GetTpmBlobs().
25*758e9fbaSOystein Eftevaag  *
26*758e9fbaSOystein Eftevaag  * Note: The application must ensure that this TSS2_TCTI_CONTEXT is not being used in parallel to
27*758e9fbaSOystein Eftevaag  *       the processing of a FAPI command.
28*758e9fbaSOystein Eftevaag  *
29*758e9fbaSOystein Eftevaag  * @param[in,out] context The FAPI_CONTEXT
30*758e9fbaSOystein Eftevaag  * @param[out] tcti The TSS2_TCTI_CONTEXT used to talk to the current TPM.
31*758e9fbaSOystein Eftevaag  *
32*758e9fbaSOystein Eftevaag  * @retval TSS2_RC_SUCCESS: if the function call was a success.
33*758e9fbaSOystein Eftevaag  * @retval TSS2_FAPI_RC_BAD_REFERENCE: if context, tcti is NULL.
34*758e9fbaSOystein Eftevaag  * @retval TSS2_FAPI_RC_BAD_CONTEXT: if context corruption is detected.
35*758e9fbaSOystein Eftevaag  * @retval TSS2_FAPI_RC_NO_TPM: if FAPI was started in non-TPM mode.
36*758e9fbaSOystein Eftevaag  */
37*758e9fbaSOystein Eftevaag TSS2_RC
Fapi_GetTcti(FAPI_CONTEXT * context,TSS2_TCTI_CONTEXT ** tcti)38*758e9fbaSOystein Eftevaag Fapi_GetTcti(
39*758e9fbaSOystein Eftevaag     FAPI_CONTEXT       *context,
40*758e9fbaSOystein Eftevaag     TSS2_TCTI_CONTEXT **tcti)
41*758e9fbaSOystein Eftevaag {
42*758e9fbaSOystein Eftevaag     LOG_TRACE("called for context:%p", context);
43*758e9fbaSOystein Eftevaag 
44*758e9fbaSOystein Eftevaag     TSS2_RC r;
45*758e9fbaSOystein Eftevaag 
46*758e9fbaSOystein Eftevaag     /* Check for NULL parameters */
47*758e9fbaSOystein Eftevaag     check_not_null(context);
48*758e9fbaSOystein Eftevaag     check_not_null(tcti);
49*758e9fbaSOystein Eftevaag 
50*758e9fbaSOystein Eftevaag     /* Check if FAPI was started in a non-TPM mode. */
51*758e9fbaSOystein Eftevaag     if (!context->esys)
52*758e9fbaSOystein Eftevaag         return_error(TSS2_FAPI_RC_NO_TPM, "Fapi is running in non-TPM mode");
53*758e9fbaSOystein Eftevaag 
54*758e9fbaSOystein Eftevaag     /* Retrieve the TCTI from ESYS. */
55*758e9fbaSOystein Eftevaag     r = Esys_GetTcti(context->esys, tcti);
56*758e9fbaSOystein Eftevaag     return_if_error(r, "Esys_GetTcti");
57*758e9fbaSOystein Eftevaag 
58*758e9fbaSOystein Eftevaag     LOG_DEBUG("finished");
59*758e9fbaSOystein Eftevaag     return r;
60*758e9fbaSOystein Eftevaag }
61