| .\" Process this file with |
| .\" groff -man -Tascii foo.1 |
| .\" |
| .TH Tss2_Tcti_Device_Init 3 "MARCH 2018" Intel "TPM2 Software Stack" |
| .SH NAME |
| Tss2_Tcti_Device_init \- Initialization function for the device TCTI library. |
| .SH SYNOPSIS |
| .B #include <tcti/tcti_device.h> |
| .sp |
| .sp |
| .BI "TSS2_RC Tss2_Tcti_Device_Init (TSS2_TCTI_CONTEXT " "*tctiContext" ", size_t " "*size" ", const char " "*conf" ");" |
| .sp |
| The |
| .BR Tss2_Tcti_Device_Init () |
| function initializes a TCTI context used to communicate with the TPM device |
| driver. |
| .SH DESCRIPTION |
| .BR Tss2_Tcti_Device_Init () |
| attempts to initialize a caller allocated |
| .I tctiContext |
| of size |
| .I size |
| \&. Since the |
| .I tctiContext |
| must be a caller allocated buffer, the caller needs to know the size required |
| by the TCTI library. The minimum size of this context can be discovered by |
| providing |
| .BR NULL |
| for the |
| .I tctiContext |
| and a non- |
| .BR NULL |
| .I size |
| parameter. The initialization function will then populate the |
| .I size |
| parameter with the minimum size of the |
| .I tctiContext |
| buffer. The caller must then allocate a buffer of this size (or larger) and |
| call |
| .B Tss2_Tcti_Device_Init () |
| again providing the newly allocated |
| .I tctiContext |
| and the size of this context in the |
| .I size |
| parameter. This pattern is common to all TCTI initialization functions. We |
| provide an example of this pattern using the |
| .BR Tss2_Tcti_Device_Init () |
| function in the section titled |
| .B EXAMPLE. |
| .sp |
| The |
| .I conf |
| parameter is a C string. If this string is |
| .BR NULL |
| then the library will use a default configuration string for the caller. |
| Alternatively, the caller may provide a configuration string that must |
| contain the path to the device node exposed by the TPM device driver. |
| .sp |
| Once initialized, the TCTI context returned exposes the Trusted Computing |
| Group (TCG) defined API for the lowest level communication with the TPM. |
| Using this API the caller can exchange (send / receive) TPM2 command and |
| response buffers with the TPM device driver. In nearly all cases however, the |
| caller will initialize a context using this function before passing the |
| context to a higher level API like the System API (SAPI), and then never touch |
| it again. |
| .sp |
| TCG TSS 2.0 TPM Command |
| Transmission Interface (TCTI) API |
| Specification |
| |
| For a more thorough discussion of the TCTI API see the \*(lqTCG TSS 2.0 TPM Command |
| Transmission Interface (TCTI) API Specification\*(rq as published by |
| the TCG: |
| \%https://trustedcomputinggroup.org/wp-content/uploads/TSS_TCTI_Version-1.0_Revision-05_Review_END030918.pdf |
| .SH RETURN VALUE |
| A successful call to |
| .BR Tss2_Tcti_Device_Init () |
| will return |
| .B TSS2_RC_SUCCESS. |
| An unsuccessful call will produce a response code described in section |
| .B ERRORS. |
| .SH ERRORS |
| .B TSS2_TCTI_RC_BAD_VALUE |
| is returned if any parameters contain unexpected values. |
| .B TSS2_TCTI_RC_BAD_REFERENCE |
| is returned if any parameters are NULL when they should not be. |
| .B TSS2_TCTI_RC_BAD_CONTEXT |
| is returned if the size of the provided |
| .i tctiContext |
| is insufficient. |
| .SH EXAMPLE |
| TCTI initialization fragment: |
| .sp |
| .nf |
| #include <inttypes.h> |
| #include <stdlib.h> |
| #include <stdio.h> |
| #include <tcti/tcti_device.h> |
| |
| TSS2_RC rc; |
| TSS2_TCTI_CONTEXT *tcti_context; |
| size_t size; |
| char *conf = "/dev/tpm0", |
| |
| rc = Tss2_Tcti_Device_Init (NULL, &size, NULL); |
| if (rc != TSS2_RC_SUCCESS) { |
| fprintf (stderr, "Failed to get allocation size for device TCTI " |
| " context: 0x%" PRIx32 "\n", rc); |
| exit (EXIT_FAILURE); |
| } |
| tcti_context = calloc (1, size); |
| if (tcti_context == NULL) { |
| fprintf (stderr, "Allocation for TCTI context failed: %s\n", |
| strerror (errno)); |
| exit (EXIT_FAILURE); |
| } |
| rc = Tss2_Tcti_Device_Init (&tcti_context, &size, &conf); |
| if (rc != TSS2_RC_SUCCESS) { |
| fprintf (stderr, "Failed to initialize device TCTI context: " |
| "0x%" PRIx32 "\n", rc); |
| free (tcti_context); |
| exit (EXIT_FAILURE); |
| } |
| exit (EXIT_SUCCESS); |
| .fi |