summaryrefslogtreecommitdiff
path: root/port/pusb3/freertos/usb_glue_hc_phytium.c
blob: 90314c708a3cb4d2e0ae98d65056d122b81a7e1a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include "usbh_core.h"
#include "ftypes.h"

static u32 memp_ref_cnt = 0;

void usb_sys_mem_init(void);
void usb_sys_mem_deinit(void);
void usb_hc_setup_interrupt(u32 id);
void usb_hc_revoke_interrupt(u32 id);
void usb_hc_port_poll_stop(u32 id);
void cusb_callout_drain_resource_init(void);

void usb_hc_low_level_init(struct usbh_bus *bus)
{
    if (memp_ref_cnt == 0) {
        usb_sys_mem_init();                 /* create memory pool before first bus init */
        cusb_callout_drain_resource_init(); /* init global drain lock/semaphore */
    }

    memp_ref_cnt++; /* one more bus is using the memory pool */

    usb_hc_setup_interrupt(bus->busid);
}

void usb_hc_low_level_deinit(struct usbh_bus *bus)
{
    memp_ref_cnt--; /* one more bus is leaving */

    usb_hc_port_poll_stop(bus->busid);
    usb_hc_revoke_interrupt(bus->busid);

    if (memp_ref_cnt == 0) {
        usb_sys_mem_deinit(); /* release memory pool after the last bus left */
    }
}

__WEAK void USBOTG_IRQHandler(uint8_t busid)
{
}

__WEAK void USBH_IRQHandler(uint8_t busid)
{
}