summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/rtdef.h228
-rw-r--r--include/rthw.h40
-rw-r--r--include/rtthread.h60
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