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