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 void USBH_IRQHandler(uint8_t busid);
17 
usb_hc_xhci_interrupt_handler(int irqno,void * param)18 static void usb_hc_xhci_interrupt_handler(int irqno, void *param)
19 {
20     if (irqno == FUSB3_0_IRQ_NUM) {
21         USBH_IRQHandler(FUSB3_ID_0);
22     } else if (irqno == FUSB3_1_IRQ_NUM) {
23         USBH_IRQHandler(FUSB3_ID_1);
24     }
25 }
26 
usb_hc_setup_xhci_interrupt(uint32_t id)27 void usb_hc_setup_xhci_interrupt(uint32_t id)
28 {
29     uint32_t irq_num = (id == FUSB3_ID_0) ? FUSB3_0_IRQ_NUM : FUSB3_1_IRQ_NUM;
30     rt_hw_interrupt_set_priority(irq_num, 0xd0);
31     rt_hw_interrupt_install(irq_num, usb_hc_xhci_interrupt_handler,
32                             NULL, "xhci");
33     rt_hw_interrupt_umask(irq_num);
34 }
35 
usb_hc_revoke_xhci_interrupt(uint32_t id)36 void usb_hc_revoke_xhci_interrupt(uint32_t id)
37 {
38     uint32_t irq_num = (id == FUSB3_ID_0) ? FUSB3_0_IRQ_NUM : FUSB3_1_IRQ_NUM;
39 
40     rt_hw_interrupt_mask(irq_num);
41 }
42 
usb_hc_get_register_base(uint32_t id)43 unsigned long usb_hc_get_register_base(uint32_t id)
44 {
45     if (FUSB3_ID_0 == id)
46         return FUSB3_0_BASE_ADDR + FUSB3_XHCI_OFFSET;
47     else
48         return FUSB3_1_BASE_ADDR + FUSB3_XHCI_OFFSET;
49 }