| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- /*
- * Copyright (c) 2006-2025 RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Notes
- * 2023-02-25 GuEe-GUI first version
- * 2025-01-24 wumingzi add doxygen comment
- */
- #ifndef __BLK_H__
- #define __BLK_H__
- #include <rthw.h>
- #include <rtthread.h>
- #include <drivers/classes/block.h>
- /**
- * @defgroup group_blk blk
- * @brief blk driver api
- * @ingroup group_device_driver
- * @addtogroup group_blk
- * @{
- */
- struct rt_dm_ida;
- struct rt_blk_device;
- struct rt_blk_disk_ops;
- /**
- * @brief Physical blk device
- */
- struct rt_blk_disk
- {
- struct rt_device parent;
- const struct rt_blk_disk_ops *ops;
- #ifdef RT_USING_DM
- struct rt_dm_ida *ida;
- #endif
- rt_uint32_t read_only:1;
- rt_uint32_t parallel_io:1;
- rt_uint32_t removable:1;
- #define RT_BLK_DISK_MAGIC 0xbdaabdaa
- rt_uint32_t __magic;
- rt_uint32_t partitions;
- #define RT_BLK_PARTITION_NONE (-1)
- #define RT_BLK_PARTITION_MAX (RT_UINT32_MAX >> 1)
- rt_int32_t max_partitions;
- rt_list_t part_nodes;
- struct rt_spinlock lock;
- struct rt_semaphore usr_lock;
- };
- /**
- * @brief Configure the blk device.
- */
- struct rt_blk_disk_ops
- {
- rt_ssize_t (*read)(struct rt_blk_disk *disk, rt_off_t sector, void *buffer,
- rt_size_t sector_count);
- rt_ssize_t (*write)(struct rt_blk_disk *disk, rt_off_t sector, const void *buffer,
- rt_size_t sector_count);
- rt_err_t (*getgeome)(struct rt_blk_disk *disk, struct rt_device_blk_geometry *geometry);
- rt_err_t (*sync)(struct rt_blk_disk *disk);
- rt_err_t (*erase)(struct rt_blk_disk *disk);
- rt_err_t (*autorefresh)(struct rt_blk_disk *disk, rt_bool_t is_auto);
- rt_err_t (*control)(struct rt_blk_disk *disk, struct rt_blk_device *blk, int cmd, void *args);
- };
- #ifndef __DFS_H__
- #include <dfs_fs.h>
- /**
- * @brief Logical blk device, if you don't used DFS it will be defined by default.
- */
- struct rt_blk_device
- {
- struct rt_device parent;
- int partno;
- struct dfs_partition partition;
- rt_list_t list;
- struct rt_blk_disk *disk;
- rt_size_t sector_start;
- rt_size_t sector_count;
- };
- #else
- struct rt_blk_device;
- #endif /* __DFS_H__ */
- /**
- * @brief Register the blk disk device
- * @param disk Point to blk disk
- * @return rt_err_t error code
- */
- rt_err_t rt_hw_blk_disk_register(struct rt_blk_disk *disk);
- /**
- * @brief Unregister the blk disk device
- * @param disk Point to blk disk
- * @return rt_err_t error code
- */
- rt_err_t rt_hw_blk_disk_unregister(struct rt_blk_disk *disk);
- /**
- * @brief Probe and register the blk disk partition
- * @param disk Point to blk disk
- * @return rt_err_t error code
- */
- rt_err_t rt_blk_disk_probe_partition(struct rt_blk_disk *disk);
- /**
- * @brief Get the blk disk capacity
- * @param disk Point to blk disk
- * @return rt_ssize_t sector count or error code
- */
- rt_ssize_t rt_blk_disk_get_capacity(struct rt_blk_disk *disk);
- /**
- * @brief Get the sector size
- * @param disk Point to blk disk
- * @return rt_ssize_t bytes per sector or error code
- */
- rt_ssize_t rt_blk_disk_get_logical_block_size(struct rt_blk_disk *disk);
- /*! @}*/
- #endif /* __BLK_H__ */
|