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 : .storage = LLEXT_STORAGE_TEMPORARY, \
61 : }, \
62 : .is_open = false, \
63 : .name = (_filename), \
64 : }
65 :
66 : /**
67 : * @}
68 : */
69 :
70 : #ifdef __cplusplus
71 : }
72 : #endif
73 :
74 : #endif /* ZEPHYR_LLEXT_FS_LOADER_H */
|