diff options
author | Namyoon Woo <namyoon@chromium.org> | 2019-06-05 12:20:07 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-06-06 02:21:03 +0000 |
commit | 67114fa836c2c0d201dbb16ae88a6a9b66f1d94b (patch) | |
tree | 1754e74a517e5b0fb5b649525bbc490f8af4c69d /chip | |
parent | 9a5e19845eb76e0b10311b4829ab39ba73835fa3 (diff) | |
download | chrome-ec-67114fa836c2c0d201dbb16ae88a6a9b66f1d94b.tar.gz |
g: add rx_handled into USB_STREAM_CONFIG
The variable rx_handled tracks how many of the bytes in the HW FIFO
was moved into the incoming queue. It used to be defined as local
static variable for multiple USB_STREAM_CONFIGs, and could cause a
problem if multiple USB downstream traffic get heavier. It should
be defined for each USB_STREAM_CONFIG.
This patch add rx_handled into USB_STREAM_CONFIG, which tracks
how many of the bytes in the HW FIFO was moved into the incoming
queue.
BUG=None
BRANCH=None
TEST=manually ran uart_stress_tester.sh and flash_ec on Bob.
Change-Id: I561a54b0594a71b557693007a181bde48155d403
Signed-off-by: Namyoon Woo <namyoon@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1644958
Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
Diffstat (limited to 'chip')
-rw-r--r-- | chip/g/usb-stream.c | 17 | ||||
-rw-r--r-- | chip/g/usb-stream.h | 8 |
2 files changed, 15 insertions, 10 deletions
diff --git a/chip/g/usb-stream.c b/chip/g/usb-stream.c index 4d552913e3..67dcbb163a 100644 --- a/chip/g/usb-stream.c +++ b/chip/g/usb-stream.c @@ -36,7 +36,7 @@ static inline int rx_fifo_is_ready(struct usb_stream_config const *config) * other end of the queue (telling us that there's now more room in the queue * if we still have bytes to shove in there). */ -int rx_stream_handler(struct usb_stream_config const *config) +void rx_stream_handler(struct usb_stream_config const *config) { /* * The HW FIFO buffer (rx_ram) is always filled from [0] by the @@ -55,12 +55,13 @@ int rx_stream_handler(struct usb_stream_config const *config) * the next time this function is called we can try to shove the rest * of the HW FIFO bytes into the queue. */ - static int rx_handled; + int rx_handled; /* If the HW FIFO isn't ready, then we're waiting for more bytes */ if (!rx_fifo_is_ready(config)) - return 0; + return; + rx_handled = *(config->rx_handled); /* * How many of the HW FIFO bytes have we not yet handled? We need to * know both where we are in the buffer and how many bytes we haven't @@ -91,7 +92,8 @@ int rx_stream_handler(struct usb_stream_config const *config) } else { hook_call_deferred(config->deferred_rx, 0); } - return rx_handled; + + *(config->rx_handled) = rx_handled; } /* Rx/OUT interrupt handler */ @@ -111,21 +113,20 @@ static inline int tx_fifo_is_ready(struct usb_stream_config const *config) } /* Try to send some bytes to the host */ -int tx_stream_handler(struct usb_stream_config const *config) +void tx_stream_handler(struct usb_stream_config const *config) { size_t count; if (!*config->is_reset) - return 0; + return; if (!tx_fifo_is_ready(config)) - return 0; + return; count = QUEUE_REMOVE_UNITS(config->consumer.queue, config->tx_ram, config->tx_size); if (count) usb_enable_tx(config, count); - return count; } /* Tx/IN interrupt handler */ diff --git a/chip/g/usb-stream.h b/chip/g/usb-stream.h index 5eb03865b0..4787b50d08 100644 --- a/chip/g/usb-stream.h +++ b/chip/g/usb-stream.h @@ -46,6 +46,8 @@ struct usb_stream_config { struct g_usb_desc *out_desc; struct g_usb_desc *in_desc; + + int *rx_handled; }; /* @@ -113,6 +115,7 @@ extern struct producer_ops const usb_stream_producer_ops; DECLARE_DEFERRED(CONCAT2(NAME, _deferred_tx_)); \ static void CONCAT2(NAME, _deferred_rx_)(void); \ DECLARE_DEFERRED(CONCAT2(NAME, _deferred_rx_)); \ + static int CONCAT2(NAME, _rx_handled); \ struct usb_stream_config const NAME = { \ .endpoint = ENDPOINT, \ .is_reset = &CONCAT2(NAME, _is_reset_), \ @@ -132,6 +135,7 @@ extern struct producer_ops const usb_stream_producer_ops; .queue = &RX_QUEUE, \ .ops = &usb_stream_producer_ops, \ }, \ + .rx_handled = &CONCAT2(NAME, _rx_handled), \ }; \ const struct usb_interface_descriptor \ USB_IFACE_DESC(INTERFACE) = { \ @@ -208,8 +212,8 @@ extern struct producer_ops const usb_stream_producer_ops; /* * Handle USB and Queue request in a deferred callback. */ -int rx_stream_handler(struct usb_stream_config const *config); -int tx_stream_handler(struct usb_stream_config const *config); +void rx_stream_handler(struct usb_stream_config const *config); +void tx_stream_handler(struct usb_stream_config const *config); /* * These functions are used by the trampoline functions defined above to |