fal.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. /*
  2. * Copyright (c) 2006-2018, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2018-05-17 armink the first version
  9. */
  10. #ifndef _FAL_H_
  11. #define _FAL_H_
  12. #include <rtconfig.h>
  13. #include <fal_cfg.h>
  14. #include "fal_def.h"
  15. /**
  16. * FAL (Flash Abstraction Layer) initialization.
  17. * It will initialize all flash device and all flash partition.
  18. *
  19. * @return >= 0: partitions total number
  20. */
  21. int fal_init(void);
  22. /* =============== flash device operator API =============== */
  23. /**
  24. * find flash device by name
  25. *
  26. * @param name flash device name
  27. *
  28. * @return != NULL: flash device
  29. * NULL: not found
  30. */
  31. const struct fal_flash_dev *fal_flash_device_find(const char *name);
  32. /* =============== partition operator API =============== */
  33. /**
  34. * find the partition by name
  35. *
  36. * @param name partition name
  37. *
  38. * @return != NULL: partition
  39. * NULL: not found
  40. */
  41. const struct fal_partition *fal_partition_find(const char *name);
  42. /**
  43. * get the partition table
  44. *
  45. * @param len return the partition table length
  46. *
  47. * @return partition table
  48. */
  49. const struct fal_partition *fal_get_partition_table(size_t *len);
  50. /**
  51. * set partition table temporarily
  52. * This setting will modify the partition table temporarily, the setting will be lost after restart.
  53. *
  54. * @param table partition table
  55. * @param len partition table length
  56. */
  57. void fal_set_partition_table_temp(struct fal_partition *table, size_t len);
  58. /**
  59. * read data from partition
  60. *
  61. * @param part partition
  62. * @param addr relative address for partition
  63. * @param buf read buffer
  64. * @param size read size
  65. *
  66. * @return >= 0: successful read data size
  67. * -1: error
  68. */
  69. int fal_partition_read(const struct fal_partition *part, uint32_t addr, uint8_t *buf, size_t size);
  70. /**
  71. * write data to partition
  72. *
  73. * @param part partition
  74. * @param addr relative address for partition
  75. * @param buf write buffer
  76. * @param size write size
  77. *
  78. * @return >= 0: successful write data size
  79. * -1: error
  80. */
  81. int fal_partition_write(const struct fal_partition *part, uint32_t addr, const uint8_t *buf, size_t size);
  82. /**
  83. * erase partition data
  84. *
  85. * @param part partition
  86. * @param addr relative address for partition
  87. * @param size erase size
  88. *
  89. * @return >= 0: successful erased data size
  90. * -1: error
  91. */
  92. int fal_partition_erase(const struct fal_partition *part, uint32_t addr, size_t size);
  93. /**
  94. * erase partition all data
  95. *
  96. * @param part partition
  97. *
  98. * @return >= 0: successful erased data size
  99. * -1: error
  100. */
  101. int fal_partition_erase_all(const struct fal_partition *part);
  102. /**
  103. * print the partition table
  104. */
  105. void fal_show_part_table(void);
  106. /* =============== API provided to RT-Thread =============== */
  107. /**
  108. * create RT-Thread block device by specified partition
  109. *
  110. * @param parition_name partition name
  111. *
  112. * @return != NULL: created block device
  113. * NULL: created failed
  114. */
  115. struct rt_device *fal_blk_device_create(const char *parition_name);
  116. #if defined(RT_USING_MTD_NOR)
  117. /**
  118. * create RT-Thread MTD NOR device by specified partition
  119. *
  120. * @param parition_name partition name
  121. *
  122. * @return != NULL: created MTD NOR device
  123. * NULL: created failed
  124. */
  125. struct rt_device *fal_mtd_nor_device_create(const char *parition_name);
  126. #endif /* defined(RT_USING_MTD_NOR) */
  127. /**
  128. * create RT-Thread char device by specified partition
  129. *
  130. * @param parition_name partition name
  131. *
  132. * @return != NULL: created char device
  133. * NULL: created failed
  134. */
  135. struct rt_device *fal_char_device_create(const char *parition_name);
  136. #endif /* _FAL_H_ */