32#if CFG_TUD_ENABLED && CFG_TUSB_MCU == OPT_MCU_F1C100S
35#include <f1c100s-irq.h>
47#define REQUEST_TYPE_INVALID (0xFFu)
64 uint16_t remaining_ctrl;
68 uint16_t pipe_buf_is_fifo[2];
77 int j = 0, usbc_bit = 0;
78 void *dest = (
void *)USBC_REG_CSR(USBC0_BASE);
80 usbc_bit = 1 << (0 * 2);
81 for (j = 0; j < len; j++)
84 USBC_ClrBit_Mask_l(dest, 0xff << 8);
85 USBC_SetBit_Mask_l(dest, (addr + j) << 8);
87 USBC_ClrBit_Mask_l(dest, usbc_bit);
90 USBC_SetBit_Mask_l(dest, 1 << 7);
92 USBC_ClrBit_Mask_l(dest, 1 << 7);
94 USBC_SetBit_Mask_l(dest, usbc_bit);
96 USBC_ClrBit_Mask_l(dest, usbc_bit);
104#if CFG_TUSB_OS == OPT_OS_NONE
115 USBC_REG_set_bit_l(USBPHY_CLK_RST_BIT, USBPHY_CLK_REG);
116 USBC_REG_set_bit_l(BUS_RST_USB_BIT, BUS_CLK_RST_REG);
119 USBC_REG_set_bit_l(USBPHY_CLK_GAT_BIT, USBPHY_CLK_REG);
120 USBC_REG_set_bit_l(USBPHY_CLK_RST_BIT, USBPHY_CLK_REG);
122 USBC_REG_set_bit_l(BUS_CLK_USB_BIT, BUS_CLK_GATE0_REG);
123 USBC_REG_set_bit_l(BUS_RST_USB_BIT, BUS_CLK_RST_REG);
145 reg_value = USBC_Readl(SUNXI_SRAMC_BASE + 0x04);
146 reg_value &= ~(0x03 << 0);
147 reg_value |= (1 << 0);
148 USBC_Writel(reg_value, SUNXI_SRAMC_BASE + 0x04);
153 unsigned int temp = reg_val;
155 temp &= ~(1 << USBC_BP_ISCR_VBUS_CHANGE_DETECT);
156 temp &= ~(1 << USBC_BP_ISCR_ID_CHANGE_DETECT);
157 temp &= ~(1 << USBC_BP_ISCR_DPDM_CHANGE_DETECT);
164 u32 reg_val = USBC_Readl(USBC_REG_ISCR(USBC0_BASE));
165 reg_val |= (1 << USBC_BP_ISCR_DPDM_PULLUP_EN);
166 reg_val |= 3<<USBC_BP_ISCR_VBUS_VALID_SRC;
168 USBC_Writel(reg_val, USBC_REG_ISCR(USBC0_BASE));
174 u32 reg_val = USBC_Readl(USBC_REG_ISCR(USBC0_BASE));
175 reg_val |= (0x03 << USBC_BP_ISCR_FORCE_ID);
177 USBC_Writel(reg_val, USBC_REG_ISCR(USBC0_BASE));
183 u32 reg_val = USBC_Readl(USBC_REG_ISCR(USBC0_BASE));
184 reg_val |= (0x03 << USBC_BP_ISCR_FORCE_VBUS_VALID);
186 USBC_Writel(reg_val, USBC_REG_ISCR(USBC0_BASE));
193 reg_val = USBC_Readb(USBC_REG_VEND0(USBC0_BASE));
194 if (io_type == USBC_IO_TYPE_DMA) {
195 if (ep_type == USBC_EP_TYPE_TX) {
196 reg_val |= ((ep_index - 0x01) << 1) << USBC_BP_VEND0_DRQ_SEL;
197 reg_val |= 0x1<<USBC_BP_VEND0_BUS_SEL;
199 reg_val |= ((ep_index << 1) - 0x01) << USBC_BP_VEND0_DRQ_SEL;
200 reg_val |= 0x1<<USBC_BP_VEND0_BUS_SEL;
212 USBC_Writeb(reg_val, USBC_REG_VEND0(USBC0_BASE));
217 USBC_Writeb(ep_index, USBC_REG_EPIND(USBC0_BASE));
222 return USBC_Readb(USBC_REG_EPIND(USBC0_BASE));
227 USBC_REG_set_bit_w(USBC_BP_CSR0_D_SEND_STALL, USBC_REG_CSR0(USBC0_BASE));
232 USBC_REG_clear_bit_w(USBC_BP_CSR0_D_SEND_STALL, USBC_REG_CSR0(USBC0_BASE));
233 USBC_REG_clear_bit_w(USBC_BP_CSR0_D_SENT_STALL, USBC_REG_CSR0(USBC0_BASE));
238 USBC_REG_set_bit_w(USBC_BP_CSR0_D_SERVICED_SETUP_END, USBC_REG_CSR0(USBC0_BASE));
243 USBC_Writeb(address, USBC_REG_FADDR(USBC0_BASE));
249 USBC_REG_set_bit_w(USBC_BP_TXCSR_D_SEND_STALL, USBC_REG_TXCSR(USBC0_BASE));
253 return USBC_REG_test_bit_w(USBC_BP_TXCSR_D_SENT_STALL, USBC_REG_TXCSR(USBC0_BASE));
257 u32 reg_val = USBC_Readw(USBC_REG_TXCSR(USBC0_BASE));
258 reg_val &= ~((1 << USBC_BP_TXCSR_D_SENT_STALL)|(1 << USBC_BP_TXCSR_D_SEND_STALL)|(1<<USBC_BP_TXCSR_D_UNDER_RUN));
259 reg_val |= (1 << USBC_BP_TXCSR_D_CLEAR_DATA_TOGGLE);
260 USBC_Writew(reg_val, USBC_REG_TXCSR(USBC0_BASE));
265 USBC_REG_set_bit_w(USBC_BP_RXCSR_D_SEND_STALL, USBC_REG_RXCSR(USBC0_BASE));
270 return USBC_REG_test_bit_w(USBC_BP_RXCSR_D_SENT_STALL, USBC_REG_RXCSR(USBC0_BASE));
275 u32 reg_val = USBC_Readw(USBC_REG_RXCSR(USBC0_BASE));
276 reg_val &= ~((1 << USBC_BP_RXCSR_D_SENT_STALL)|(1 << USBC_BP_RXCSR_D_SEND_STALL)|(1<<USBC_BP_RXCSR_D_OVERRUN));
277 reg_val |= (1 << USBC_BP_RXCSR_D_CLEAR_DATA_TOGGLE);
278 USBC_Writew(reg_val, USBC_REG_RXCSR(USBC0_BASE));
283 if (USBC_REG_test_bit_b(USBC_BP_POWER_D_HIGH_SPEED_FLAG, USBC_REG_PCTL(USBC0_BASE)))
291 USBC_Writew(1<<USBC_BP_CSR0_D_SERVICED_RX_PKT_READY, USBC_REG_CSR0(USBC0_BASE));
296 USBC_Writew((1<<USBC_BP_CSR0_D_SERVICED_RX_PKT_READY) | (1<<USBC_BP_CSR0_D_DATA_END),
297 USBC_REG_CSR0(USBC0_BASE));
303 USBC_Writew(1<<USBC_BP_CSR0_D_TX_PKT_READY, USBC_REG_CSR0(USBC0_BASE));
308 USBC_Writew((1<<USBC_BP_CSR0_D_TX_PKT_READY) | (1<<USBC_BP_CSR0_D_DATA_END),
309 USBC_REG_CSR0(USBC0_BASE));
314 USBC_Writeb((1 << USBC_BP_TXCSR_D_TX_READY), USBC_REG_TXCSR(USBC0_BASE));
319 USBC_Writeb(0, USBC_REG_RXCSR(USBC0_BASE));
324 return USBC_REG_test_bit_w(USBC_BP_RXCSR_D_RX_PKT_READY, USBC_REG_RXCSR(USBC0_BASE));
330 USBC_REG_set_bit_w(ep_index, USBC_REG_INTTxE(USBC0_BASE));
336 USBC_REG_set_bit_w(ep_index, USBC_REG_INTRxE(USBC0_BASE));
342 USBC_REG_clear_bit_w(ep_index, USBC_REG_INTTxE(USBC0_BASE));
348 USBC_REG_clear_bit_w(ep_index, USBC_REG_INTRxE(USBC0_BASE));
360 for (; cur < end && ((addr < cur->
beg) || (cur->
end <= addr)); ++cur) ;
367 TU_ASSERT(p != blks + num, -2);
368 if (p->
beg == addr) {
370 p->
beg = addr + size;
371 if (p->
beg != p->
end)
return 0;
374 while (p + 1 < end) {
393 while (p + 1 < end) {
399 if (tmp.
beg == tmp.
end)
return 0;
407 return blk->
end - blk->
beg;
413 TU_LOG1(
"*************\r\n");
414 for (
unsigned i = 0; i < num; ++i) {
415 TU_LOG1(
" Blk%u %u %u\r\n", i, blk->
beg, blk->
end);
420#define print_block_list(a,b)
423#if CFG_TUSB_MCU == OPT_MCU_F1C100S
424#define USB_FIFO_SIZE_KB 4
426#error "Unsupported MCU"
431 free_block_t free_blocks[2 * (TUP_DCD_ENDPOINT_MAX - 1)];
432 unsigned num_blocks = 1;
437 free_blocks[0].beg = 64 / 8;
438 free_blocks[0].end = (USB_FIFO_SIZE_KB << 10) / 8;
439 for (
int i = 1; i < TUP_DCD_ENDPOINT_MAX; ++i) {
443 addr = USBC_Readw(USBC_REG_TXFIFOAD(USBC0_BASE));
445 unsigned sz = USBC_Readb(USBC_REG_TXFIFOSZ(USBC0_BASE));
446 unsigned sft = (sz & USB_TXFIFOSZ_SIZE_M) + ((sz & USB_TXFIFOSZ_DPB) ? 1: 0);
448 TU_ASSERT(-2 < num, 0);
452 addr = USBC_Readw(USBC_REG_RXFIFOAD(USBC0_BASE));
454 unsigned sz = USBC_Readb(USBC_REG_RXFIFOSZ(USBC0_BASE));
455 unsigned sft = (sz & USB_RXFIFOSZ_SIZE_M) + ((sz & USB_RXFIFOSZ_DPB) ? 1: 0);
457 TU_ASSERT(-2 < num, 0);
467 uint_fast16_t size_in_8byte_unit = 1 << size_in_log2_minus3;
469 uint_fast16_t min_sz = 0xFFFFu;
471 for (
free_block_t const *cur = &free_blocks[0]; cur < end; ++cur) {
473 if (sz < size_in_8byte_unit)
continue;
474 if (size_in_8byte_unit == sz)
return cur->beg;
475 if (sz < min_sz) min = cur;
498 USBC_Writel(*buf32++, fifo);
504 USBC_Writeb(*buf8++, fifo);
525 *buf32++ = USBC_Readl(fifo);
531 *buf8++ = USBC_Readb(fifo);
537 static const struct {
539 void (*tu_fifo_advance)(
tu_fifo_t *f, uint16_t n);
540 void (*pipe_read_write)(
void *buf,
volatile void *fifo,
unsigned len);
546 ops[dir].tu_fifo_get_info(f, &
info);
547 unsigned total_len = len;
548 len = TU_MIN(total_len,
info.len_lin);
549 ops[dir].pipe_read_write(
info.ptr_lin, fifo, len);
550 unsigned rem = total_len - len;
552 len = TU_MIN(rem,
info.len_wrap);
553 ops[dir].pipe_read_write(
info.ptr_wrap, fifo, len);
556 ops[dir].tu_fifo_advance(f, total_len - rem);
566 p[0] = USBC_Readl(USBC_REG_EPFIFO0(USBC0_BASE));
567 p[1] = USBC_Readl(USBC_REG_EPFIFO0(USBC0_BASE));
592 const unsigned mps = USBC_Readw(USBC_REG_TXMAXP(USBC0_BASE));
593 const unsigned len = TU_MIN(mps, rem);
594 uint8_t *buf = pipe->
buf;
597 volatile void* addr = (
volatile void*)(USBC_REG_EPFIFO1(USBC0_BASE) + (epnum_minus1 << 2));
602 pipe->
buf = buf + len;
619 const unsigned mps = USBC_Readw(USBC_REG_RXMAXP(USBC0_BASE));
621 const unsigned vld = USBC_Readw(USBC_REG_RXCOUNT(USBC0_BASE));
622 const unsigned len = TU_MIN(TU_MIN(rem, mps), vld);
623 uint8_t *buf = pipe->
buf;
625 volatile void* addr = (
volatile void*)(USBC_REG_EPFIFO1(USBC0_BASE) + (epnum_minus1 << 2));
630 pipe->
buf = buf + len;
634 if ((len < mps) || (rem == len)) {
671 TU_ASSERT(req != REQUEST_TYPE_INVALID ||
total_bytes == 0);
684 if (req == REQUEST_TYPE_INVALID) {
689 TU_LOG1(
"Drop CONTROL_STAGE_ACK\r\n");
697 const unsigned len = TU_MIN(TU_MIN(rem, 64),
total_bytes);
706 if ((len < 64) || (rem == len)) {
736 uint_fast8_t csrl = USBC_Readw(USBC_REG_CSR0(USBC0_BASE));
740 if (csrl & USB_CSRL0_STALLED) {
747 if (csrl & USB_CSRL0_SETEND) {
759 req = REQUEST_TYPE_INVALID;
760 if (!(csrl & USB_CSRL0_RXRDY))
return;
763 if (csrl & USB_CSRL0_RXRDY) {
765 if (req == REQUEST_TYPE_INVALID) {
773 const unsigned vld = USBC_Readw(USBC_REG_COUNT0(USBC0_BASE));
775 const unsigned len = TU_MIN(TU_MIN(rem, 64), vld);
792 if (req != REQUEST_TYPE_INVALID && !
tu_edpt_dir(req)) {
856 USBC_Writew(1, USBC_REG_INTTxE(USBC0_BASE));
857 USBC_Writew(0, USBC_REG_INTRxE(USBC0_BASE));
883 #if TUD_OPT_HIGH_SPEED
884 USBC_REG_set_bit_b(USBC_BP_POWER_D_HIGH_SPEED_EN, USBC_REG_PCTL(USBC0_BASE));
886 USBC_REG_clear_bit_b(USBC_BP_POWER_D_HIGH_SPEED_EN, USBC_REG_PCTL(USBC0_BASE));
889 USBC_Writeb((1 << USBC_BP_INTUSBE_EN_SUSPEND)
890 | (1 << USBC_BP_INTUSBE_EN_RESUME)
891 | (1 << USBC_BP_INTUSBE_EN_RESET)
892 | (1 << USBC_BP_INTUSBE_EN_SOF)
893 | (1 << USBC_BP_INTUSBE_EN_DISCONNECT)
894 , USBC_REG_INTUSBE(USBC0_BASE));
895 f1c100s_intc_clear_pend(F1C100S_IRQ_USBOTG);
907 USBC_REG_set_bit_b(USBC_BP_POWER_D_SOFT_CONNECT, USBC_REG_PCTL(USBC0_BASE));
914 USBC_REG_clear_bit_b(USBC_BP_POWER_D_SOFT_CONNECT, USBC_REG_PCTL(USBC0_BASE));
928 f1c100s_intc_enable_irq(F1C100S_IRQ_USBOTG);
933 f1c100s_intc_mask_irq(F1C100S_IRQ_USBOTG);
939 f1c100s_intc_disable_irq(F1C100S_IRQ_USBOTG);
944 f1c100s_intc_unmask_irq(F1C100S_IRQ_USBOTG);
964 USBC_REG_set_bit_b(USBC_BP_POWER_D_RESUME, USBC_REG_PCTL(USBC0_BASE));
966 USBC_REG_clear_bit_b(USBC_BP_POWER_D_RESUME, USBC_REG_PCTL(USBC0_BASE));
973#ifndef __ARMCC_VERSION
974#define __clz __builtin_clz
990 TU_ASSERT(epn < TUP_DCD_ENDPOINT_MAX);
1002 USBC_Writew(mps, USBC_REG_TXMAXP(USBC0_BASE));
1004 reg_val = (1 << USBC_BP_TXCSR_D_MODE)
1005 | (1 << USBC_BP_TXCSR_D_FLUSH_FIFO)
1006 | (1 << USBC_BP_TXCSR_D_CLEAR_DATA_TOGGLE);
1008 reg_val |= (1 << USBC_BP_TXCSR_D_ISO);
1009 USBC_Writew(reg_val, USBC_REG_TXCSR(USBC0_BASE));
1013 USBC_Writew(mps, USBC_REG_RXMAXP(USBC0_BASE));
1015 reg_val = (1 << USBC_BP_RXCSR_D_FLUSH_FIFO)
1016 | (1 << USBC_BP_RXCSR_D_CLEAR_DATA_TOGGLE);
1018 reg_val |= (1 << USBC_BP_RXCSR_D_ISO);
1019 USBC_Writew(reg_val, USBC_REG_RXCSR(USBC0_BASE));
1025 int size_in_log2_minus3 = 28 - TU_MIN(28, __clz((uint32_t)mps));
1026 if ((8u << size_in_log2_minus3) < mps) ++size_in_log2_minus3;
1031 USBC_Writew(addr, USBC_REG_TXFIFOAD(USBC0_BASE));
1032 USBC_Writeb(size_in_log2_minus3, USBC_REG_TXFIFOSZ(USBC0_BASE));
1034 USBC_Writew(addr, USBC_REG_RXFIFOAD(USBC0_BASE));
1035 USBC_Writeb(size_in_log2_minus3, USBC_REG_RXFIFOSZ(USBC0_BASE));
1047 USBC_Writew(1, USBC_REG_INTTxE(USBC0_BASE));
1048 USBC_Writew(0, USBC_REG_INTRxE(USBC0_BASE));
1049 for (
unsigned i = 1; i < TUP_DCD_ENDPOINT_MAX; ++i) {
1051 USBC_Writew(0, USBC_REG_TXMAXP(USBC0_BASE));
1052 USBC_Writew((1 << USBC_BP_TXCSR_D_MODE) | (1 << USBC_BP_TXCSR_D_CLEAR_DATA_TOGGLE) | (1 << USBC_BP_TXCSR_D_FLUSH_FIFO),
1053 USBC_REG_TXCSR(USBC0_BASE));
1055 USBC_Writew(0, USBC_REG_RXMAXP(USBC0_BASE));
1056 USBC_Writew((1 << USBC_BP_RXCSR_D_CLEAR_DATA_TOGGLE) | (1 << USBC_BP_RXCSR_D_FLUSH_FIFO),
1057 USBC_REG_RXCSR(USBC0_BASE));
1059 USBC_Writew(0, USBC_REG_TXFIFOAD(USBC0_BASE));
1060 USBC_Writeb(0, USBC_REG_TXFIFOSZ(USBC0_BASE));
1061 USBC_Writew(0, USBC_REG_RXFIFOAD(USBC0_BASE));
1062 USBC_Writeb(0, USBC_REG_RXFIFOSZ(USBC0_BASE));
1077 USBC_Writew(0, USBC_REG_TXMAXP(USBC0_BASE));
1078 USBC_Writew((1 << USBC_BP_TXCSR_D_MODE) | (1 << USBC_BP_TXCSR_D_CLEAR_DATA_TOGGLE) | (1 << USBC_BP_TXCSR_D_FLUSH_FIFO),
1079 USBC_REG_TXCSR(USBC0_BASE));
1081 USBC_Writew(0, USBC_REG_TXFIFOAD(USBC0_BASE));
1082 USBC_Writeb(0, USBC_REG_TXFIFOSZ(USBC0_BASE));
1085 USBC_Writew(0, USBC_REG_RXMAXP(USBC0_BASE));
1086 USBC_Writew((1 << USBC_BP_RXCSR_D_CLEAR_DATA_TOGGLE) | (1 << USBC_BP_RXCSR_D_FLUSH_FIFO),
1087 USBC_REG_RXCSR(USBC0_BASE));
1089 USBC_Writew(0, USBC_REG_RXFIFOAD(USBC0_BASE));
1090 USBC_Writeb(0, USBC_REG_RXFIFOSZ(USBC0_BASE));
1176 uint16_t txis, rxis;
1178 is = USBC_Readb(USBC_REG_INTUSB(USBC0_BASE));
1179 txis = USBC_Readw(USBC_REG_INTTx(USBC0_BASE));
1180 rxis = USBC_Readw(USBC_REG_INTRx(USBC0_BASE));
1182 is &= USBC_Readb(USBC_REG_INTUSBE(USBC0_BASE));
1183 USBC_Writeb(is, USBC_REG_INTUSB(USBC0_BASE));
1184 if (is & USBC_INTUSB_DISCONNECT) {
1187 if (is & USBC_INTUSB_SOF) {
1190 if (is & USBC_INTUSB_RESET) {
1196 if (is & USBC_INTUSB_RESUME) {
1199 if (is & USBC_INTUSB_SUSPEND) {
1203 txis &= USBC_Readw(USBC_REG_INTTxE(USBC0_BASE));
1204 USBC_Writew(txis, USBC_REG_INTTx(USBC0_BASE));
1205 if (txis & USBC_INTTx_FLAG_EP0) {
1212 txis &= ~TU_BIT(num);
1215 rxis &= USBC_Readw(USBC_REG_INTRxE(USBC0_BASE));
1216 USBC_Writew(rxis, USBC_REG_INTRx(USBC0_BASE));
1220 rxis &= ~TU_BIT(num);
static TU_ATTR_ALWAYS_INLINE void dcd_event_bus_signal(uint8_t rhport, dcd_eventid_t eid, bool in_isr)
static TU_ATTR_ALWAYS_INLINE void dcd_event_xfer_complete(uint8_t rhport, uint8_t ep_addr, uint32_t xferred_bytes, uint8_t result, bool in_isr)
static TU_ATTR_ALWAYS_INLINE void dcd_event_setup_received(uint8_t rhport, uint8_t const *setup, bool in_isr)
static TU_ATTR_ALWAYS_INLINE void dcd_event_bus_reset(uint8_t rhport, tusb_speed_t speed, bool in_isr)
xfer_td_t xfer[EP_CBI_COUNT+1][2]
static TU_ATTR_ALWAYS_INLINE unsigned __builtin_ctz(unsigned int value)
void USBC_SelectBus(u32 io_type, u32 ep_type, u32 ep_index)
bool dcd_edpt_xfer_fifo(uint8_t rhport, uint8_t ep_addr, tu_fifo_t *ff, uint16_t total_bytes)
static void __USBC_Dev_Rx_SendStall(void)
static void __USBC_Dev_ep0_ReadDataHalf(void)
struct TU_ATTR_PACKED pipe_state_t
static void process_setup_packet(uint8_t rhport)
static void USBC_HardwareReset(void)
static void musb_int_mask(void)
static void __USBC_Dev_ep0_SendStall(void)
static CFG_TUD_MEM_ALIGN dcd_data_t _dcd
static void __USBC_Dev_ep0_ReadDataComplete(void)
static void process_edpt_n(uint8_t rhport, uint_fast8_t ep_addr)
static void print_block_list(free_block_t const *blk, unsigned num)
static void pipe_write_packet(void *buff, volatile void *fifo, unsigned cnt)
static void process_bus_reset(uint8_t rhport)
void dcd_edpt_stall(uint8_t rhport, uint8_t ep_addr)
static int update_free_block_list(free_block_t *blks, unsigned num, uint_fast16_t addr, uint_fast16_t size)
void dcd_edpt_close(uint8_t rhport, uint8_t ep_addr)
static u8 USBC_GetActiveEp(void)
static void __USBC_Dev_Tx_WriteDataComplete(void)
static void __USBC_Dev_ep0_WriteDataComplete(void)
static unsigned int USBC_WakeUp_ClearChangeDetect(unsigned int reg_val)
static void USBC_INT_EnableTxEp(u8 ep_index)
static free_block_t * find_containing_block(free_block_t *beg, free_block_t *end, uint_fast16_t addr)
static bool handle_xfer_in(uint_fast8_t ep_addr)
void dcd_int_handler(uint8_t rhport)
void dcd_disconnect(uint8_t rhport)
static void __USBC_Dev_Rx_ClearStall(void)
static void USBC_ConfigFIFO_Base(void)
static bool edpt0_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t *buffer, uint16_t total_bytes)
static void USBC_Dev_SetAddress(u8 address)
static bool handle_xfer_out(uint_fast8_t ep_addr)
static u32 __USBC_Dev_Tx_IsEpStall(void)
static u32 __USBC_Dev_Rx_IsEpStall(void)
void dcd_edpt_close_all(uint8_t rhport)
static void usb_isr_handler(void)
void dcd_int_disable(uint8_t rhport)
bool dcd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const *ep_desc)
static void process_ep0(uint8_t rhport)
static void musb_int_unmask(void)
static void __USBC_Dev_ep0_ClearStall(void)
static void USBC_Dev_Ctrl_ClearSetupEnd(void)
static void USBC_INT_EnableRxEp(u8 ep_index)
void dcd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr)
static void __USBC_Dev_ep0_WriteDataHalf(void)
static bool edpt_n_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t *buffer, uint16_t total_bytes)
static void USBC_EnableDpDmPullUp(void)
static void pipe_read_packet(void *buff, volatile void *fifo, unsigned cnt)
static void USBC_SelectActiveEp(u8 ep_index)
static u32 __USBC_Dev_Rx_IsReadDataReady(void)
static tusb_speed_t USBC_Dev_QueryTransferMode(void)
void dcd_connect(uint8_t rhport)
bool dcd_edpt_xfer(uint8_t rhport, uint8_t ep_addr, uint8_t *buffer, uint16_t total_bytes)
static unsigned find_free_memory(uint_fast16_t size_in_log2_minus3)
static void delay_ms(uint32_t ms)
static void USBC_PhyConfig(void)
void dcd_set_address(uint8_t rhport, uint8_t dev_addr)
bool dcd_init(uint8_t rhport, const tusb_rhport_init_t *rh_init)
static void USBC_INT_DisableRxEp(u8 ep_index)
static void pipe_read_write_packet_ff(tu_fifo_t *f, volatile void *fifo, unsigned len, unsigned dir)
static void USBC_INT_DisableTxEp(u8 ep_index)
static void usb_phy_write(int addr, int data, int len)
static void USBC_ForceVbusValidToHigh(void)
static void USBC_ForceIdToHigh(void)
static void __USBC_Dev_Rx_ReadDataComplete(void)
static void __USBC_Dev_Tx_ClearStall(void)
void dcd_int_enable(uint8_t rhport)
void dcd_remote_wakeup(uint8_t rhport)
static unsigned free_block_size(free_block_t const *blk)
uint32_t board_millis(void)
static void __USBC_Dev_Tx_SendStall(void)
void dcd_sof_enable(uint8_t rhport, bool en)
TU_ATTR_WEAK void osal_task_delay(uint32_t msec)
AUDIO Channel Cluster Descriptor (4.1)
uint8_t bmAttributes
See: audio_clock_source_attribute_t.
uint16_t pipe_buf_is_fifo[2]
CFG_TUD_MEM_ALIGN tusb_control_request_t setup_packet
pipe_state_t pipe[2][TUP_DCD_ENDPOINT_MAX-1]
void tu_fifo_get_write_info(tu_fifo_t *f, tu_fifo_buffer_info_t *info)
Get linear write info.
void tu_fifo_advance_write_pointer(tu_fifo_t *f, uint16_t n)
Advance write pointer - intended to be used in combination with DMA. It is possible to fill the FIFO ...
void tu_fifo_advance_read_pointer(tu_fifo_t *f, uint16_t n)
Advance read pointer - intended to be used in combination with DMA. It is possible to read from the F...
void tu_fifo_get_read_info(tu_fifo_t *f, tu_fifo_buffer_info_t *info)
Get read info.
tusb_speed_t
defined base on EHCI specs value for Endpoint Speed
static TU_ATTR_ALWAYS_INLINE uint8_t tu_edpt_number(uint8_t addr)
static TU_ATTR_ALWAYS_INLINE uint16_t tu_edpt_packet_size(tusb_desc_endpoint_t const *desc_ep)
TU_ATTR_PACKED_END TU_ATTR_BIT_FIELD_ORDER_END static TU_ATTR_ALWAYS_INLINE tusb_dir_t tu_edpt_dir(uint8_t addr)
static TU_ATTR_ALWAYS_INLINE uint8_t tu_edpt_addr(uint8_t num, uint8_t dir)