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 11 #ifndef __CORE_BUS_H__ 12 #define __CORE_BUS_H__ 13 14 #include <rthw.h> 15 #include <rtdef.h> 16 #include <drivers/core/driver.h> 17 18 typedef struct rt_bus *rt_bus_t; 19 20 struct rt_bus 21 { 22 struct rt_object parent; /**< inherit from rt_object */ 23 24 const char *name; 25 26 rt_list_t list; 27 rt_list_t dev_list; 28 rt_list_t drv_list; 29 30 struct rt_spinlock dev_lock; 31 struct rt_spinlock drv_lock; 32 33 rt_bool_t (*match)(rt_driver_t drv, rt_device_t dev); 34 rt_err_t (*probe)(rt_device_t dev); 35 rt_err_t (*remove)(rt_device_t dev); 36 rt_err_t (*shutdown)(rt_device_t dev); 37 }; 38 39 rt_err_t rt_bus_for_each_dev(rt_bus_t bus, void *data, int (*fn)(rt_device_t dev, void *)); 40 rt_err_t rt_bus_for_each_drv(rt_bus_t bus, void *data, int (*fn)(rt_driver_t drv, void *)); 41 42 rt_err_t rt_bus_add_driver(rt_bus_t bus, rt_driver_t drv); 43 rt_err_t rt_bus_add_device(rt_bus_t bus, rt_device_t dev); 44 rt_err_t rt_bus_remove_driver(rt_driver_t drv); 45 rt_err_t rt_bus_remove_device(rt_device_t dev); 46 47 rt_err_t rt_bus_shutdown(void); 48 49 rt_bus_t rt_bus_find_by_name(const char *name); 50 rt_err_t rt_bus_reload_driver_device(rt_bus_t new_bus, rt_device_t dev); 51 52 rt_err_t rt_bus_register(rt_bus_t bus); 53 54 #endif /* __BUS_H__ */ 55