driver.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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 __DRIVER_H__
  11. #define __DRIVER_H__
  12. #include <drivers/core/device.h>
  13. struct rt_driver
  14. {
  15. struct rt_bus *bus;
  16. rt_list_t node;
  17. #ifdef RT_USING_DEVICE_OPS
  18. const struct rt_device_ops *dev_ops;
  19. #else
  20. /* common device interface */
  21. rt_err_t (*init) (rt_device_t dev);
  22. rt_err_t (*open) (rt_device_t dev, rt_uint16_t oflag);
  23. rt_err_t (*close) (rt_device_t dev);
  24. rt_ssize_t (*read) (rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size);
  25. rt_ssize_t (*write) (rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size);
  26. rt_err_t (*control)(rt_device_t dev, int cmd, void *args);
  27. #endif
  28. const struct filesystem_ops *fops;
  29. const char *name;
  30. int (*probe)(struct rt_device *dev);
  31. int (*remove)(struct rt_device *dev);
  32. void *priv;
  33. };
  34. int rt_driver_probe_device(struct rt_driver *drv, struct rt_device *dev);
  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__ */