From: Samuel Thibault <samuel.thibault@gnu.org>
To: Jason Andryuk <jandryuk@gmail.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>, qemu-devel@nongnu.org
Subject: Re: [PATCH 1/4] usb-serial: Move USB_TOKEN_IN into a helper function
Date: Sat, 14 Mar 2020 00:56:09 +0100 [thread overview]
Message-ID: <20200313235609.bmfiyzhsat3pqvkt@function> (raw)
In-Reply-To: <20200312125524.7812-2-jandryuk@gmail.com>
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 <jandryuk@gmail.com>
Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
> ---
> 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"
next prev parent reply other threads:[~2020-03-13 23:56 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-12 12:55 [PATCH 0/4] usb-serial: xHCI and timeout fixes Jason Andryuk
2020-03-12 12:55 ` [PATCH 1/4] usb-serial: Move USB_TOKEN_IN into a helper function Jason Andryuk
2020-03-13 23:56 ` Samuel Thibault [this message]
2020-03-16 11:40 ` Gerd Hoffmann
2020-03-16 12:05 ` Jason Andryuk
2020-03-12 12:55 ` [PATCH 2/4] usb-serial: chunk data to wMaxPacketSize Jason Andryuk
2020-03-14 0:07 ` Samuel Thibault
2020-03-12 12:55 ` [PATCH 3/4] usb-serial: Increase receive buffer to 496 Jason Andryuk
2020-03-14 21:40 ` Samuel Thibault
2020-03-12 12:55 ` [PATCH 4/4] usb-serial: Fix timeout closing the device Jason Andryuk
2020-03-14 21:41 ` Samuel Thibault
2020-03-12 13:14 ` [PATCH 0/4] usb-serial: xHCI and timeout fixes no-reply
2020-03-12 13:31 ` no-reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200313235609.bmfiyzhsat3pqvkt@function \
--to=samuel.thibault@gnu.org \
--cc=jandryuk@gmail.com \
--cc=kraxel@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).