mirror of
https://github.com/Klipper3d/klipper.git
synced 2025-12-24 00:28:34 -07:00
stm32: Allow disabling double buffering transmit in usbfs.c
Some checks failed
Build test / build (push) Has been cancelled
Some checks failed
Build test / build (push) Has been cancelled
Only enable double buffering transmit if CONFIG_STM32_USB_DOUBLE_BUFFER_TX is set. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
parent
c3b660dfbe
commit
dc622f4ac3
1 changed files with 34 additions and 11 deletions
|
|
@ -242,8 +242,9 @@ usb_read_bulk_out(void *data, uint_fast8_t max_len)
|
|||
static uint32_t bulk_in_push_pos, bulk_in_pop_flag;
|
||||
#define BI_START 2
|
||||
|
||||
int_fast8_t
|
||||
usb_send_bulk_in(void *data, uint_fast8_t len)
|
||||
// Send bulk packet to host with double buffering optimization
|
||||
static int_fast8_t
|
||||
usb_send_bulk_in_double_buffer(void *data, uint_fast8_t len)
|
||||
{
|
||||
if (readl(&bulk_in_pop_flag))
|
||||
// No buffer space available
|
||||
|
|
@ -275,6 +276,21 @@ usb_send_bulk_in(void *data, uint_fast8_t len)
|
|||
return len;
|
||||
}
|
||||
|
||||
// Send bulk usb packet to host
|
||||
int_fast8_t
|
||||
usb_send_bulk_in(void *data, uint_fast8_t len)
|
||||
{
|
||||
if (CONFIG_STM32_USB_DOUBLE_BUFFER_TX)
|
||||
return usb_send_bulk_in_double_buffer(data, len);
|
||||
uint32_t ep = USB_CDC_EP_BULK_IN, epr = USB_EPR[ep];
|
||||
if ((epr & USB_EPTX_STAT) != USB_EP_TX_NAK)
|
||||
// No buffer space available
|
||||
return -1;
|
||||
btable_write_packet(ep, BUFTX, data, len);
|
||||
USB_EPR[ep] = calc_epr_bits(epr, USB_EPTX_STAT, USB_EP_TX_VALID);
|
||||
return len;
|
||||
}
|
||||
|
||||
int_fast8_t
|
||||
usb_read_ep0(void *data, uint_fast8_t max_len)
|
||||
{
|
||||
|
|
@ -333,9 +349,10 @@ usb_set_configure(void)
|
|||
bulk_out_pop_count = 0;
|
||||
USB_EPR[ep] = calc_epr_bits(USB_EPR[ep], USB_EPRX_STAT, USB_EP_RX_VALID);
|
||||
|
||||
ep = USB_CDC_EP_BULK_IN;
|
||||
bulk_in_push_pos = BI_START;
|
||||
writel(&bulk_in_pop_flag, 0);
|
||||
if (CONFIG_STM32_USB_DOUBLE_BUFFER_TX) {
|
||||
bulk_in_push_pos = BI_START;
|
||||
writel(&bulk_in_pop_flag, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -360,9 +377,12 @@ usb_reset(void)
|
|||
bulk_out_push_flag = USB_EP_DTOG_TX;
|
||||
|
||||
ep = USB_CDC_EP_BULK_IN;
|
||||
USB_EPR[ep] = (USB_CDC_EP_BULK_IN | USB_EP_BULK | USB_EP_KIND
|
||||
| USB_EP_TX_NAK);
|
||||
bulk_in_pop_flag = USB_EP_DTOG_RX;
|
||||
uint32_t bi_epr_flags = USB_CDC_EP_BULK_IN | USB_EP_BULK | USB_EP_TX_NAK;
|
||||
if (CONFIG_STM32_USB_DOUBLE_BUFFER_TX) {
|
||||
bi_epr_flags |= USB_EP_KIND;
|
||||
bulk_in_pop_flag = USB_EP_DTOG_RX;
|
||||
}
|
||||
USB_EPR[ep] = bi_epr_flags;
|
||||
|
||||
USB->CNTR = USB_CNTR_CTRM | USB_CNTR_RESETM;
|
||||
USB->DADDR = USB_DADDR_EF;
|
||||
|
|
@ -382,9 +402,12 @@ USB_IRQHandler(void)
|
|||
bulk_out_push_flag = 0;
|
||||
usb_notify_bulk_out();
|
||||
} else if (ep == USB_CDC_EP_BULK_IN) {
|
||||
USB_EPR[ep] = (calc_epr_bits(epr, USB_EP_CTR_RX | USB_EP_CTR_TX, 0)
|
||||
| bulk_in_pop_flag);
|
||||
bulk_in_pop_flag = 0;
|
||||
uint32_t ne = calc_epr_bits(epr, USB_EP_CTR_RX | USB_EP_CTR_TX, 0);
|
||||
if (CONFIG_STM32_USB_DOUBLE_BUFFER_TX) {
|
||||
ne |= bulk_in_pop_flag;
|
||||
bulk_in_pop_flag = 0;
|
||||
}
|
||||
USB_EPR[ep] = ne;
|
||||
usb_notify_bulk_in();
|
||||
} else if (ep == 0) {
|
||||
USB_EPR[ep] = calc_epr_bits(epr, USB_EP_CTR_RX | USB_EP_CTR_TX, 0);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue