diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/rtdef.h | 228 | ||||
| -rw-r--r-- | include/rthw.h | 40 | ||||
| -rw-r--r-- | include/rtthread.h | 60 |
3 files changed, 301 insertions, 27 deletions
diff --git a/include/rtdef.h b/include/rtdef.h index 8f2f39f701..4216a5fc48 100644 --- a/include/rtdef.h +++ b/include/rtdef.h @@ -153,6 +153,11 @@ typedef rt_base_t rt_off_t; /**< Type for offset */ #define RT_MB_ENTRY_MAX RT_UINT16_MAX /**< Maximum number of mailbox .entry */ #define RT_MQ_ENTRY_MAX RT_UINT16_MAX /**< Maximum number of message queue .entry */ +/* Common Utilities */ + +#define _RT_STRINGIFY(x...) #x +#define RT_STRINGIFY(x...) _RT_STRINGIFY(x) + #define RT_UNUSED(x) ((void)x) /* Compiler Related Definitions */ @@ -351,6 +356,7 @@ typedef int (*init_fn_t)(void); #define RT_EIO 8 /**< IO error */ #define RT_EINTR 9 /**< Interrupted system call */ #define RT_EINVAL 10 /**< Invalid argument */ +#define RT_ETRAP 11 /**< trap event */ /**@}*/ @@ -414,6 +420,11 @@ struct rt_object #ifdef RT_USING_MODULE void *module_id; /**< id of application module */ #endif /* RT_USING_MODULE */ + +#ifdef RT_USING_LWP + int lwp_ref_count; /**< ref count for lwp */ +#endif /* RT_USING_LWP */ + rt_list_t list; /**< list node of kernel object */ }; typedef struct rt_object *rt_object_t; /**< Type for kernel objects. */ @@ -450,7 +461,9 @@ enum rt_object_class_type RT_Object_Class_Timer = 0x0a, /**< The object is a timer. */ RT_Object_Class_Module = 0x0b, /**< The object is a module. */ RT_Object_Class_Memory = 0x0c, /**< The object is a memory. */ - RT_Object_Class_Unknown = 0x0e, /**< The object is unknown. */ + RT_Object_Class_Channel = 0x0d, /**< The object is a channel */ + RT_Object_Class_Custom = 0x0e, /**< The object is a custom object */ + RT_Object_Class_Unknown = 0x0f, /**< The object is unknown. */ RT_Object_Class_Static = 0x80 /**< The object is a static object. */ }; @@ -515,6 +528,10 @@ struct rt_object_information #define RT_TIMER_CTRL_SET_PERIODIC 0x3 /**< change timer to periodic */ #define RT_TIMER_CTRL_GET_STATE 0x4 /**< get timer run state active or deactive*/ #define RT_TIMER_CTRL_GET_REMAIN_TIME 0x5 /**< get the remaining hang time */ +#define RT_TIMER_CTRL_GET_FUNC 0x6 /**< get timer timeout func */ +#define RT_TIMER_CTRL_SET_FUNC 0x7 /**< set timer timeout func */ +#define RT_TIMER_CTRL_GET_PARM 0x8 /**< get timer parameter */ +#define RT_TIMER_CTRL_SET_PARM 0x9 /**< get timer parameter */ #ifndef RT_TIMER_SKIP_LIST_LEVEL #define RT_TIMER_SKIP_LIST_LEVEL 1 @@ -553,8 +570,14 @@ typedef unsigned long rt_sigset_t; typedef siginfo_t rt_siginfo_t; typedef void (*rt_sighandler_t)(int signo); - #define RT_SIG_MAX 32 + +#else + +#ifdef RT_USING_LWP +#include <sys/signal.h> +#endif + #endif /* RT_USING_SIGNALS */ /**@}*/ @@ -571,12 +594,30 @@ typedef void (*rt_sighandler_t)(int signo); /* * thread state definitions */ -#define RT_THREAD_INIT 0x00 /**< Initialized status */ -#define RT_THREAD_READY 0x01 /**< Ready status */ -#define RT_THREAD_SUSPEND 0x02 /**< Suspend status */ -#define RT_THREAD_RUNNING 0x03 /**< Running status */ -#define RT_THREAD_CLOSE 0x04 /**< Closed status */ -#define RT_THREAD_STAT_MASK 0x07 +#define RT_THREAD_INIT 0x00 /**< Initialized status */ +#define RT_THREAD_CLOSE 0x01 /**< Closed status */ +#define RT_THREAD_READY 0x02 /**< Ready status */ +#define RT_THREAD_RUNNING 0x03 /**< Running status */ + +/* + * for rt_thread_suspend_with_flag() + */ +enum +{ + RT_INTERRUPTIBLE = 0, + RT_KILLABLE, + RT_UNINTERRUPTIBLE, +}; + +#define RT_THREAD_SUSPEND_MASK 0x04 +#define RT_SIGNAL_COMMON_WAKEUP_MASK 0x02 +#define RT_SIGNAL_KILL_WAKEUP_MASK 0x01 + +#define RT_THREAD_SUSPEND_INTERRUPTIBLE (RT_THREAD_SUSPEND_MASK) /**< Suspend interruptable 0x4 */ +#define RT_THREAD_SUSPEND RT_THREAD_SUSPEND_INTERRUPTIBLE +#define RT_THREAD_SUSPEND_KILLABLE (RT_THREAD_SUSPEND_MASK | RT_SIGNAL_COMMON_WAKEUP_MASK) /**< Suspend with killable 0x6 */ +#define RT_THREAD_SUSPEND_UNINTERRUPTIBLE (RT_THREAD_SUSPEND_MASK | RT_SIGNAL_COMMON_WAKEUP_MASK | RT_SIGNAL_KILL_WAKEUP_MASK) /**< Suspend with uninterruptable 0x7 */ +#define RT_THREAD_STAT_MASK 0x07 #define RT_THREAD_STAT_YIELD 0x08 /**< indicate whether remaining_tick has been reloaded since last schedule */ #define RT_THREAD_STAT_YIELD_MASK RT_THREAD_STAT_YIELD @@ -634,6 +675,51 @@ struct rt_cpu #endif /* RT_USING_SMP */ +struct rt_thread; + +#ifdef RT_USING_LWP +typedef rt_err_t (*rt_wakeup_func_t)(void *object, struct rt_thread *thread); + +struct rt_wakeup +{ + rt_wakeup_func_t func; + void *user_data; +}; + +#define _LWP_NSIG 64 + +#ifdef ARCH_CPU_64BIT +#define _LWP_NSIG_BPW 64 +#else +#define _LWP_NSIG_BPW 32 +#endif + +#define _LWP_NSIG_WORDS (_LWP_NSIG / _LWP_NSIG_BPW) + +typedef void (*lwp_sighandler_t)(int); + +typedef struct { + unsigned long sig[_LWP_NSIG_WORDS]; +} lwp_sigset_t; + +struct lwp_sigaction { + union { + void (*_sa_handler)(int); + void (*_sa_sigaction)(int, siginfo_t *, void *); + } __sa_handler; + lwp_sigset_t sa_mask; + int sa_flags; + void (*sa_restorer)(void); +}; + +struct rt_user_context +{ + void *sp; + void *pc; + void *flag; +}; +#endif + /** * Thread structure */ @@ -648,6 +734,10 @@ struct rt_thread void *module_id; /**< id of application module */ #endif /* RT_USING_MODULE */ +#ifdef RT_USING_LWP + int lwp_ref_count; /**< ref count for lwp */ +#endif /* RT_USING_LWP */ + rt_list_t list; /**< the object list */ rt_list_t tlist; /**< the thread list */ @@ -704,6 +794,10 @@ struct rt_thread void *si_list; /**< the signal infor list */ #endif /* RT_USING_SIGNALS */ +#if defined(RT_USING_LWP) + void *msg_ret; /**< the return msg */ +#endif + rt_ubase_t init_tick; /**< thread's initialized tick */ rt_ubase_t remaining_tick; /**< remaining tick */ @@ -722,7 +816,35 @@ struct rt_thread /* light weight process if present */ #ifdef RT_USING_LWP void *lwp; -#endif /* RT_USING_LWP */ + /* for user create */ + void *user_entry; + void *user_stack; + rt_uint32_t user_stack_size; + rt_uint32_t *kernel_sp; /**< kernel stack point */ + rt_list_t sibling; /**< next thread of same process */ + + lwp_sigset_t signal; + lwp_sigset_t signal_mask; + int signal_mask_bak; + rt_uint32_t signal_in_process; +#ifndef ARCH_MM_MMU + lwp_sighandler_t signal_handler[32]; +#endif + struct rt_user_context user_ctx; + + struct rt_wakeup wakeup; /**< wakeup data */ + int exit_request; +#ifdef RT_USING_USERSPACE + int step_exec; + int debug_attach_req; + int debug_ret_user; + int debug_suspend; + struct rt_hw_exp_stack *regs; + void * thread_idr; /** lwp thread indicator */ + int *clear_child_tid; +#endif + int tid; +#endif rt_ubase_t user_data; /**< private user data beyond this thread */ }; @@ -744,6 +866,7 @@ typedef struct rt_thread *rt_thread_t; #define RT_IPC_CMD_UNKNOWN 0x00 /**< unknown IPC command */ #define RT_IPC_CMD_RESET 0x01 /**< reset IPC object */ +#define RT_IPC_CMD_GET_STATE 0x02 /**< get the state of IPC object */ #define RT_WAITING_FOREVER -1 /**< Block forever until get resource. */ #define RT_WAITING_NO 0 /**< Non-block. */ @@ -1001,6 +1124,7 @@ enum rt_device_class_type RT_Device_Class_DAC, /**< DAC device */ RT_Device_Class_WDT, /**< WDT device */ RT_Device_Class_PWM, /**< PWM device */ + RT_Device_Class_Bus, /**< Bus device */ RT_Device_Class_Unknown /**< unknown device */ }; @@ -1033,15 +1157,20 @@ enum rt_device_class_type /** * general device commands + * 0x01 - 0x1F general device control commands + * 0x20 - 0x3F udevice control commands + * 0x40 - special device control commands */ #define RT_DEVICE_CTRL_RESUME 0x01 /**< resume device */ #define RT_DEVICE_CTRL_SUSPEND 0x02 /**< suspend device */ #define RT_DEVICE_CTRL_CONFIG 0x03 /**< configure device */ #define RT_DEVICE_CTRL_CLOSE 0x04 /**< close device */ - -#define RT_DEVICE_CTRL_SET_INT 0x10 /**< set interrupt */ -#define RT_DEVICE_CTRL_CLR_INT 0x11 /**< clear interrupt */ -#define RT_DEVICE_CTRL_GET_INT 0x12 /**< get interrupt status */ +#define RT_DEVICE_CTRL_NOTIFY_SET 0x05 /**< set notify func */ +#define RT_DEVICE_CTRL_SET_INT 0x06 /**< set interrupt */ +#define RT_DEVICE_CTRL_CLR_INT 0x07 /**< clear interrupt */ +#define RT_DEVICE_CTRL_GET_INT 0x08 /**< get interrupt status */ +#define RT_DEVICE_CTRL_CONSOLE_OFLAG 0x09 /**< get console open flag */ +#define RT_DEVICE_CTRL_MASK 0x1f /**< mask for contrl commands */ /** * device control @@ -1051,12 +1180,17 @@ enum rt_device_class_type /** * special device commands */ +/* character device */ #define RT_DEVICE_CTRL_CHAR_STREAM (RT_DEVICE_CTRL_BASE(Char) + 1) /**< stream mode on char device */ +/* block device */ #define RT_DEVICE_CTRL_BLK_GETGEOME (RT_DEVICE_CTRL_BASE(Block) + 1) /**< get geometry information */ #define RT_DEVICE_CTRL_BLK_SYNC (RT_DEVICE_CTRL_BASE(Block) + 2) /**< flush data to block device */ #define RT_DEVICE_CTRL_BLK_ERASE (RT_DEVICE_CTRL_BASE(Block) + 3) /**< erase block on block device */ #define RT_DEVICE_CTRL_BLK_AUTOREFRESH (RT_DEVICE_CTRL_BASE(Block) + 4) /**< block device : enter/exit auto refresh mode */ +#define RT_DEVICE_CTRL_BLK_PARTITION (RT_DEVICE_CTRL_BASE(Block) + 5) /**< get block device partition */ +/* net interface device*/ #define RT_DEVICE_CTRL_NETIF_GETMAC (RT_DEVICE_CTRL_BASE(NetIf) + 1) /**< get mac address */ +/* mtd interface device*/ #define RT_DEVICE_CTRL_MTD_FORMAT (RT_DEVICE_CTRL_BASE(MTD) + 1) /**< format a MTD device */ typedef struct rt_device *rt_device_t; @@ -1093,7 +1227,10 @@ typedef struct rt_wqueue rt_wqueue_t; struct rt_device { struct rt_object parent; /**< inherit from rt_object */ - +#ifdef RT_USING_DM + struct rt_driver *drv; + void *dtb_node; +#endif enum rt_device_class_type type; /**< device type */ rt_uint16_t flag; /**< device flag */ rt_uint16_t open_flag; /**< device open flag */ @@ -1125,12 +1262,69 @@ struct rt_device void *user_data; /**< device private data */ }; +#define RT_DRIVER_MATCH_DTS (1<<0) +struct rt_device_id +{ + const char *compatible; + void *data; +}; + +struct rt_driver +{ +#ifdef RT_USING_DEVICE_OPS + const struct rt_device_ops *dev_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); + 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); +#endif + const struct filesystem_ops *fops; + const char *name; + enum rt_device_class_type dev_type; + int device_size; + int flag; + const struct rt_device_id *dev_match; + int (*probe)(struct rt_device *dev); + int (*probe_init)(struct rt_device *dev); + int (*remove)(struct rt_device *dev); + const void *ops; /* driver-specific operations */ + void *drv_priv_data; +}; +typedef struct rt_driver *rt_driver_t; + +/** + * Notify structure + */ +struct rt_device_notify +{ + void (*notify)(rt_device_t dev); + struct rt_device *dev; +}; + +#ifdef RT_USING_LWP +struct rt_channel +{ + struct rt_ipc_object parent; /**< inherit from object */ + struct rt_thread *reply; /**< the thread will be reply */ + rt_list_t wait_msg; /**< the wait queue of sender msg */ + rt_list_t wait_thread; /**< the wait queue of sender thread */ + rt_wqueue_t reader_queue; /**< channel poll queue */ + rt_uint8_t stat; /**< the status of this channel */ + rt_ubase_t ref; +}; +typedef struct rt_channel *rt_channel_t; +#endif + /** * block device geometry structure */ struct rt_device_blk_geometry { - rt_uint32_t sector_count; /**< count of sectors */ + rt_uint64_t sector_count; /**< count of sectors */ rt_uint32_t bytes_per_sector; /**< number of bytes per sector */ rt_uint32_t block_size; /**< number of bytes to erase one block */ }; @@ -1140,8 +1334,8 @@ struct rt_device_blk_geometry */ struct rt_device_blk_sectors { - rt_uint32_t sector_begin; /**< begin sector */ - rt_uint32_t sector_end; /**< end sector */ + rt_uint64_t sector_begin; /**< begin sector */ + rt_uint64_t sector_end; /**< end sector */ }; /** diff --git a/include/rthw.h b/include/rthw.h index b55d12e2a7..3c1e743279 100644 --- a/include/rthw.h +++ b/include/rthw.h @@ -12,6 +12,7 @@ * 2017-10-17 Hichard add some macros * 2018-11-17 Jesven add rt_hw_spinlock_t * add smp support + * 2019-05-18 Bernard add empty definition for not enable cache case */ #ifndef __RT_HW_H__ @@ -52,6 +53,7 @@ enum RT_HW_CACHE_OPS /* * CPU interfaces */ +#ifdef RT_USING_CACHE void rt_hw_cpu_icache_enable(void); void rt_hw_cpu_icache_disable(void); rt_base_t rt_hw_cpu_icache_status(void); @@ -61,6 +63,20 @@ void rt_hw_cpu_dcache_enable(void); void rt_hw_cpu_dcache_disable(void); rt_base_t rt_hw_cpu_dcache_status(void); void rt_hw_cpu_dcache_ops(int ops, void* addr, int size); +#else + +/* define cache ops as empty */ +#define rt_hw_cpu_icache_enable(...) +#define rt_hw_cpu_icache_disable(...) +#define rt_hw_cpu_icache_ops(...) +#define rt_hw_cpu_dcache_enable(...) +#define rt_hw_cpu_dcache_disable(...) +#define rt_hw_cpu_dcache_ops(...) + +#define rt_hw_cpu_icache_status(...) 0 +#define rt_hw_cpu_dcache_status(...) 0 + +#endif void rt_hw_cpu_reset(void); void rt_hw_cpu_shutdown(void); @@ -119,7 +135,7 @@ void rt_hw_context_switch_interrupt(void *context, rt_ubase_t from, rt_ubase_t t #else void rt_hw_context_switch(rt_ubase_t from, rt_ubase_t to); void rt_hw_context_switch_to(rt_ubase_t to); -void rt_hw_context_switch_interrupt(rt_ubase_t from, rt_ubase_t to); +void rt_hw_context_switch_interrupt(rt_ubase_t from, rt_ubase_t to, rt_thread_t from_thread, rt_thread_t to_thread); #endif /*RT_USING_SMP*/ void rt_hw_console_output(const char *str); @@ -138,13 +154,7 @@ void rt_hw_exception_install(rt_err_t (*exception_handle)(void *context)); void rt_hw_us_delay(rt_uint32_t us); #ifdef RT_USING_SMP -typedef union { - unsigned long slock; - struct __arch_tickets { - unsigned short owner; - unsigned short next; - } tickets; -} rt_hw_spinlock_t; +#include <cpuport.h> /* for spinlock from arch */ struct rt_spinlock { @@ -184,12 +194,22 @@ void rt_hw_secondary_cpu_up(void); void rt_hw_secondary_cpu_idle_exec(void); #else -#define RT_DEFINE_SPINLOCK(x) -#define RT_DECLARE_SPINLOCK(x) rt_ubase_t x +#define RT_DEFINE_SPINLOCK(x) rt_ubase_t x +#define RT_DECLARE_SPINLOCK(x) #define rt_hw_spin_lock(lock) *(lock) = rt_hw_interrupt_disable() #define rt_hw_spin_unlock(lock) rt_hw_interrupt_enable(*(lock)) +typedef int rt_spinlock_t; + +#endif + +#ifdef RT_USING_CACHE +#include <cpuport.h> +#else +#define rt_hw_isb() +#define rt_hw_dmb() +#define rt_hw_dsb() #endif #ifdef __cplusplus diff --git a/include/rtthread.h b/include/rtthread.h index 0360a72972..cf68859038 100644 --- a/include/rtthread.h +++ b/include/rtthread.h @@ -62,6 +62,12 @@ rt_bool_t rt_object_is_systemobject(rt_object_t object); rt_uint8_t rt_object_get_type(rt_object_t object); rt_object_t rt_object_find(const char *name, rt_uint8_t type); +#ifdef RT_USING_HEAP +/* custom object */ +rt_object_t rt_custom_object_create(const char *name, void *data, rt_err_t (*data_destroy)(void *)); +rt_err_t rt_custom_object_destroy(rt_object_t obj); +#endif + #ifdef RT_USING_HOOK void rt_object_attach_sethook(void (*hook)(struct rt_object *object)); void rt_object_detach_sethook(void (*hook)(struct rt_object *object)); @@ -158,7 +164,13 @@ rt_err_t rt_thread_delay_until(rt_tick_t *tick, rt_tick_t inc_tick); rt_err_t rt_thread_mdelay(rt_int32_t ms); rt_err_t rt_thread_control(rt_thread_t thread, int cmd, void *arg); rt_err_t rt_thread_suspend(rt_thread_t thread); +rt_err_t rt_thread_suspend_with_flag(rt_thread_t thread, int suspend_flag); rt_err_t rt_thread_resume(rt_thread_t thread); +#ifdef RT_USING_LWP +rt_err_t rt_thread_wakeup(rt_thread_t thread); +void rt_thread_wakeup_set(struct rt_thread *thread, rt_wakeup_func_t func, void* user_data); +#endif +void rt_thread_timeout(void *parameter); #ifdef RT_USING_SIGNALS void rt_thread_alloc_sig(rt_thread_t tid); @@ -202,6 +214,7 @@ void rt_scheduler_switch_sethook(void (*hook)(struct rt_thread *tid)); #endif #ifdef RT_USING_SMP +void rt_secondary_cpu_entry(void); void rt_scheduler_ipi_handler(int vector, void *param); #endif @@ -353,6 +366,8 @@ rt_err_t rt_sem_delete(rt_sem_t sem); #endif rt_err_t rt_sem_take(rt_sem_t sem, rt_int32_t timeout); +rt_err_t rt_sem_take_interruptible(rt_sem_t sem, rt_int32_t timeout); +rt_err_t rt_sem_take_killable(rt_sem_t sem, rt_int32_t timeout); rt_err_t rt_sem_trytake(rt_sem_t sem); rt_err_t rt_sem_release(rt_sem_t sem); rt_err_t rt_sem_control(rt_sem_t sem, int cmd, void *arg); @@ -374,6 +389,8 @@ rt_uint8_t rt_mutex_getprioceiling(rt_mutex_t mutex); rt_err_t rt_mutex_take(rt_mutex_t mutex, rt_int32_t timeout); rt_err_t rt_mutex_trytake(rt_mutex_t mutex); +rt_err_t rt_mutex_take_interruptible(rt_mutex_t mutex, rt_int32_t time); +rt_err_t rt_mutex_take_killable(rt_mutex_t mutex, rt_int32_t time); rt_err_t rt_mutex_release(rt_mutex_t mutex); rt_err_t rt_mutex_control(rt_mutex_t mutex, int cmd, void *arg); #endif @@ -395,6 +412,16 @@ rt_err_t rt_event_recv(rt_event_t event, rt_uint8_t opt, rt_int32_t timeout, rt_uint32_t *recved); +rt_err_t rt_event_recv_interruptible(rt_event_t event, + rt_uint32_t set, + rt_uint8_t opt, + rt_int32_t timeout, + rt_uint32_t *recved); +rt_err_t rt_event_recv_killable(rt_event_t event, + rt_uint32_t set, + rt_uint8_t opt, + rt_int32_t timeout, + rt_uint32_t *recved); rt_err_t rt_event_control(rt_event_t event, int cmd, void *arg); #endif @@ -417,8 +444,16 @@ rt_err_t rt_mb_send(rt_mailbox_t mb, rt_ubase_t value); rt_err_t rt_mb_send_wait(rt_mailbox_t mb, rt_ubase_t value, rt_int32_t timeout); +rt_err_t rt_mb_send_wait_interruptible(rt_mailbox_t mb, + rt_ubase_t value, + rt_int32_t timeout); +rt_err_t rt_mb_send_wait_killable(rt_mailbox_t mb, + rt_ubase_t value, + rt_int32_t timeout); rt_err_t rt_mb_urgent(rt_mailbox_t mb, rt_ubase_t value); rt_err_t rt_mb_recv(rt_mailbox_t mb, rt_ubase_t *value, rt_int32_t timeout); +rt_err_t rt_mb_recv_interruptibale(rt_mailbox_t mb, rt_ubase_t *value, rt_int32_t timeout); +rt_err_t rt_mb_recv_killable(rt_mailbox_t mb, rt_ubase_t *value, rt_int32_t timeout); rt_err_t rt_mb_control(rt_mailbox_t mb, int cmd, void *arg); #endif @@ -442,15 +477,33 @@ rt_err_t rt_mq_delete(rt_mq_t mq); #endif rt_err_t rt_mq_send(rt_mq_t mq, const void *buffer, rt_size_t size); +rt_err_t rt_mq_send_interrupt(rt_mq_t mq, const void *buffer, rt_size_t size); +rt_err_t rt_mq_send_killable(rt_mq_t mq, const void *buffer, rt_size_t size); rt_err_t rt_mq_send_wait(rt_mq_t mq, const void *buffer, rt_size_t size, rt_int32_t timeout); +rt_err_t rt_mq_send_wait_interruptible(rt_mq_t mq, + const void *buffer, + rt_size_t size, + rt_int32_t timeout); +rt_err_t rt_mq_send_wait_killable(rt_mq_t mq, + const void *buffer, + rt_size_t size, + rt_int32_t timeout); rt_err_t rt_mq_urgent(rt_mq_t mq, const void *buffer, rt_size_t size); rt_err_t rt_mq_recv(rt_mq_t mq, void *buffer, rt_size_t size, rt_int32_t timeout); +rt_err_t rt_mq_recv_interruptible(rt_mq_t mq, + void *buffer, + rt_size_t size, + rt_int32_t timeout); +rt_err_t rt_mq_recv_killable(rt_mq_t mq, + void *buffer, + rt_size_t size, + rt_int32_t timeout); rt_err_t rt_mq_control(rt_mq_t mq, int cmd, void *arg); #endif @@ -522,7 +575,14 @@ rt_size_t rt_device_write(rt_device_t dev, const void *buffer, rt_size_t size); rt_err_t rt_device_control(rt_device_t dev, int cmd, void *arg); +#ifdef RT_USING_DM +rt_err_t rt_device_bind_driver(rt_device_t device, rt_driver_t driver, void *node); +rt_device_t rt_device_create_since_driver(rt_driver_t drv,int device_id); +rt_err_t rt_device_probe_and_init(rt_device_t device); +rt_err_t rt_driver_match_with_id(const rt_driver_t drv,int device_id); +rt_err_t rt_driver_match_with_dtb(const rt_driver_t drv,void *from_node,int max_dev_num); +#endif /**@}*/ #endif |
