Line data Source code
1 1 : /* 2 : * Copyright (c) 2024 BayLibre SAS 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : #ifndef ZEPHYR_LLEXT_FS_LOADER_H 8 : #define ZEPHYR_LLEXT_FS_LOADER_H 9 : 10 : #include <zephyr/llext/loader.h> 11 : #include <zephyr/fs/fs.h> 12 : 13 : #ifdef __cplusplus 14 : extern "C" { 15 : #endif 16 : 17 : /** 18 : * @file 19 : * @brief LLEXT filesystem loader implementation. 20 : * 21 : * @addtogroup llext_loader_apis 22 : * @{ 23 : */ 24 : 25 : /** 26 : * @brief Implementation of @ref llext_loader that reads from a filesystem. 27 : */ 28 1 : struct llext_fs_loader { 29 : /** Extension loader */ 30 1 : struct llext_loader loader; 31 : 32 : /** @cond ignore */ 33 : bool is_open; 34 : const char *name; 35 : struct fs_file_t file; 36 : /** @endcond */ 37 : }; 38 : 39 : /** @cond ignore */ 40 : int llext_fs_prepare(struct llext_loader *ldr); 41 : int llext_fs_read(struct llext_loader *ldr, void *buf, size_t len); 42 : int llext_fs_seek(struct llext_loader *ldr, size_t pos); 43 : void llext_fs_finalize(struct llext_loader *ldr); 44 : /** @endcond */ 45 : 46 : /** 47 : * @brief Initializer for an llext_fs_loader structure 48 : * 49 : * @param _filename Absolute path to the extension file. 50 : */ 51 1 : #define LLEXT_FS_LOADER(_filename) \ 52 : { \ 53 : .loader = \ 54 : { \ 55 : .prepare = llext_fs_prepare, \ 56 : .read = llext_fs_read, \ 57 : .seek = llext_fs_seek, \ 58 : .peek = NULL, \ 59 : .finalize = llext_fs_finalize, \ 60 : }, \ 61 : .is_open = false, \ 62 : .name = (_filename), \ 63 : } 64 : 65 : /** 66 : * @} 67 : */ 68 : 69 : #ifdef __cplusplus 70 : } 71 : #endif 72 : 73 : #endif /* ZEPHYR_LLEXT_FS_LOADER_H */