All of lore.kernel.org
 help / color / mirror / Atom feed
From: Samuel Thibault <samuel.thibault@gnu.org>
To: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Cc: qemu-devel@nongnu.org, kraxel@redhat.com
Subject: Re: [PATCH 9/9] dev-serial: store flow control and xon/xoff characters
Date: Mon, 26 Oct 2020 10:58:30 +0100	[thread overview]
Message-ID: <20201026095830.7zqxynbhif7pyl3d@function> (raw)
In-Reply-To: <20201026083401.13231-10-mark.cave-ayland@ilande.co.uk>

Mark Cave-Ayland, le lun. 26 oct. 2020 08:34:01 +0000, a ecrit:
> Note that whilst the device does not do anything with these values, they are
> logged with trace events and stored to allow future implementation.
> 
> The default flow control is set to none at reset as documented in the Linux
> ftdi_sio.h header file.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>

Reviewed-by: Samuel Thibault <samuel.thibault@ens-lyon.org>

> ---
>  hw/usb/dev-serial.c | 38 +++++++++++++++++++++++++++++++++++---
>  hw/usb/trace-events |  2 ++
>  2 files changed, 37 insertions(+), 3 deletions(-)
> 
> diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c
> index fa734bcf54..3dbc56d77a 100644
> --- a/hw/usb/dev-serial.c
> +++ b/hw/usb/dev-serial.c
> @@ -52,6 +52,7 @@
>  
>  /* SET_FLOW_CTRL */
>  
> +#define FTDI_NO_HS         0
>  #define FTDI_RTS_CTS_HS    1
>  #define FTDI_DTR_DSR_HS    2
>  #define FTDI_XON_XOFF_HS   4
> @@ -98,6 +99,9 @@ struct USBSerialState {
>      uint8_t error_chr;
>      uint8_t event_trigger;
>      bool always_plugged;
> +    uint8_t flow_control;
> +    uint8_t xon;
> +    uint8_t xoff;
>      QEMUSerialSetParams params;
>      int latency;        /* ms */
>      CharBackend cs;
> @@ -181,14 +185,36 @@ static const USBDesc desc_braille = {
>      .str  = desc_strings,
>  };
>  
> +static void usb_serial_set_flow_control(USBSerialState *s,
> +                                        uint8_t flow_control)
> +{
> +    USBDevice *dev = USB_DEVICE(s);
> +    USBBus *bus = usb_bus_from_device(dev);
> +
> +    /* TODO: ioctl */
> +    s->flow_control = flow_control;
> +    trace_usb_serial_set_flow_control(bus->busnr, dev->addr, flow_control);
> +}
> +
> +static void usb_serial_set_xonxoff(USBSerialState *s, int xonxoff)
> +{
> +    USBDevice *dev = USB_DEVICE(s);
> +    USBBus *bus = usb_bus_from_device(dev);
> +
> +    s->xon = xonxoff & 0xff;
> +    s->xoff = (xonxoff >> 8) & 0xff;
> +
> +    trace_usb_serial_set_xonxoff(bus->busnr, dev->addr, s->xon, s->xoff);
> +}
> +
>  static void usb_serial_reset(USBSerialState *s)
>  {
> -    /* TODO: Set flow control to none */
>      s->event_chr = 0x0d;
>      s->event_trigger = 0;
>      s->recv_ptr = 0;
>      s->recv_used = 0;
>      /* TODO: purge in char driver */
> +    usb_serial_set_flow_control(s, FTDI_NO_HS);
>  }
>  
>  static void usb_serial_handle_reset(USBDevice *dev)
> @@ -285,9 +311,15 @@ static void usb_serial_handle_control(USBDevice *dev, USBPacket *p,
>          qemu_chr_fe_ioctl(&s->cs, CHR_IOCTL_SERIAL_SET_TIOCM, &flags);
>          break;
>      }
> -    case VendorDeviceOutRequest | FTDI_SET_FLOW_CTRL:
> -        /* TODO: ioctl */
> +    case VendorDeviceOutRequest | FTDI_SET_FLOW_CTRL: {
> +        uint8_t flow_control = index >> 8;
> +
> +        usb_serial_set_flow_control(s, flow_control);
> +        if (flow_control & FTDI_XON_XOFF_HS) {
> +            usb_serial_set_xonxoff(s, value);
> +        }
>          break;
> +    }
>      case VendorDeviceOutRequest | FTDI_SET_BAUD: {
>          static const int subdivisors8[8] = { 0, 4, 2, 1, 3, 5, 6, 7 };
>          int subdivisor8 = subdivisors8[((value & 0xc000) >> 14)
> diff --git a/hw/usb/trace-events b/hw/usb/trace-events
> index 0d0a3e5f2a..725b7077ad 100644
> --- a/hw/usb/trace-events
> +++ b/hw/usb/trace-events
> @@ -331,3 +331,5 @@ usb_serial_unsupported_data_bits(int bus, int addr, int value) "dev %d:%d unsupp
>  usb_serial_bad_token(int bus, int addr) "dev %d:%d bad token"
>  usb_serial_set_baud(int bus, int addr, int baud) "dev %d:%d baud rate %d"
>  usb_serial_set_data(int bus, int addr, int parity, int data, int stop) "dev %d:%d parity %c, data bits %d, stop bits %d"
> +usb_serial_set_flow_control(int bus, int addr, int index) "dev %d:%d flow control %d"
> +usb_serial_set_xonxoff(int bus, int addr, uint8_t xon, uint8_t xoff) "dev %d:%d xon 0x%x xoff 0x%x"
> -- 
> 2.20.1
> 

-- 
Samuel
> 	dvips -o $@ $<     
Faut faire gffe de pas te couper avec ton truc, t'as mis des ciseaux ($<)
partout :))
-+- Dom in Guide du linuxien pervers - "J'aime pas les Makefile !" -+-


  reply	other threads:[~2020-10-26  9:59 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-26  8:33 [PATCH 0/9] dev-serial: minor fixes and improvements Mark Cave-Ayland
2020-10-26  8:33 ` [PATCH 1/9] dev-serial: style changes to improve readability and checkpatch fixes Mark Cave-Ayland
2020-10-26  9:35   ` Samuel Thibault
2020-10-26  8:33 ` [PATCH 2/9] dev-serial: use USB_SERIAL QOM macro for USBSerialState assignments Mark Cave-Ayland
2020-10-26  9:37   ` Samuel Thibault
2020-10-27  9:04   ` Philippe Mathieu-Daudé
2020-10-26  8:33 ` [PATCH 3/9] dev-serial: convert from DPRINTF to trace-events Mark Cave-Ayland
2020-10-26  9:38   ` Samuel Thibault
2020-10-27  9:08   ` Philippe Mathieu-Daudé
2020-10-26  8:33 ` [PATCH 4/9] dev-serial: add trace-events for baud rate and data parameters Mark Cave-Ayland
2020-10-26  9:40   ` Samuel Thibault
2020-10-27  9:08   ` Philippe Mathieu-Daudé
2020-10-26  8:33 ` [PATCH 5/9] dev-serial: replace DeviceOutVendor/DeviceInVendor with equivalent macros from usb.h Mark Cave-Ayland
2020-10-26  9:41   ` Samuel Thibault
2020-10-27  9:09   ` Philippe Mathieu-Daudé
2020-10-26  8:33 ` [PATCH 6/9] dev-serial: add always-plugged property to ensure USB device is always attached Mark Cave-Ayland
2020-10-26  9:45   ` Samuel Thibault
2020-10-27  8:09   ` Gerd Hoffmann
2020-10-27 13:23     ` Mark Cave-Ayland
2020-10-26  8:33 ` [PATCH 7/9] dev-serial: add support for setting data_bits in QEMUSerialSetParams Mark Cave-Ayland
2020-10-26  9:46   ` Samuel Thibault
2020-10-26  8:34 ` [PATCH 8/9] dev-serial: fix FTDI_GET_MDM_ST response Mark Cave-Ayland
2020-10-26  9:54   ` Samuel Thibault
2020-10-26 10:58     ` Mark Cave-Ayland
2020-10-26 11:14       ` Samuel Thibault
2020-10-26 13:00         ` Jason Andryuk
2020-10-26 13:40           ` Mark Cave-Ayland
2020-10-26 14:04             ` Jason Andryuk
2020-10-26 15:04             ` Samuel Thibault
2020-10-27 13:18               ` Mark Cave-Ayland
2020-10-27 13:30                 ` Jason Andryuk
2020-10-26  8:34 ` [PATCH 9/9] dev-serial: store flow control and xon/xoff characters Mark Cave-Ayland
2020-10-26  9:58   ` Samuel Thibault [this message]
2020-10-26  9:59 ` [PATCH 0/9] dev-serial: minor fixes and improvements Samuel Thibault

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=20201026095830.7zqxynbhif7pyl3d@function \
    --to=samuel.thibault@gnu.org \
    --cc=kraxel@redhat.com \
    --cc=mark.cave-ayland@ilande.co.uk \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.