blob: 56bc2393d94d59a694420f6c98e9a94a7962e596 [file] [log] [blame]
/*
* Copyright (c) 2023 Embedded Solutions GmbH
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_INCLUDE_DRIVERS_LOOPBACK_DISK_ACCESS_H_
#define ZEPHYR_INCLUDE_DRIVERS_LOOPBACK_DISK_ACCESS_H_
#include <zephyr/drivers/disk.h>
#include <zephyr/fs/fs_interface.h>
/**
* @brief Context object for an active loopback disk device
*/
struct loopback_disk_access {
struct disk_info info;
const char *file_path;
struct fs_file_t file;
size_t num_sectors;
};
/**
* @brief Register a loopback disk device
*
* Registers a new loopback disk deviced backed by a file at the specified path.
*
* @details
* @p All parameters (ctx, file_path and disk_access_name) must point to data that will remain valid
* until the disk access is unregistered. This is trivially true for file_path and disk_access_name
* if they are string literals, but care must be taken for ctx, as well as for file_path and
* disk_access_name if they are constructed dynamically.
*
* @param ctx Preallocated context structure
* @param file_path Path to backing file
* @param disk_access_name Name of the created disk access (for disk_access_*() functions)
*
* @retval 0 on success;
* @retval <0 negative errno code, depending on file system of the backing file.
*/
int loopback_disk_access_register(struct loopback_disk_access *ctx, const char *file_path,
const char *disk_access_name);
/**
* @brief Unregister a previously registered loopback disk device
*
* Cleans up resources used by the disk access.
*
* @param ctx Context structure previously passed to a successful invocation of
* loopback_disk_access_register()
*
* @retval 0 on success;
* @retval <0 negative errno code, depending on file system of the backing file.
*/
int loopback_disk_access_unregister(struct loopback_disk_access *ctx);
#endif /* ZEPHYR_INCLUDE_DRIVERS_LOOPBACK_DISK_ACCESS_H_ */