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
37#define USB_PID_SETUP 3
38#define USB_PID_DATA 2
39#define USB_PID_DATA0 0
40#define USB_PID_DATA2 1
41
42
43#define DWC2_GET_PORT_SPEED(hport) ((hport >> 17) & 0x3)
44#define EP_OUT 0
45#define EP_IN 1
46#define EP_BIDIR 2
47
48#define EP_CONTROL 0
49#define EP_ISOCHRONOUS 1
50#define EP_BULK 2
51#define EP_INTERRUPT 3
52
53typedef struct {
54 uint8_t dev_address; // 0 is default, 1-127 are assigned by device
55 uint8_t ep_num; // 0 control endpoint, 0-15 max
56 uint8_t dir; //0 = OUT, 1 = IN , 2 = BIDIR
57 uint8_t type; //0 = Control, 1 = Isoch, 2, = Bulk, 3 = Interrupt
58 uint8_t speed; //0 = HIGH, 1, FULL, 2 = LOW
72
74
75
87extern uint32_t dwc2_read(uint64_t base);
88
94extern void dwc2_write(uint64_t base, uint32_t value);
95
96extern void dwc2_control_transfer(struct dwc2_core_regs* regs, dwc2_usb_endpoint_t* ep, uint8_t bmRequestType, uint8_t b_request,
97 uint16_t wValue, uint16_t wIndex, void* data, uint16_t wLength);
98
99extern void dwc2_interrupt_transfer(dwc2_core_regs* regs, dwc2_usb_endpoint_t* ep, void* intbuf, uint8_t ch, uint32_t odd, uint8_t pid);
100
105extern void dwc2_enumerate_root_device(struct dwc2_core_regs* regs);
106
113extern void dwc2_handle_channel_interrupt(dwc2_core_regs* regs, int ch);
114
118extern void* dwc2_get_dma_address();
119
120extern void* dwc2_get_dma_address_phys();
121
122extern void dwc2_flush_tx_fifo(struct dwc2_core_regs* regs, uint32_t nfifo);
123
124extern void dwc2_flush_rx_fifo(struct dwc2_core_regs* regs);
125
132extern void dwc2_add_to_used_dma_list(void* phys);
133
139extern void dwc2_free_used_dma_list();
140
141extern void root_hub_transfer_int(dwc2_core_regs* regs, uint8_t pid);
142
143extern void* root_hub_get_interrupt_buffer();
144
145extern void root_hub_handle_port_change(dwc2_core_regs* regs, uint8_t port);
146#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:632
void dwc2_flush_rx_fifo(struct dwc2_core_regs *regs)
Definition main.cpp:254
void * root_hub_get_interrupt_buffer()
Definition dwc2_root.cpp:331
uint32_t dwc2_read(uint64_t base)
dwc2_read – reads a value from dwc2 register
Definition main.cpp:82
void dwc2_enumerate_root_device(struct dwc2_core_regs *regs)
Definition dwc2_root.cpp:194
void * dwc2_get_dma_address_phys()
Definition main.cpp:610
void 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:222
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:623
void * dwc2_get_dma_address()
dwc2_get_dma_address – return pre allocated dma address
Definition main.cpp:605
void dwc2_write(uint64_t base, uint32_t value)
dwc2_write – write a value to dwc2 register
Definition main.cpp:91
void root_hub_transfer_int(dwc2_core_regs *regs, uint8_t pid)
Definition dwc2_root.cpp:317
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:357
void dwc2_handle_channel_interrupt(dwc2_core_regs *regs, int ch)
dwc2_handle_channel_interrupt – handle channel interrupts here
Definition dwc2_channel.cpp:302
void root_hub_handle_port_change(dwc2_core_regs *regs, uint8_t port)
Definition dwc2_root.cpp:340
void dwc2_flush_tx_fifo(struct dwc2_core_regs *regs, uint32_t nfifo)
Definition main.cpp:240
char phys[]
Definition dwc2_reg.h:59
Definition dwc2.h:53
uint8_t speed
Definition dwc2.h:58
uint16_t max_packet_sz
Definition dwc2.h:66
uint8_t next_pid
Definition dwc2.h:71
uint8_t dir
Definition dwc2.h:56
uint8_t hub_address
Definition dwc2.h:69
uint8_t interval
Definition dwc2.h:67
uint8_t hub_port
Definition dwc2.h:70
uint8_t ep_num
Definition dwc2.h:55
uint8_t split_enable
Definition dwc2.h:68
uint8_t type
Definition dwc2.h:57
uint8_t dev_address
Definition dwc2.h:54
Definition dwc2.h:76
uint16_t wIndex
Definition dwc2.h:80
uint8_t bmRequest
Definition dwc2.h:78
uint16_t wLength
Definition dwc2.h:81
uint16_t wValue
Definition dwc2.h:79
uint8_t bmRequestType
Definition dwc2.h:77