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