[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 1/4] usb-serial: Move USB_TOKEN_IN into a helper function
From: |
Samuel Thibault |
Subject: |
Re: [PATCH 1/4] usb-serial: Move USB_TOKEN_IN into a helper function |
Date: |
Sat, 14 Mar 2020 00:56:09 +0100 |
User-agent: |
NeoMutt/20170609 (1.8.3) |
Jason Andryuk, le jeu. 12 mars 2020 08:55:20 -0400, a ecrit:
> We'll be adding a loop, so move the code into a helper function. breaks
> are replaced with returns.
>
> Signed-off-by: Jason Andryuk <address@hidden>
Reviewed-by: Samuel Thibault <address@hidden>
> ---
> hw/usb/dev-serial.c | 77 +++++++++++++++++++++++++--------------------
> 1 file changed, 43 insertions(+), 34 deletions(-)
>
> diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c
> index daac75b7ae..71fa786bd8 100644
> --- a/hw/usb/dev-serial.c
> +++ b/hw/usb/dev-serial.c
> @@ -358,13 +358,53 @@ static void usb_serial_handle_control(USBDevice *dev,
> USBPacket *p,
> }
> }
>
> +static void usb_serial_token_in(USBSerialState *s, USBPacket *p)
> +{
> + int first_len, len;
> + uint8_t header[2];
> +
> + first_len = RECV_BUF - s->recv_ptr;
> + len = p->iov.size;
> + if (len <= 2) {
> + p->status = USB_RET_NAK;
> + return;
> + }
> + header[0] = usb_get_modem_lines(s) | 1;
> + /* We do not have the uart details */
> + /* handle serial break */
> + if (s->event_trigger && s->event_trigger & FTDI_BI) {
> + s->event_trigger &= ~FTDI_BI;
> + header[1] = FTDI_BI;
> + usb_packet_copy(p, header, 2);
> + return;
> + } else {
> + header[1] = 0;
> + }
> + len -= 2;
> + if (len > s->recv_used)
> + len = s->recv_used;
> + if (!len) {
> + p->status = USB_RET_NAK;
> + return;
> + }
> + if (first_len > len)
> + first_len = len;
> + usb_packet_copy(p, header, 2);
> + usb_packet_copy(p, s->recv_buf + s->recv_ptr, first_len);
> + if (len > first_len)
> + usb_packet_copy(p, s->recv_buf, len - first_len);
> + s->recv_used -= len;
> + s->recv_ptr = (s->recv_ptr + len) % RECV_BUF;
> +
> + return;
> +}
> +
> static void usb_serial_handle_data(USBDevice *dev, USBPacket *p)
> {
> USBSerialState *s = (USBSerialState *)dev;
> uint8_t devep = p->ep->nr;
> struct iovec *iov;
> - uint8_t header[2];
> - int i, first_len, len;
> + int i;
>
> switch (p->pid) {
> case USB_TOKEN_OUT:
> @@ -382,38 +422,7 @@ static void usb_serial_handle_data(USBDevice *dev,
> USBPacket *p)
> case USB_TOKEN_IN:
> if (devep != 1)
> goto fail;
> - first_len = RECV_BUF - s->recv_ptr;
> - len = p->iov.size;
> - if (len <= 2) {
> - p->status = USB_RET_NAK;
> - break;
> - }
> - header[0] = usb_get_modem_lines(s) | 1;
> - /* We do not have the uart details */
> - /* handle serial break */
> - if (s->event_trigger && s->event_trigger & FTDI_BI) {
> - s->event_trigger &= ~FTDI_BI;
> - header[1] = FTDI_BI;
> - usb_packet_copy(p, header, 2);
> - break;
> - } else {
> - header[1] = 0;
> - }
> - len -= 2;
> - if (len > s->recv_used)
> - len = s->recv_used;
> - if (!len) {
> - p->status = USB_RET_NAK;
> - break;
> - }
> - if (first_len > len)
> - first_len = len;
> - usb_packet_copy(p, header, 2);
> - usb_packet_copy(p, s->recv_buf + s->recv_ptr, first_len);
> - if (len > first_len)
> - usb_packet_copy(p, s->recv_buf, len - first_len);
> - s->recv_used -= len;
> - s->recv_ptr = (s->recv_ptr + len) % RECV_BUF;
> + usb_serial_token_in(s, p);
> break;
>
> default:
> --
> 2.24.1
>
--
Samuel
Tu as lu les docs. Tu es devenu un informaticien. Que tu le veuilles
ou non. Lire la doc, c'est le Premier et Unique Commandement de
l'informaticien.
-+- TP in: Guide du Linuxien pervers - "L'évangile selon St Thomas"
- [PATCH 0/4] usb-serial: xHCI and timeout fixes, Jason Andryuk, 2020/03/12
- [PATCH 1/4] usb-serial: Move USB_TOKEN_IN into a helper function, Jason Andryuk, 2020/03/12
- [PATCH 2/4] usb-serial: chunk data to wMaxPacketSize, Jason Andryuk, 2020/03/12
- [PATCH 3/4] usb-serial: Increase receive buffer to 496, Jason Andryuk, 2020/03/12
- [PATCH 4/4] usb-serial: Fix timeout closing the device, Jason Andryuk, 2020/03/12
- Re: [PATCH 0/4] usb-serial: xHCI and timeout fixes, no-reply, 2020/03/12
- Re: [PATCH 0/4] usb-serial: xHCI and timeout fixes, no-reply, 2020/03/12