blkpart.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #ifndef __BLKPART_H__
  2. #define __BLKPART_H__
  3. #include <sys/types.h>
  4. #include <stdint.h>
  5. #include <rtthread.h>
  6. #include <log.h>
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif
  10. #ifdef SECTOR_SIZE
  11. #undef SECTOR_SIZE
  12. #endif
  13. #define SECTOR_SHIFT 9
  14. #define SECTOR_SIZE (1 << SECTOR_SHIFT)
  15. typedef enum
  16. {
  17. STORAGE_NAND =0,
  18. STORAGE_SDC0,
  19. STORAGE_SDC1,
  20. STORAGE_NOR,
  21. STORAGE_SDC2,
  22. STORAGE_SPI_NAND,
  23. }SUNXI_BOOT_STORAGE;
  24. struct part
  25. {
  26. /* public */
  27. #define BLKPART_OFF_APPEND UINT32_MAX
  28. uint64_t off;
  29. #define BLKPART_SIZ_FULL UINT32_MAX
  30. uint64_t bytes;
  31. #define MAX_BLKNAME_LEN 16
  32. char name[MAX_BLKNAME_LEN]; /* name: UDISK */
  33. /* private */
  34. char devname[MAX_BLKNAME_LEN]; /* name: nor0p1 */
  35. struct blkpart *blk;
  36. uint32_t n_part;
  37. uint32_t erase_flag;
  38. };
  39. struct blkpart
  40. {
  41. /* public */
  42. const char *name;
  43. uint64_t total_bytes;
  44. uint32_t blk_bytes;
  45. uint32_t page_bytes;
  46. int (*erase)(unsigned int, unsigned int);
  47. int (*program)(unsigned int, char *, unsigned int);
  48. int (*read)(unsigned int, char *, unsigned int);
  49. /* if no any partition, the follow can be NULL */
  50. struct part *parts;
  51. uint32_t n_parts;
  52. /* private */
  53. int blk_cnt;
  54. struct part root;
  55. struct blkpart *next;
  56. uint32_t n_blk;
  57. rt_device_t dev;
  58. };
  59. typedef enum BLOCK_DEVICE_CMD_T
  60. {
  61. BLOCK_DEVICE_CMD_ERASE_ALL = 0x00,
  62. BLOCK_DEVICE_CMD_ERASE_SECTOR,
  63. BLOCK_DEVICE_CMD_GET_TOTAL_SIZE,
  64. BLOCK_DEVICE_CMD_GET_PAGE_SIZE,
  65. BLOCK_DEVICE_CMD_GET_BLOCK_SIZE,
  66. BLOCK_DEVICE_CMD_NUM,
  67. } BLOCK_DEVICE_CMD;
  68. typedef enum DEVICE_PART_CMD_T
  69. {
  70. DEVICE_PART_CMD_ERASE_ALL = 0x00,
  71. DEVICE_PART_CMD_ERASE_SECTOR,
  72. DEVICE_PART_CMD_GET_TOTAL_SIZE,
  73. DEVICE_PART_CMD_GET_BLOCK_SIZE,
  74. DEVICE_PART_CMD_NUM,
  75. } DEVICE_PART_CMD;
  76. typedef struct _blk_dev_erase_t
  77. {
  78. uint32_t addr;
  79. uint32_t len;
  80. } blk_dev_erase_t;
  81. void del_blkpart(struct blkpart *blk);
  82. void blkpart_add_list(struct blkpart *blk);
  83. void blkpart_del_list(struct blkpart *blk);
  84. #define PARTINDEX_THE_LAST UINT32_MAX
  85. struct blkpart *get_blkpart_by_name(const char *name);
  86. struct part *get_part_by_index(const char *blk_name, uint32_t index);
  87. struct part *get_part_by_name(const char *name);
  88. #define PARTINDEX_THE_LAST UINT32_MAX
  89. struct part *get_part_by_name(const char *name);
  90. int remove_part_from_list(struct part *target_part);
  91. int add_part_to_list(struct part *target_part);
  92. int create_register_part(rt_device_t dev,
  93. const char *part_name,
  94. unsigned int part_offset,
  95. unsigned int part_bytes);
  96. int part_system_init(void);
  97. rt_size_t part_erase_before_write(rt_device_t dev, rt_off_t offset, const void *data, rt_size_t size);
  98. rt_size_t part_erase_without_write(rt_device_t dev, rt_off_t offset, const void *data, rt_size_t size);
  99. rt_size_t part_read(rt_device_t dev, rt_off_t offset, void *data, rt_size_t size);
  100. rt_err_t part_control(rt_device_t dev, int cmd, void *args);
  101. #ifdef __cplusplus
  102. }
  103. #endif
  104. #endif