Lines Matching refs:bypass
18 struct rt_serial_bypass_func* bypass; in rt_bypass_alloc_func() local
23 bypass = rt_malloc(sizeof(struct rt_serial_bypass_func)); in rt_bypass_alloc_func()
24 rt_memset(bypass, 0, sizeof(struct rt_serial_bypass_func)); in rt_bypass_alloc_func()
27 rt_memcpy(bypass->name, name, RT_NAME_MAX); in rt_bypass_alloc_func()
29 rt_memcpy(bypass->name, name, rt_strlen(name) + 1); in rt_bypass_alloc_func()
31 bypass->level = level; in rt_bypass_alloc_func()
33 rt_list_init(&bypass->node); in rt_bypass_alloc_func()
34 bypass->bypass = func; in rt_bypass_alloc_func()
35 bypass->data = data; in rt_bypass_alloc_func()
37 return bypass; in rt_bypass_alloc_func()
42 serial->bypass = rt_malloc(sizeof(struct rt_serial_bypass)); in rt_serial_bypass_init()
43 rt_memset(serial->bypass, 0, sizeof(struct rt_serial_bypass)); in rt_serial_bypass_init()
45 serial->bypass->pipe = rt_ringbuffer_create(serial->config.rx_bufsz); in rt_serial_bypass_init()
47 serial->bypass->pipe = rt_ringbuffer_create(serial->config.bufsz); in rt_serial_bypass_init()
49 serial->bypass->mutex = rt_mutex_create("serial_bypass", RT_IPC_FLAG_FIFO); in rt_serial_bypass_init()
54 static rt_err_t rt_bypass_register(struct rt_serial_bypass_head* bypass, const char* name, rt_uint8… in rt_bypass_register() argument
64 RT_ASSERT(bypass != RT_NULL); in rt_bypass_register()
66 node = bypass->head.next; in rt_bypass_register()
68 if (node == &bypass->head) in rt_bypass_register()
73 flags = rt_spin_lock_irqsave(&(bypass->spinlock)); in rt_bypass_register()
82 rt_spin_unlock_irqrestore(&(bypass->spinlock), flags); in rt_bypass_register()
87 rt_spin_unlock_irqrestore(&(bypass->spinlock), flags); in rt_bypass_register()
95 } while (node != &bypass->head); in rt_bypass_register()
97 rt_list_insert_before(&bypass->head, &pass->node); in rt_bypass_register()
99 rt_spin_unlock_irqrestore(&(bypass->spinlock), flags); in rt_bypass_register()
106 if (!serial->bypass) in rt_bypass_upper_register()
109 if (!serial->bypass->upper_h) in rt_bypass_upper_register()
111 serial->bypass->upper_h = rt_malloc(sizeof(struct rt_serial_bypass_head)); in rt_bypass_upper_register()
112 rt_spin_lock_init(&serial->bypass->upper_h->spinlock); in rt_bypass_upper_register()
113 rt_list_init(&serial->bypass->upper_h->head); in rt_bypass_upper_register()
117 return rt_bypass_register(serial->bypass->upper_h, name, level, func, data); in rt_bypass_upper_register()
124 rt_mutex_take(serial->bypass->mutex, RT_WAITING_FOREVER); in rt_bypass_putchar()
125 rt_ringbuffer_putchar(serial->bypass->pipe, ch); in rt_bypass_putchar()
126 rt_mutex_release(serial->bypass->mutex); in rt_bypass_putchar()
132 rt_mutex_take(serial->bypass->mutex, RT_WAITING_FOREVER); in rt_bypass_getchar()
133 flags = rt_ringbuffer_getchar(serial->bypass->pipe, ch); in rt_bypass_getchar()
134 rt_mutex_release(serial->bypass->mutex); in rt_bypass_getchar()
190 if (serial->bypass && serial->bypass->lower_h) in _lower_work()
198 node = serial->bypass->lower_h->head.next; in _lower_work()
200 while (node != &serial->bypass->lower_h->head) in _lower_work()
204 if (!temp_curr->bypass(serial, ch, temp_curr->data)) in _lower_work()
211 if (node == &serial->bypass->lower_h->head) in _lower_work()
231 if (!serial->bypass) in rt_bypass_lower_register()
234 if (!serial->bypass->lower_h) in rt_bypass_lower_register()
236 … serial->bypass->lower_workq = rt_workqueue_create("serial bypass", RT_SYSTEM_WORKQUEUE_STACKSIZE, in rt_bypass_lower_register()
238 rt_work_init(&serial->bypass->work, rt_lower_work, (void*)serial); in rt_bypass_lower_register()
240 serial->bypass->lower_h = rt_malloc(sizeof(struct rt_serial_bypass_head)); in rt_bypass_lower_register()
241 rt_spin_lock_init(&serial->bypass->lower_h->spinlock); in rt_bypass_lower_register()
242 rt_list_init(&serial->bypass->lower_h->head); in rt_bypass_lower_register()
246 return rt_bypass_register(serial->bypass->lower_h, name, level, func, data); in rt_bypass_lower_register()
251 if (serial->bypass && serial->bypass->lower_h) in rt_bypass_work_straight()
268 rt_err_t rt_bypass_unregister(struct rt_serial_bypass_head* bypass, rt_uint8_t level) in rt_bypass_unregister() argument
278 if (!bypass) in rt_bypass_unregister()
281 node = bypass->head.next; in rt_bypass_unregister()
282 flags = rt_spin_lock_irqsave(&(bypass->spinlock)); in rt_bypass_unregister()
290 rt_spin_unlock_irqrestore(&(bypass->spinlock), flags); in rt_bypass_unregister()
296 } while (node != &bypass->head); in rt_bypass_unregister()
299 rt_spin_unlock_irqrestore(&(bypass->spinlock), flags); in rt_bypass_unregister()
305 if (!serial->bypass || !serial->bypass->upper_h) in rt_bypass_upper_unregister()
307 return rt_bypass_unregister(serial->bypass->upper_h, level); in rt_bypass_upper_unregister()
312 if (!serial->bypass || !serial->bypass->lower_h) in rt_bypass_lower_unregister()
314 return rt_bypass_unregister(serial->bypass->lower_h, level); in rt_bypass_lower_unregister()
325 if (!serial || !serial->bypass) in serial_bypass_list()
332 if (serial->bypass->upper_h) in serial_bypass_list()
335 node = serial->bypass->upper_h->head.next; in serial_bypass_list()
337 flags = rt_spin_lock_irqsave(&(serial->bypass->upper_h->spinlock)); /* 加锁*/ in serial_bypass_list()
338 while (node != &serial->bypass->upper_h->head) in serial_bypass_list()
344 rt_spin_unlock_irqrestore(&(serial->bypass->upper_h->spinlock), flags); /* 解锁*/ in serial_bypass_list()
352 if (serial->bypass->lower_h) in serial_bypass_list()
355 node = serial->bypass->lower_h->head.next; in serial_bypass_list()
357 flags = rt_spin_lock_irqsave(&(serial->bypass->lower_h->spinlock)); /* 加锁*/ in serial_bypass_list()
358 while (node != &serial->bypass->lower_h->head) in serial_bypass_list()
364 rt_spin_unlock_irqrestore(&(serial->bypass->lower_h->spinlock), flags); /* 解锁*/ in serial_bypass_list()
375 MSH_CMD_EXPORT(serial_bypass_list, serial bypass list)