1 /* 2 * Copyright (c) 2023 Embedded Solutions GmbH 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef ZEPHYR_INCLUDE_DRIVERS_LOOPBACK_DISK_ACCESS_H_ 8 #define ZEPHYR_INCLUDE_DRIVERS_LOOPBACK_DISK_ACCESS_H_ 9 10 #include <zephyr/drivers/disk.h> 11 #include <zephyr/fs/fs_interface.h> 12 13 /** 14 * @brief Context object for an active loopback disk device 15 */ 16 struct loopback_disk_access { 17 struct disk_info info; 18 const char *file_path; 19 struct fs_file_t file; 20 size_t num_sectors; 21 }; 22 23 /** 24 * @brief Register a loopback disk device 25 * 26 * Registers a new loopback disk deviced backed by a file at the specified path. 27 * 28 * @details 29 * @p All parameters (ctx, file_path and disk_access_name) must point to data that will remain valid 30 * until the disk access is unregistered. This is trivially true for file_path and disk_access_name 31 * if they are string literals, but care must be taken for ctx, as well as for file_path and 32 * disk_access_name if they are constructed dynamically. 33 * 34 * @param ctx Preallocated context structure 35 * @param file_path Path to backing file 36 * @param disk_access_name Name of the created disk access (for disk_access_*() functions) 37 * 38 * @retval 0 on success; 39 * @retval <0 negative errno code, depending on file system of the backing file. 40 */ 41 int loopback_disk_access_register(struct loopback_disk_access *ctx, const char *file_path, 42 const char *disk_access_name); 43 44 /** 45 * @brief Unregister a previously registered loopback disk device 46 * 47 * Cleans up resources used by the disk access. 48 * 49 * @param ctx Context structure previously passed to a successful invocation of 50 * loopback_disk_access_register() 51 * 52 * @retval 0 on success; 53 * @retval <0 negative errno code, depending on file system of the backing file. 54 */ 55 int loopback_disk_access_unregister(struct loopback_disk_access *ctx); 56 57 #endif /* ZEPHYR_INCLUDE_DRIVERS_LOOPBACK_DISK_ACCESS_H_ */ 58