mtdnor.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /*
  2. * Copyright (c) 2006-2018, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. /*
  7. * File : mtdnor.c
  8. *
  9. * Change Logs:
  10. * Date Author Notes
  11. 2018-09-10 heyuanjie87 first version
  12. */
  13. #include <drivers/mtdnor.h>
  14. #ifdef MTD_USING_NOR
  15. static int _nor_erase(rt_mtd_t *mtd, loff_t addr, size_t len)
  16. {
  17. rt_nor_t *nor;
  18. nor = (rt_nor_t *)mtd;
  19. return nor->ops->erase(nor, addr, len);
  20. }
  21. static int _nor_read(rt_mtd_t *mtd, loff_t from, struct mtd_io_desc *desc)
  22. {
  23. rt_nor_t *nor;
  24. int ret;
  25. nor = (rt_nor_t *)mtd;
  26. ret = nor->ops->read(nor, from, desc->datbuf, desc->datlen);
  27. if (ret > 0)
  28. {
  29. desc->datretlen = ret;
  30. ret = 0;
  31. }
  32. return ret;
  33. }
  34. static int _nor_write(rt_mtd_t *mtd, loff_t to, struct mtd_io_desc *desc)
  35. {
  36. rt_nor_t *nor;
  37. int ret;
  38. nor = (rt_nor_t *)mtd;
  39. ret = nor->ops->write(nor, to, desc->datbuf, desc->datlen);
  40. if (ret > 0)
  41. {
  42. desc->datretlen = ret;
  43. ret = 0;
  44. }
  45. return ret;
  46. }
  47. static const struct mtd_ops _ops =
  48. {
  49. _nor_erase,
  50. _nor_read,
  51. _nor_write,
  52. 0,
  53. 0
  54. };
  55. int rt_mtd_nor_init(rt_nor_t *nor, int blksize)
  56. {
  57. nor->parent.sector_size = 1;
  58. nor->parent.block_size = blksize;
  59. nor->parent.ops = &_ops;
  60. nor->parent.type = MTD_TYPE_NOR;
  61. nor->parent.oob_size = 0;
  62. return 0;
  63. }
  64. #endif