summaryrefslogtreecommitdiff
path: root/port/pusb2/rt-thread/usb_dc_glue_phytium.c
blob: 49088d953d96619fe3b784feae903f3f1a080c7a (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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/*
 * Copyright : (C) 2024 Phytium Information Technology, Inc.
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Modify History:
 *  Ver   Who        Date         Changes
 * ----- ------     --------    --------------------------------------
 * 1.0   zhugengyu  2024/6/26 first commit
 */
#include "rtthread.h"
#include "interrupt.h"

#include "fparameters.h"

#include "usbd_core.h"

void USBD_IRQHandler(uint8_t busid);

void usb_assert(const char *filename, int linenum)
{
    rt_assert_handler("", filename, linenum);
}

static void usb_dc_pusb2_interrupt_handler(int irqno, void *param)
{
    USBD_IRQHandler(CONFIG_USB_PUSB2_BUS_ID);
}

static void usb_dc_setup_pusb2_interrupt(uint32_t id)
{
    uint32_t irq_num = FUSB2_0_VHUB_IRQ_NUM;

    rt_hw_interrupt_set_priority(irq_num, 0U);
    rt_hw_interrupt_install(irq_num, usb_dc_pusb2_interrupt_handler, NULL, "pusb2-dc");
    rt_hw_interrupt_umask(irq_num);
}

static void usb_dc_revoke_pusb2_interrupt(uint32_t id)
{
    uint32_t irq_num = FUSB2_0_VHUB_IRQ_NUM;

    rt_hw_interrupt_mask(irq_num);
}

unsigned long usb_dc_get_register_base(uint32_t id)
{
    USB_ASSERT(id == FUSB2_ID_VHUB_0);
    return FUSB2_0_VHUB_BASE_ADDR;
}

void usb_dc_low_level_init()
{
    usb_dc_setup_pusb2_interrupt(CONFIG_USB_PUSB2_BUS_ID);
}

void usb_dc_low_level_deinit(void)
{
    usb_dc_revoke_pusb2_interrupt(CONFIG_USB_PUSB2_BUS_ID);
}

void *usb_sys_mem_malloc(size_t size)
{
    void *buf = rt_malloc(size);

    if (buf) {
        rt_memset(buf, 0, size);
    }

    return buf;
}

void usb_sys_mem_free(void *ptr)
{
    if (ptr) {
        rt_free(ptr);
    }
}

void *usb_sys_malloc_align(size_t align, size_t size)
{
    void *buf = rt_malloc_align(size, align);

    if (buf) {
        rt_memset(buf, 0, size);
    }

    return buf;
}

int usbd_set_remote_wakeup(uint8_t busid)
{
    return -1;
}