summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2018-06-10 17:59:17 +0800
committerBernard Xiong <[email protected]>2018-06-10 17:59:17 +0800
commit884fb70fe9973eaf01a7df04941cbcb0475ba8d5 (patch)
tree7c8e3f42629e46b3d7ecb0c8507f67934d9fae47 /include
parentbca65f30a90857287dc1371ddbc8d5f165691c7f (diff)
[Kernel] Add device ops feature.
Diffstat (limited to 'include')
-rw-r--r--include/rtdef.h19
1 files changed, 17 insertions, 2 deletions
diff --git a/include/rtdef.h b/include/rtdef.h
index de243b7d5c..5f6f728967 100644
--- a/include/rtdef.h
+++ b/include/rtdef.h
@@ -848,6 +848,17 @@ enum rt_device_class_type
#define RT_DEVICE_CTRL_RTC_SET_ALARM 0x13 /**< set alarm */
typedef struct rt_device *rt_device_t;
+struct rt_device_ops
+{
+ /* common device interface */
+ rt_err_t (*init) (rt_device_t dev);
+ rt_err_t (*open) (rt_device_t dev, rt_uint16_t oflag);
+ rt_err_t (*close) (rt_device_t dev);
+ rt_size_t (*read) (rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size);
+ rt_size_t (*write) (rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size);
+ rt_err_t (*control)(rt_device_t dev, int cmd, void *args);
+};
+
/**
* Device structure
*/
@@ -866,6 +877,9 @@ struct rt_device
rt_err_t (*rx_indicate)(rt_device_t dev, rt_size_t size);
rt_err_t (*tx_complete)(rt_device_t dev, void *buffer);
+#ifdef RT_USING_DEVICE_OPS
+ const struct rt_device_ops *ops;
+#else
/* common device interface */
rt_err_t (*init) (rt_device_t dev);
rt_err_t (*open) (rt_device_t dev, rt_uint16_t oflag);
@@ -873,6 +887,7 @@ struct rt_device
rt_size_t (*read) (rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size);
rt_size_t (*write) (rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size);
rt_err_t (*control)(rt_device_t dev, int cmd, void *args);
+#endif
#if defined(RT_USING_POSIX)
const struct dfs_file_ops *fops;
@@ -1030,8 +1045,8 @@ struct rt_module
rt_uint32_t user_data; /**< arch data in the module */
- /* object in this module, module object is the last basic object type */
- struct rt_object_information module_object[RT_Object_Class_Unknown];
+ void (*module_init)(void);
+ void (*module_cleanup)(void);
};
typedef struct rt_module *rt_module_t;