1 /*
2  * Copyright : (C) 2024 Phytium Information Technology, Inc.
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Modify History:
7  *  Ver   Who        Date         Changes
8  * ----- ------     --------    --------------------------------------
9  * 1.0   zhugengyu  2024/6/26 first commit
10  */
11 #include "rtthread.h"
12 #include "interrupt.h"
13 
14 #include "fparameters.h"
15 
16 #include "usbd_core.h"
17 
18 void USBD_IRQHandler(uint8_t busid);
19 
usb_assert(const char * filename,int linenum)20 void usb_assert(const char *filename, int linenum)
21 {
22     rt_assert_handler("", filename, linenum);
23 }
24 
usb_dc_pusb2_interrupt_handler(int irqno,void * param)25 static void usb_dc_pusb2_interrupt_handler(int irqno, void *param)
26 {
27     USBD_IRQHandler(CONFIG_USB_PUSB2_BUS_ID);
28 }
29 
usb_dc_setup_pusb2_interrupt(uint32_t id)30 static void usb_dc_setup_pusb2_interrupt(uint32_t id)
31 {
32     uint32_t irq_num = FUSB2_0_VHUB_IRQ_NUM;
33 
34     rt_hw_interrupt_set_priority(irq_num, 0U);
35     rt_hw_interrupt_install(irq_num, usb_dc_pusb2_interrupt_handler, NULL, "pusb2-dc");
36     rt_hw_interrupt_umask(irq_num);
37 }
38 
usb_dc_revoke_pusb2_interrupt(uint32_t id)39 static void usb_dc_revoke_pusb2_interrupt(uint32_t id)
40 {
41     uint32_t irq_num = FUSB2_0_VHUB_IRQ_NUM;
42 
43     rt_hw_interrupt_mask(irq_num);
44 }
45 
usb_dc_get_register_base(uint32_t id)46 unsigned long usb_dc_get_register_base(uint32_t id)
47 {
48     USB_ASSERT(id == FUSB2_ID_VHUB_0);
49     return FUSB2_0_VHUB_BASE_ADDR;
50 }
51 
usb_dc_low_level_init()52 void usb_dc_low_level_init()
53 {
54     usb_dc_setup_pusb2_interrupt(CONFIG_USB_PUSB2_BUS_ID);
55 }
56 
usb_dc_low_level_deinit(void)57 void usb_dc_low_level_deinit(void)
58 {
59     usb_dc_revoke_pusb2_interrupt(CONFIG_USB_PUSB2_BUS_ID);
60 }
61 
usb_sys_mem_malloc(size_t size)62 void *usb_sys_mem_malloc(size_t size)
63 {
64     void *buf = rt_malloc(size);
65 
66     if (buf) {
67         rt_memset(buf, 0, size);
68     }
69 
70     return buf;
71 }
72 
usb_sys_mem_free(void * ptr)73 void usb_sys_mem_free(void *ptr)
74 {
75     if (ptr) {
76         rt_free(ptr);
77     }
78 }
79 
usb_sys_malloc_align(size_t align,size_t size)80 void *usb_sys_malloc_align(size_t align, size_t size)
81 {
82     void *buf = rt_malloc_align(size, align);
83 
84     if (buf) {
85         rt_memset(buf, 0, size);
86     }
87 
88     return buf;
89 }
90 
usbd_set_remote_wakeup(uint8_t busid)91 int usbd_set_remote_wakeup(uint8_t busid)
92 {
93     return -1;
94 }