Merge pull request #672 from majbthrd/rp2040trim
rp2040: correctly size variables to reduce RAM usage
This commit is contained in:
commit
50a0bddd8b
|
@ -48,8 +48,8 @@
|
||||||
// Init these in dcd_init
|
// Init these in dcd_init
|
||||||
static uint8_t *next_buffer_ptr;
|
static uint8_t *next_buffer_ptr;
|
||||||
|
|
||||||
// Endpoints 0-15, direction 0 for out and 1 for in.
|
// USB_MAX_ENDPOINTS Endpoints, direction 0 for out and 1 for in.
|
||||||
static struct hw_endpoint hw_endpoints[16][2] = {0};
|
static struct hw_endpoint hw_endpoints[USB_MAX_ENDPOINTS][2] = {0};
|
||||||
|
|
||||||
static inline struct hw_endpoint *hw_endpoint_get_by_num(uint8_t num, uint8_t in)
|
static inline struct hw_endpoint *hw_endpoint_get_by_num(uint8_t num, uint8_t in)
|
||||||
{
|
{
|
||||||
|
@ -64,7 +64,7 @@ static struct hw_endpoint *hw_endpoint_get_by_addr(uint8_t ep_addr)
|
||||||
}
|
}
|
||||||
static void _hw_endpoint_alloc(struct hw_endpoint *ep)
|
static void _hw_endpoint_alloc(struct hw_endpoint *ep)
|
||||||
{
|
{
|
||||||
uint size = TU_MIN(64, ep->wMaxPacketSize);
|
uint16_t size = tu_min16(64, ep->wMaxPacketSize);
|
||||||
|
|
||||||
// Assumes single buffered for now
|
// Assumes single buffered for now
|
||||||
ep->hw_data_buf = next_buffer_ptr;
|
ep->hw_data_buf = next_buffer_ptr;
|
||||||
|
@ -99,7 +99,7 @@ static void _hw_endpoint_alloc(struct hw_endpoint *ep)
|
||||||
*ep->endpoint_control = reg;
|
*ep->endpoint_control = reg;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _hw_endpoint_init(struct hw_endpoint *ep, uint8_t ep_addr, uint wMaxPacketSize, uint8_t transfer_type)
|
static void _hw_endpoint_init(struct hw_endpoint *ep, uint8_t ep_addr, uint16_t wMaxPacketSize, uint8_t transfer_type)
|
||||||
{
|
{
|
||||||
uint8_t num = tu_edpt_number(ep_addr);
|
uint8_t num = tu_edpt_number(ep_addr);
|
||||||
bool in = ep_addr & TUSB_DIR_IN_MASK;
|
bool in = ep_addr & TUSB_DIR_IN_MASK;
|
||||||
|
@ -194,7 +194,7 @@ static void hw_endpoint_close(uint8_t ep_addr)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void hw_endpoint_init(uint8_t ep_addr, uint wMaxPacketSize, uint8_t bmAttributes)
|
static void hw_endpoint_init(uint8_t ep_addr, uint16_t wMaxPacketSize, uint8_t bmAttributes)
|
||||||
{
|
{
|
||||||
struct hw_endpoint *ep = hw_endpoint_get_by_addr(ep_addr);
|
struct hw_endpoint *ep = hw_endpoint_get_by_addr(ep_addr);
|
||||||
_hw_endpoint_init(ep, ep_addr, wMaxPacketSize, bmAttributes);
|
_hw_endpoint_init(ep, ep_addr, wMaxPacketSize, bmAttributes);
|
||||||
|
|
|
@ -30,7 +30,6 @@
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "rp2040_usb.h"
|
#include "rp2040_usb.h"
|
||||||
#include "hardware/clocks.h"
|
|
||||||
|
|
||||||
// Direction strings for debug
|
// Direction strings for debug
|
||||||
const char *ep_dir_string[] = {
|
const char *ep_dir_string[] = {
|
||||||
|
@ -153,7 +152,7 @@ void _hw_endpoint_xfer_start(struct hw_endpoint *ep, uint8_t *buffer, uint16_t t
|
||||||
// Fill in info now that we're kicking off the hw
|
// Fill in info now that we're kicking off the hw
|
||||||
ep->total_len = total_len;
|
ep->total_len = total_len;
|
||||||
ep->len = 0;
|
ep->len = 0;
|
||||||
ep->transfer_size = tu_min32(total_len, ep->wMaxPacketSize);
|
ep->transfer_size = tu_min16(total_len, ep->wMaxPacketSize);
|
||||||
ep->active = true;
|
ep->active = true;
|
||||||
ep->user_buf = buffer;
|
ep->user_buf = buffer;
|
||||||
// Recalculate if this is the last buffer
|
// Recalculate if this is the last buffer
|
||||||
|
@ -172,7 +171,7 @@ void _hw_endpoint_xfer_sync(struct hw_endpoint *ep)
|
||||||
// Get the buffer state and amount of bytes we have
|
// Get the buffer state and amount of bytes we have
|
||||||
// transferred
|
// transferred
|
||||||
uint32_t buf_ctrl = _hw_endpoint_buffer_control_get_value32(ep);
|
uint32_t buf_ctrl = _hw_endpoint_buffer_control_get_value32(ep);
|
||||||
uint transferred_bytes = buf_ctrl & USB_BUF_CTRL_LEN_MASK;
|
uint16_t transferred_bytes = buf_ctrl & USB_BUF_CTRL_LEN_MASK;
|
||||||
|
|
||||||
#ifdef RP2040_USB_HOST_MODE
|
#ifdef RP2040_USB_HOST_MODE
|
||||||
// tag::host_buf_sel_fix[]
|
// tag::host_buf_sel_fix[]
|
||||||
|
@ -230,8 +229,8 @@ bool _hw_endpoint_xfer_continue(struct hw_endpoint *ep)
|
||||||
_hw_endpoint_xfer_sync(ep);
|
_hw_endpoint_xfer_sync(ep);
|
||||||
|
|
||||||
// Now we have synced our state with the hardware. Is there more data to transfer?
|
// Now we have synced our state with the hardware. Is there more data to transfer?
|
||||||
uint remaining_bytes = ep->total_len - ep->len;
|
uint16_t remaining_bytes = ep->total_len - ep->len;
|
||||||
ep->transfer_size = tu_min32(remaining_bytes, ep->wMaxPacketSize);
|
ep->transfer_size = tu_min16(remaining_bytes, ep->wMaxPacketSize);
|
||||||
_hw_endpoint_update_last_buf(ep);
|
_hw_endpoint_update_last_buf(ep);
|
||||||
|
|
||||||
// Can happen because of programmer error so check for it
|
// Can happen because of programmer error so check for it
|
||||||
|
|
|
@ -67,10 +67,10 @@ struct hw_endpoint
|
||||||
|
|
||||||
// Current transfer information
|
// Current transfer information
|
||||||
bool active;
|
bool active;
|
||||||
uint total_len;
|
uint16_t total_len;
|
||||||
uint len;
|
uint16_t len;
|
||||||
// Amount of data with the hardware
|
// Amount of data with the hardware
|
||||||
uint transfer_size;
|
uint16_t transfer_size;
|
||||||
// Only needed for host mode
|
// Only needed for host mode
|
||||||
bool last_buf;
|
bool last_buf;
|
||||||
// HOST BUG. Host will incorrect write status to top half of buffer
|
// HOST BUG. Host will incorrect write status to top half of buffer
|
||||||
|
@ -80,7 +80,7 @@ struct hw_endpoint
|
||||||
uint8_t *user_buf;
|
uint8_t *user_buf;
|
||||||
|
|
||||||
// Data needed from EP descriptor
|
// Data needed from EP descriptor
|
||||||
uint wMaxPacketSize;
|
uint16_t wMaxPacketSize;
|
||||||
// Interrupt, bulk, etc
|
// Interrupt, bulk, etc
|
||||||
uint8_t transfer_type;
|
uint8_t transfer_type;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue