nvmem.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. * Copyright (c) 2006-2023, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2023-02-25 GuEe-GUI the first version
  9. */
  10. #ifndef __NVMEM_H__
  11. #define __NVMEM_H__
  12. #include <ref.h>
  13. #include <drivers/ofw.h>
  14. #include <drivers/core/dm.h>
  15. #include <drivers/core/driver.h>
  16. struct rt_nvmem_device
  17. {
  18. struct rt_device parent;
  19. int cells_nr;
  20. rt_list_t cell_nodes;
  21. rt_ssize_t (*reg_read)(struct rt_nvmem_device *, int offset, void *val, rt_size_t bytes);
  22. rt_ssize_t (*reg_write)(struct rt_nvmem_device *, int offset, void *val, rt_size_t bytes);
  23. rt_ssize_t size;
  24. int word_size;
  25. int stride;
  26. rt_bool_t read_only;
  27. rt_bool_t ignore_wp;
  28. rt_base_t wp_pin;
  29. rt_uint8_t wp_pin_active;
  30. struct rt_ref ref;
  31. struct rt_spinlock spinlock;
  32. void *priv;
  33. };
  34. struct rt_nvmem_cell
  35. {
  36. rt_list_t list;
  37. int index;
  38. const char *id;
  39. const rt_bool_t free_able;
  40. rt_uint32_t offset;
  41. rt_uint32_t bytes;
  42. rt_uint32_t bit_offset;
  43. rt_uint32_t nbits;
  44. struct rt_ref ref;
  45. struct rt_ofw_node *np;
  46. struct rt_nvmem_device *nvmem;
  47. };
  48. rt_err_t rt_nvmem_device_register(struct rt_nvmem_device *ndev);
  49. rt_err_t rt_nvmem_device_unregister(struct rt_nvmem_device *ndev);
  50. rt_err_t rt_nvmem_device_append_cell(struct rt_nvmem_device *ndev, struct rt_nvmem_cell *cell);
  51. rt_ssize_t rt_nvmem_cell_read(struct rt_nvmem_cell *cell, void *buffer, rt_size_t len);
  52. rt_ssize_t rt_nvmem_cell_write(struct rt_nvmem_cell *cell, void *buffer, rt_size_t len);
  53. rt_ssize_t rt_nvmem_cell_read_u8(struct rt_nvmem_cell *cell, rt_uint8_t *out_val);
  54. rt_ssize_t rt_nvmem_cell_read_u16(struct rt_nvmem_cell *cell, rt_uint16_t *out_val);
  55. rt_ssize_t rt_nvmem_cell_read_u32(struct rt_nvmem_cell *cell, rt_uint32_t *out_val);
  56. rt_ssize_t rt_nvmem_cell_read_u64(struct rt_nvmem_cell *cell, rt_uint64_t *out_val);
  57. struct rt_nvmem_cell *rt_nvmem_get_cell_by_index(struct rt_device *dev, int index);
  58. struct rt_nvmem_cell *rt_nvmem_get_cell_by_name(struct rt_device *dev, const char *id);
  59. void rt_nvmem_put_cell(struct rt_nvmem_cell *cell);
  60. #endif /* __NVMEM_H__ */