xref: /aosp_15_r20/external/tpm2-tss/src/tss2-fapi/ifapi_io.h (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 #ifndef IFAPI_IO_H
8*758e9fbaSOystein Eftevaag #define IFAPI_IO_H
9*758e9fbaSOystein Eftevaag 
10*758e9fbaSOystein Eftevaag #include <stdio.h>
11*758e9fbaSOystein Eftevaag #include <stdbool.h>
12*758e9fbaSOystein Eftevaag #include "tss2_common.h"
13*758e9fbaSOystein Eftevaag #include "tss2_fapi.h"
14*758e9fbaSOystein Eftevaag 
15*758e9fbaSOystein Eftevaag typedef struct IFAPI_IO {
16*758e9fbaSOystein Eftevaag     FILE *stream;
17*758e9fbaSOystein Eftevaag     short pollevents;
18*758e9fbaSOystein Eftevaag     const char *char_buffer;
19*758e9fbaSOystein Eftevaag     char *char_rbuffer;
20*758e9fbaSOystein Eftevaag     size_t buffer_length;
21*758e9fbaSOystein Eftevaag     size_t buffer_idx;
22*758e9fbaSOystein Eftevaag } IFAPI_IO;
23*758e9fbaSOystein Eftevaag 
24*758e9fbaSOystein Eftevaag #ifdef TEST_FAPI_ASYNC
25*758e9fbaSOystein Eftevaag #define _IFAPI_IO_RETRIES 1
26*758e9fbaSOystein Eftevaag #else /* TEST_FAPI_ASYNC */
27*758e9fbaSOystein Eftevaag #define _IFAPI_IO_RETRIES 0
28*758e9fbaSOystein Eftevaag #endif /* TEST_FAPI_ASYNC */
29*758e9fbaSOystein Eftevaag 
30*758e9fbaSOystein Eftevaag static int _ifapi_io_retry __attribute__((unused)) = _IFAPI_IO_RETRIES;
31*758e9fbaSOystein Eftevaag 
32*758e9fbaSOystein Eftevaag #define IFAPI_IO_STREAM context->io.stream
33*758e9fbaSOystein Eftevaag #define IFAPI_IO_BUFF context->io.char_buffer
34*758e9fbaSOystein Eftevaag #define IFAPI_IO_RBUFF context->io.char_rbuffer
35*758e9fbaSOystein Eftevaag #define IFAPI_IO_BUFFLEN context->io.buffer_length
36*758e9fbaSOystein Eftevaag #define IFAPI_IO_BUFFIDX context->io.buffer_idx
37*758e9fbaSOystein Eftevaag 
38*758e9fbaSOystein Eftevaag TSS2_RC
39*758e9fbaSOystein Eftevaag ifapi_io_read_async(
40*758e9fbaSOystein Eftevaag     struct IFAPI_IO *io,
41*758e9fbaSOystein Eftevaag     const char *filename);
42*758e9fbaSOystein Eftevaag 
43*758e9fbaSOystein Eftevaag TSS2_RC
44*758e9fbaSOystein Eftevaag ifapi_io_read_finish(
45*758e9fbaSOystein Eftevaag     struct IFAPI_IO *io,
46*758e9fbaSOystein Eftevaag     uint8_t **buffer,
47*758e9fbaSOystein Eftevaag     size_t *length);
48*758e9fbaSOystein Eftevaag 
49*758e9fbaSOystein Eftevaag TSS2_RC
50*758e9fbaSOystein Eftevaag ifapi_io_write_async(
51*758e9fbaSOystein Eftevaag     struct IFAPI_IO *io,
52*758e9fbaSOystein Eftevaag     const char *filename,
53*758e9fbaSOystein Eftevaag     const uint8_t *buffer,
54*758e9fbaSOystein Eftevaag     size_t length);
55*758e9fbaSOystein Eftevaag 
56*758e9fbaSOystein Eftevaag TSS2_RC
57*758e9fbaSOystein Eftevaag ifapi_io_write_finish(
58*758e9fbaSOystein Eftevaag     struct IFAPI_IO *io);
59*758e9fbaSOystein Eftevaag 
60*758e9fbaSOystein Eftevaag TSS2_RC
61*758e9fbaSOystein Eftevaag ifapi_io_check_file_writeable(
62*758e9fbaSOystein Eftevaag     const char *file);
63*758e9fbaSOystein Eftevaag 
64*758e9fbaSOystein Eftevaag TSS2_RC
65*758e9fbaSOystein Eftevaag ifapi_io_check_create_dir(
66*758e9fbaSOystein Eftevaag     const char *dirname);
67*758e9fbaSOystein Eftevaag 
68*758e9fbaSOystein Eftevaag TSS2_RC
69*758e9fbaSOystein Eftevaag ifapi_io_remove_file(
70*758e9fbaSOystein Eftevaag     const char *file);
71*758e9fbaSOystein Eftevaag 
72*758e9fbaSOystein Eftevaag TSS2_RC
73*758e9fbaSOystein Eftevaag ifapi_io_remove_directories(
74*758e9fbaSOystein Eftevaag     const char *dirname);
75*758e9fbaSOystein Eftevaag 
76*758e9fbaSOystein Eftevaag TSS2_RC
77*758e9fbaSOystein Eftevaag ifapi_io_dirfiles(
78*758e9fbaSOystein Eftevaag     const char *dirname,
79*758e9fbaSOystein Eftevaag     char ***files,
80*758e9fbaSOystein Eftevaag     size_t *numfiles);
81*758e9fbaSOystein Eftevaag 
82*758e9fbaSOystein Eftevaag TSS2_RC
83*758e9fbaSOystein Eftevaag ifapi_io_dirfiles_all(
84*758e9fbaSOystein Eftevaag     const char *searchPath,
85*758e9fbaSOystein Eftevaag     char ***pathlist,
86*758e9fbaSOystein Eftevaag     size_t *numPaths);
87*758e9fbaSOystein Eftevaag 
88*758e9fbaSOystein Eftevaag bool
89*758e9fbaSOystein Eftevaag ifapi_io_path_exists(const char *path);
90*758e9fbaSOystein Eftevaag 
91*758e9fbaSOystein Eftevaag TSS2_RC
92*758e9fbaSOystein Eftevaag ifapi_io_poll(IFAPI_IO * io);
93*758e9fbaSOystein Eftevaag 
94*758e9fbaSOystein Eftevaag TSS2_RC
95*758e9fbaSOystein Eftevaag ifapi_io_poll_handles(IFAPI_IO *io, FAPI_POLL_HANDLE **handles, size_t *num_handles);
96*758e9fbaSOystein Eftevaag 
97*758e9fbaSOystein Eftevaag #endif /* IFAPI_IO_H */
98