bus.h 1.4 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 __BUS_H__
  11. #define __BUS_H__
  12. #include <rthw.h>
  13. #include <drivers/core/device.h>
  14. #include <drivers/core/driver.h>
  15. typedef struct rt_bus *rt_bus_t;
  16. struct rt_bus
  17. {
  18. struct rt_object parent; /**< inherit from rt_object */
  19. char *name;
  20. struct rt_bus *bus;
  21. rt_list_t list;
  22. rt_list_t children;
  23. rt_list_t dev_list;
  24. rt_list_t drv_list;
  25. struct rt_spinlock spinlock;
  26. rt_bool_t (*match)(rt_driver_t drv, rt_device_t dev);
  27. rt_err_t (*probe)(rt_device_t dev);
  28. };
  29. rt_bus_t rt_bus_root(void);
  30. rt_err_t rt_bus_for_each_dev(rt_bus_t bus, rt_driver_t drv, int (*fn)(rt_driver_t drv, rt_device_t dev));
  31. rt_err_t rt_bus_for_each_drv(rt_bus_t bus, rt_device_t dev, int (*fn)(rt_driver_t drv, rt_device_t dev));
  32. rt_err_t rt_bus_add(rt_bus_t bus);
  33. rt_err_t rt_bus_add_driver(rt_bus_t bus, rt_driver_t drv);
  34. rt_err_t rt_bus_add_device(rt_bus_t bus, rt_device_t dev);
  35. rt_err_t rt_bus_remove_driver(rt_driver_t drv);
  36. rt_err_t rt_bus_remove_device(rt_device_t dev);
  37. rt_bus_t rt_bus_find_by_name(char *name);
  38. rt_err_t rt_bus_reload_driver_device(rt_bus_t new_bus, rt_device_t dev);
  39. rt_err_t rt_bus_register(rt_bus_t bus);
  40. #endif /* __BUS_H__ */