driver.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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-04-12 ErikChan the first version
  9. */
  10. #ifndef __CORE_DRIVER_H__
  11. #define __CORE_DRIVER_H__
  12. #include <rtdef.h>
  13. struct rt_driver
  14. {
  15. struct rt_object parent;
  16. struct rt_bus *bus;
  17. rt_list_t node;
  18. rt_uint32_t ref_count;
  19. #ifdef RT_USING_DEVICE_OPS
  20. const struct rt_device_ops *dev_ops;
  21. #else
  22. /* common device interface */
  23. rt_err_t (*init) (rt_device_t dev);
  24. rt_err_t (*open) (rt_device_t dev, rt_uint16_t oflag);
  25. rt_err_t (*close) (rt_device_t dev);
  26. rt_ssize_t (*read) (rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size);
  27. rt_ssize_t (*write) (rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size);
  28. rt_err_t (*control)(rt_device_t dev, int cmd, void *args);
  29. #endif
  30. const struct filesystem_ops *fops;
  31. int (*probe)(struct rt_device *dev);
  32. int (*remove)(struct rt_device *dev);
  33. int (*shutdown)(struct rt_device *dev);
  34. };
  35. rt_err_t rt_driver_register(rt_driver_t drv);
  36. rt_err_t rt_driver_unregister(rt_driver_t drv);
  37. #define RT_DRIVER_EXPORT(driver, bus_name, mode) \
  38. static int ___##driver##_register(void) \
  39. { \
  40. rt_##bus_name##_driver_register(&driver); \
  41. return 0; \
  42. } \
  43. INIT_DEVICE_EXPORT(___##driver##_register); \
  44. #endif /* __DRIVER_H__ */