XenevaOS
Loading...
Searching...
No Matches
dwc2.h
Go to the documentation of this file.
1
32#ifndef __DWC2_H__
33#define __DWC2_H__
34
35#include <stdint.h>
36#include <Mm/dma.h>
37
38#define USB_PID_SETUP 3
39#define USB_PID_DATA 2
40#define USB_PID_DATA0 0
41#define USB_PID_DATA2 1
42
43
44#define DWC2_GET_PORT_SPEED(hport) ((hport >> 17) & 0x3)
45#define EP_OUT 0
46#define EP_IN 1
47#define EP_BIDIR 2
48
49#define EP_CONTROL 0
50#define EP_ISOCHRONOUS 1
51#define EP_BULK 2
52#define EP_INTERRUPT 3
53
54typedef struct {
55 uint8_t dev_address; // 0 is default, 1-127 are assigned by device
56 uint8_t ep_num; // 0 control endpoint, 0-15 max
57 uint8_t dir; //0 = OUT, 1 = IN , 2 = BIDIR
58 uint8_t type; //0 = Control, 1 = Isoch, 2, = Bulk, 3 = Interrupt
59 uint8_t speed; //0 = HIGH, 1, FULL, 2 = LOW
75
76
88extern uint32_t dwc2_read(uint64_t base);
89
95extern void dwc2_write(uint64_t base, uint32_t value);
96
97extern bool dwc2_control_transfer(struct dwc2_core_regs* regs, dwc2_usb_endpoint_t* ep, uint8_t bmRequestType, uint8_t b_request,
98 uint16_t wValue, uint16_t wIndex, void* data, uint16_t wLength);
99
100extern void dwc2_interrupt_transfer(dwc2_core_regs* regs, dwc2_usb_endpoint_t* ep, void* intbuf, uint8_t ch, uint32_t odd, uint8_t pid);
101extern void dwc2_interrupt_transfer_csplit(dwc2_core_regs* regs, dwc2_usb_endpoint_t* ep, void* intbuf, uint8_t ch, uint32_t odd, uint8_t pid);
102
107extern void dwc2_enumerate_root_device(struct dwc2_core_regs* regs);
108
115extern void dwc2_handle_channel_interrupt(dwc2_core_regs* regs, int ch);
116
117extern int dwc2_wait_channel(struct dwc2_core_regs* regs, int ch);
118
119extern int dwc2_wait_channel_look_bit(struct dwc2_core_regs* regs, int ch, int bit);
120
124extern void* dwc2_get_dma_address();
125
126extern void* dwc2_get_dma_address_phys();
127
128extern void dwc2_flush_tx_fifo(struct dwc2_core_regs* regs, uint32_t nfifo);
129
130extern void dwc2_flush_rx_fifo(struct dwc2_core_regs* regs);
131
138extern void dwc2_add_to_used_dma_list(void* phys);
139
145extern void dwc2_free_used_dma_list();
146
147extern void root_hub_transfer_int(dwc2_core_regs* regs, uint8_t pid);
148
149extern void* root_hub_get_interrupt_buffer();
150
151extern void root_hub_handle_port_change(dwc2_core_regs* regs, uint8_t port);
152
158
163
165#endif
unsigned int uint32_t
Definition acefiex.h:163
unsigned char uint8_t
Definition acefiex.h:161
COMPILER_DEPENDENT_UINT64 uint64_t
Definition acefiex.h:165
unsigned short int uint16_t
Definition acefiex.h:162
void dwc2_free_used_dma_list()
dwc2_free_used_dma_list – free up all used physical memories, this function must be called at the end...
Definition main.cpp:645
void dwc2_flush_rx_fifo(struct dwc2_core_regs *regs)
Definition main.cpp:271
int dwc2_wait_channel_look_bit(struct dwc2_core_regs *regs, int ch, int bit)
Definition dwc2_channel.cpp:329
void * root_hub_get_interrupt_buffer()
Definition dwc2_root.cpp:217
dwc2_core_regs * dwc2_get_core_regs()
Definition main.cpp:659
uint32_t dwc2_read(uint64_t base)
dwc2_read – reads a value from dwc2 register
Definition main.cpp:99
void dwc2_enumerate_root_device(struct dwc2_core_regs *regs)
Definition dwc2_root.cpp:73
uint8_t dwc2_assign_address()
dwc2_assign_address – assigns address to a usb device
Definition main.cpp:89
void * dwc2_get_dma_address_phys()
Definition main.cpp:623
void dwc2_add_to_used_dma_list(void *phys)
dwc2_add_to_used_dma_list – there is a bug i guess within the dwc2 ip where same buffer can't be used...
Definition main.cpp:636
void * dwc2_get_dma_address()
dwc2_get_dma_address – return pre allocated dma address
Definition main.cpp:618
void dwc2_write(uint64_t base, uint32_t value)
dwc2_write – write a value to dwc2 register
Definition main.cpp:108
AuDMAGlobalClass * dwc2_get_dma_class()
dwc2_get_dma_class – get global dma class
Definition main.cpp:655
void root_hub_transfer_int(dwc2_core_regs *regs, uint8_t pid)
Definition dwc2_root.cpp:203
bool dwc2_control_transfer(struct dwc2_core_regs *regs, dwc2_usb_endpoint_t *ep, uint8_t bmRequestType, uint8_t b_request, uint16_t wValue, uint16_t wIndex, void *data, uint16_t wLength)
Definition dwc2_channel.cpp:358
void dwc2_interrupt_transfer(dwc2_core_regs *regs, dwc2_usb_endpoint_t *ep, void *intbuf, uint8_t ch, uint32_t odd, uint8_t pid)
Definition dwc2_channel.cpp:599
void dwc2_handle_channel_interrupt(dwc2_core_regs *regs, int ch)
dwc2_handle_channel_interrupt – handle channel interrupts here
Definition dwc2_channel.cpp:483
void dwc2_interrupt_transfer_csplit(dwc2_core_regs *regs, dwc2_usb_endpoint_t *ep, void *intbuf, uint8_t ch, uint32_t odd, uint8_t pid)
Definition dwc2_channel.cpp:604
void root_hub_handle_port_change(dwc2_core_regs *regs, uint8_t port)
Definition dwc2_root.cpp:226
void dwc2_flush_tx_fifo(struct dwc2_core_regs *regs, uint32_t nfifo)
Definition main.cpp:257
int dwc2_wait_channel(struct dwc2_core_regs *regs, int ch)
Definition dwc2_channel.cpp:316
char phys[]
Definition dma.h:62
Definition dwc2_reg.h:59
Definition dwc2.h:54
uint8_t speed
Definition dwc2.h:59
uint16_t max_packet_sz
Definition dwc2.h:67
uint8_t next_pid
Definition dwc2.h:72
uint8_t dir
Definition dwc2.h:57
uint8_t ch
Definition dwc2.h:73
uint8_t hub_address
Definition dwc2.h:70
uint8_t interval
Definition dwc2.h:68
uint8_t hub_port
Definition dwc2.h:71
uint8_t ep_num
Definition dwc2.h:56
uint8_t split_enable
Definition dwc2.h:69
uint8_t type
Definition dwc2.h:58
uint8_t dev_address
Definition dwc2.h:55
Definition dwc2.h:77
uint16_t wIndex
Definition dwc2.h:81
uint8_t bmRequest
Definition dwc2.h:79
uint16_t wLength
Definition dwc2.h:82
uint16_t wValue
Definition dwc2.h:80
uint8_t bmRequestType
Definition dwc2.h:78