mtdnor.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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-09-10 heyuanjie87 first version
  9. */
  10. #include <drivers/mtdnor.h>
  11. #ifdef MTD_USING_NOR
  12. static int _nor_erase(rt_mtd_t *mtd, loff_t addr, size_t len)
  13. {
  14. rt_nor_t *nor;
  15. nor = (rt_nor_t *)mtd;
  16. return nor->ops->erase(nor, addr, len);
  17. }
  18. static int _nor_read(rt_mtd_t *mtd, loff_t from, struct mtd_io_desc *desc)
  19. {
  20. rt_nor_t *nor;
  21. int ret;
  22. nor = (rt_nor_t *)mtd;
  23. ret = nor->ops->read(nor, from, desc->datbuf, desc->datlen);
  24. if (ret > 0)
  25. {
  26. desc->datretlen = ret;
  27. ret = 0;
  28. }
  29. return ret;
  30. }
  31. static int _nor_write(rt_mtd_t *mtd, loff_t to, struct mtd_io_desc *desc)
  32. {
  33. rt_nor_t *nor;
  34. int ret;
  35. nor = (rt_nor_t *)mtd;
  36. ret = nor->ops->write(nor, to, desc->datbuf, desc->datlen);
  37. if (ret > 0)
  38. {
  39. desc->datretlen = ret;
  40. ret = 0;
  41. }
  42. return ret;
  43. }
  44. static const struct mtd_ops _ops =
  45. {
  46. _nor_erase,
  47. _nor_read,
  48. _nor_write,
  49. 0,
  50. 0
  51. };
  52. int rt_mtd_nor_init(rt_nor_t *nor, int blksize)
  53. {
  54. nor->parent.sector_size = 1;
  55. nor->parent.block_size = blksize;
  56. nor->parent.ops = &_ops;
  57. nor->parent.type = MTD_TYPE_NOR;
  58. nor->parent.oob_size = 0;
  59. return 0;
  60. }
  61. #endif