1 /*
2 * Copyright (c) 2022, sakumisu
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6 #include "usb_osal.h"
7 #include "usb_errno.h"
8 #include <aos/kernel.h>
9 #include <csi_core.h>
10
usb_osal_thread_create(const char * name,uint32_t stack_size,uint32_t prio,usb_thread_entry_t entry,void * args)11 usb_osal_thread_t usb_osal_thread_create(const char *name, uint32_t stack_size, uint32_t prio, usb_thread_entry_t entry, void *args)
12 {
13 aos_task_t task_handle = NULL;
14
15 aos_task_new_ext(&task_handle, name, entry, args, stack_size, prio + AOS_DEFAULT_APP_PRI - 4);
16
17 return task_handle;
18 }
19
usb_osal_thread_delete(usb_osal_thread_t thread)20 void usb_osal_thread_delete(usb_osal_thread_t thread)
21 {
22 aos_task_exit(0);
23 }
24
usb_osal_sem_create(uint32_t initial_count)25 usb_osal_sem_t usb_osal_sem_create(uint32_t initial_count)
26 {
27 aos_sem_t sem = NULL;
28
29 aos_sem_new(&sem, initial_count);
30
31 return sem;
32 }
33
usb_osal_sem_delete(usb_osal_sem_t sem)34 void usb_osal_sem_delete(usb_osal_sem_t sem)
35 {
36 aos_sem_free((aos_sem_t *)&sem);
37 }
38
usb_osal_sem_take(usb_osal_sem_t sem,uint32_t timeout)39 int usb_osal_sem_take(usb_osal_sem_t sem, uint32_t timeout)
40 {
41 if (timeout == USB_OSAL_WAITING_FOREVER) {
42 return aos_sem_wait((aos_sem_t *)&sem, AOS_WAIT_FOREVER);
43 } else {
44 return aos_sem_wait((aos_sem_t *)&sem, timeout);
45 }
46 }
47
usb_osal_sem_give(usb_osal_sem_t sem)48 int usb_osal_sem_give(usb_osal_sem_t sem)
49 {
50 aos_sem_signal((aos_sem_t *)&sem);
51 return 0;
52 }
53
usb_osal_mutex_create(void)54 usb_osal_mutex_t usb_osal_mutex_create(void)
55 {
56 aos_mutex_t mutex = NULL;
57
58 aos_mutex_new(&mutex);
59
60 return (usb_osal_mutex_t)mutex;
61 }
62
usb_osal_mutex_delete(usb_osal_mutex_t mutex)63 void usb_osal_mutex_delete(usb_osal_mutex_t mutex)
64 {
65 aos_mutex_free(((aos_mutex_t *)&mutex));
66 }
67
usb_osal_mutex_take(usb_osal_mutex_t mutex)68 int usb_osal_mutex_take(usb_osal_mutex_t mutex)
69 {
70 return aos_mutex_lock(((aos_mutex_t *)&mutex), AOS_WAIT_FOREVER);
71 }
72
usb_osal_mutex_give(usb_osal_mutex_t mutex)73 int usb_osal_mutex_give(usb_osal_mutex_t mutex)
74 {
75 return aos_mutex_unlock(((aos_mutex_t *)&mutex));
76 }
77
usb_osal_mq_create(uint32_t max_msgs)78 usb_osal_mq_t usb_osal_mq_create(uint32_t max_msgs)
79 {
80 aos_queue_t queue = NULL;
81
82 aos_queue_create(&queue, sizeof(uintptr_t), max_msgs, 0);
83
84 return (usb_osal_mq_t)queue;
85 }
86
usb_osal_mq_send(usb_osal_mq_t mq,uintptr_t addr)87 int usb_osal_mq_send(usb_osal_mq_t mq, uintptr_t addr)
88 {
89 return aos_queue_send((aos_queue_t *)&mq, &addr, sizeof(uintptr_t));
90 }
91
usb_osal_mq_recv(usb_osal_mq_t mq,uintptr_t * addr,uint32_t timeout)92 int usb_osal_mq_recv(usb_osal_mq_t mq, uintptr_t *addr, uint32_t timeout)
93 {
94 size_t recv_size;
95 if (timeout == USB_OSAL_WAITING_FOREVER) {
96 return aos_queue_recv((aos_queue_t *)&mq, AOS_WAIT_FOREVER, addr, &recv_size);
97 } else {
98 return aos_queue_recv((aos_queue_t *)&mq, timeout, addr, &recv_size);
99 }
100 }
101
usb_osal_enter_critical_section(void)102 size_t usb_osal_enter_critical_section(void)
103 {
104 return csi_irq_save();
105 }
106
usb_osal_leave_critical_section(size_t flag)107 void usb_osal_leave_critical_section(size_t flag)
108 {
109 csi_irq_restore(flag);
110 }
111
usb_osal_msleep(uint32_t delay)112 void usb_osal_msleep(uint32_t delay)
113 {
114 aos_msleep(delay);
115 }
116