blob: 5a50e215bd3cefc4ed7aec3d7145108a8323e874 [file] [log] [blame]
/*
* Copyright (c) 2023 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_LLEXT_BUF_LOADER_H
#define ZEPHYR_LLEXT_BUF_LOADER_H
#include <zephyr/llext/loader.h>
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief LLEXT buffer loader
* @defgroup llext_buf_loader Linkable loadable extensions buffer loader
* @ingroup llext
* @{
*/
/**
* @brief An extension loader from a provided buffer containing an ELF
*/
struct llext_buf_loader {
/** Extension loader */
struct llext_loader loader;
/** @cond ignore */
const uint8_t *buf;
size_t len;
size_t pos;
/** @endcond */
};
/** @cond ignore */
int llext_buf_read(struct llext_loader *ldr, void *buf, size_t len);
int llext_buf_seek(struct llext_loader *ldr, size_t pos);
void *llext_buf_peek(struct llext_loader *ldr, size_t pos);
/** @endcond */
/**
* @brief Initialize an extension buf loader
*
* @param _buf Buffer containing an ELF binary
* @param _buf_len Buffer length in bytes
*/
#define LLEXT_BUF_LOADER(_buf, _buf_len) \
{ \
.loader = { \
.read = llext_buf_read, \
.seek = llext_buf_seek, \
.peek = llext_buf_peek, \
}, \
.buf = (_buf), \
.len = (_buf_len), \
.pos = 0 \
}
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* ZEPHYR_LLEXT_BUF_LOADER_H */