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