blk.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /*
  2. * Copyright (c) 2006-2022, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2023-02-25 GuEe-GUI first version
  9. */
  10. #ifndef __BLK_H__
  11. #define __BLK_H__
  12. #include <rthw.h>
  13. #include <rtthread.h>
  14. #include <drivers/classes/block.h>
  15. struct rt_dm_ida;
  16. struct rt_blk_device;
  17. struct rt_blk_disk_ops;
  18. struct rt_blk_disk
  19. {
  20. struct rt_device parent;
  21. const struct rt_blk_disk_ops *ops;
  22. #ifdef RT_USING_DM
  23. struct rt_dm_ida *ida;
  24. #endif
  25. rt_uint32_t read_only:1;
  26. rt_uint32_t parallel_io:1;
  27. rt_uint32_t removable:1;
  28. #define RT_BLK_DISK_MAGIC 0xbdaabdaa
  29. rt_uint32_t __magic;
  30. rt_uint32_t partitions;
  31. #define RT_BLK_PARTITION_NONE (-1)
  32. #define RT_BLK_PARTITION_MAX (RT_UINT32_MAX >> 1)
  33. rt_int32_t max_partitions;
  34. rt_list_t part_nodes;
  35. struct rt_spinlock lock;
  36. struct rt_semaphore usr_lock;
  37. };
  38. struct rt_blk_disk_ops
  39. {
  40. rt_ssize_t (*read)(struct rt_blk_disk *disk, rt_off_t sector, void *buffer,
  41. rt_size_t sector_count);
  42. rt_ssize_t (*write)(struct rt_blk_disk *disk, rt_off_t sector, const void *buffer,
  43. rt_size_t sector_count);
  44. rt_err_t (*getgeome)(struct rt_blk_disk *disk, struct rt_device_blk_geometry *geometry);
  45. rt_err_t (*sync)(struct rt_blk_disk *disk);
  46. rt_err_t (*erase)(struct rt_blk_disk *disk);
  47. rt_err_t (*autorefresh)(struct rt_blk_disk *disk, rt_bool_t is_auto);
  48. rt_err_t (*control)(struct rt_blk_disk *disk, struct rt_blk_device *blk, int cmd, void *args);
  49. };
  50. #ifndef __DFS_H__
  51. #include <dfs_fs.h>
  52. struct rt_blk_device
  53. {
  54. struct rt_device parent;
  55. int partno;
  56. struct dfs_partition partition;
  57. rt_list_t list;
  58. struct rt_blk_disk *disk;
  59. rt_size_t sector_start;
  60. rt_size_t sector_count;
  61. };
  62. #else
  63. struct rt_blk_device;
  64. #endif /* __DFS_H__ */
  65. rt_err_t rt_hw_blk_disk_register(struct rt_blk_disk *disk);
  66. rt_err_t rt_hw_blk_disk_unregister(struct rt_blk_disk *disk);
  67. rt_err_t rt_blk_disk_probe_partition(struct rt_blk_disk *disk);
  68. rt_ssize_t rt_blk_disk_get_capacity(struct rt_blk_disk *disk);
  69. rt_ssize_t rt_blk_disk_get_logical_block_size(struct rt_blk_disk *disk);
  70. #endif /* __BLK_H__ */