dfs_cache.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #ifndef __DFS_CACHE_H__
  2. #define __DFS_CACHE_H__
  3. #include <rtthread.h>
  4. #define IOMAN_STATUS_ATTR_VALIDDATA 0
  5. #define IOMAN_STATUS_ATTR_USERBUFFER 1
  6. #define IOMAN_STATUS_ATTR_WRITE 2
  7. #define IOM_MODE_READONLY 1
  8. #define IOM_MODE_READWRITE 2
  9. #define IOM_MODE_EXP_REQ 4
  10. #define DFS_SECTOR_SIZE 512
  11. struct _IOManager
  12. {
  13. rt_device_t device;
  14. rt_uint8_t numbuf;
  15. rt_uint32_t sector[DFS_CACHE_MAX_NUM];
  16. rt_uint8_t status[DFS_CACHE_MAX_NUM];
  17. rt_uint8_t usage [DFS_CACHE_MAX_NUM];
  18. /* cache FIFO */
  19. rt_uint8_t ring_fifo[DFS_CACHE_MAX_NUM];
  20. /* cache buffer */
  21. rt_uint8_t cache[DFS_CACHE_MAX_NUM][DFS_SECTOR_SIZE];
  22. };
  23. typedef struct _IOManager IOManager;
  24. rt_err_t ioman_init(IOManager* ioman);
  25. rt_uint8_t* ioman_getSector(IOManager *ioman, rt_uint32_t address, rt_uint8_t mode);
  26. rt_err_t ioman_releaseSector(IOManager *ioman, rt_uint8_t* buf);
  27. rt_err_t ioman_flushRange(IOManager *ioman, rt_uint32_t address_low, rt_uint32_t address_high);
  28. rt_err_t ioman_directSectorRead(IOManager *ioman, rt_uint32_t address, rt_uint8_t* buf, rt_uint32_t numsector);
  29. rt_err_t ioman_directSectorWrite(IOManager *ioman, rt_uint32_t address, rt_uint8_t* buf, rt_uint32_t numsector);
  30. #endif