All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/3] usb and non usb serial improvements
@ 2009-05-18 15:00 Jason Wessel
  2009-05-18 15:00 ` [Qemu-devel] [PATCH 1/3] usb-serial: implement break event Jason Wessel
  0 siblings, 1 reply; 5+ messages in thread
From: Jason Wessel @ 2009-05-18 15:00 UTC (permalink / raw)
  To: qemu-devel

These are a number of small fixes to improve qemu for serial devices.
I rolled all three outstanding patches into one series since they are
all related to qemu's handling of serial communications devices.

The 3rd patch in the series has been around a long time and there a
number of folks in the qemu community are hand patching it in to their
tree, or have asked about why it has not been merged.

Please consider these patches for merging to the qemu development
branch.  If there are questions about the patches, I am happy to
provide answers.


Thanks,
Jason.

---

Jason Wessel (3):
      usb-serial: implement break event.
      serial: fix lost character after sysrq
      USB serial device support

 hw/serial.c     |    2 ++
 hw/usb-serial.c |   12 ++++++++++--
 usb-linux.c     |    3 +--
 3 files changed, 13 insertions(+), 4 deletions(-)

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Qemu-devel] [PATCH 1/3] usb-serial: implement break event.
  2009-05-18 15:00 [Qemu-devel] [PATCH 0/3] usb and non usb serial improvements Jason Wessel
@ 2009-05-18 15:00 ` Jason Wessel
  2009-05-18 15:00   ` [Qemu-devel] [PATCH 2/3] serial: fix lost character after sysrq Jason Wessel
  0 siblings, 1 reply; 5+ messages in thread
From: Jason Wessel @ 2009-05-18 15:00 UTC (permalink / raw)
  To: qemu-devel

Implement the serial break via usb serial.

The second data byte in ftdi status packet contains the break status.
The values were already defined in usb-serial.c so it was a matter of
making use of the event_trigger to form a urb to send over to the host
controller with the serial break status set.

This was tested against a linux development image which enables sysrq
via a serial break on the ftdi usb console.

Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
---
 hw/usb-serial.c |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/hw/usb-serial.c b/hw/usb-serial.c
index be231f9..19870a5 100644
--- a/hw/usb-serial.c
+++ b/hw/usb-serial.c
@@ -445,7 +445,15 @@ static int usb_serial_handle_data(USBDevice *dev, USBPacket *p)
         }
         *data++ = usb_get_modem_lines(s) | 1;
         /* We do not have the uart details */
-        *data++ = 0;
+        /* handle serial break */
+        if (s->event_trigger && s->event_trigger & FTDI_BI) {
+            s->event_trigger &= ~FTDI_BI;
+            *data++ = FTDI_BI;
+            ret = 2;
+            break;
+        } else {
+            *data++ = 0;
+        }
         len -= 2;
         if (len > s->recv_used)
             len = s->recv_used;
@@ -505,7 +513,7 @@ static void usb_serial_event(void *opaque, int event)
 
     switch (event) {
         case CHR_EVENT_BREAK:
-            /* TODO: Send Break to USB */
+            s->event_trigger |= FTDI_BI;
             break;
         case CHR_EVENT_FOCUS:
             break;
-- 
1.6.3.1.9.g95405b

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [Qemu-devel] [PATCH 2/3] serial: fix lost character after sysrq
  2009-05-18 15:00 ` [Qemu-devel] [PATCH 1/3] usb-serial: implement break event Jason Wessel
@ 2009-05-18 15:00   ` Jason Wessel
  2009-05-18 15:00     ` [Qemu-devel] [PATCH 3/3] USB serial device support Jason Wessel
  0 siblings, 1 reply; 5+ messages in thread
From: Jason Wessel @ 2009-05-18 15:00 UTC (permalink / raw)
  To: qemu-devel

After creating an automated regression test to test the sysrq
responses while running a linux image in qemu, I found that the
simulated uart was eating the character right after the sysrq about
75% of the time.

The problem is that the qemu sets the LSR_DR (data ready) bit on a
serial break.  The automated tests can send a break and the sysrq
character quickly enough that the qemu serial fifo has a real
character available. When there is valid character in the fifo, it
gets consumed by the serial driver in the guest OS.

The real hardware also appears to set the LSR_DR but always appears to
have a null byte in this condition.  This patch changes the qemu
behavior to match the tested characteristics of a real 16550 chip.

Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
---
 hw/serial.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/hw/serial.c b/hw/serial.c
index ac089fc..113829c 100644
--- a/hw/serial.c
+++ b/hw/serial.c
@@ -586,6 +586,8 @@ static int serial_can_receive(SerialState *s)
 static void serial_receive_break(SerialState *s)
 {
     s->rbr = 0;
+    /* When the LSR_DR is set a null byte is pushed into the fifo */
+    fifo_put(s, RECV_FIFO, '\0');
     s->lsr |= UART_LSR_BI | UART_LSR_DR;
     serial_update_irq(s);
 }
-- 
1.6.3.1.9.g95405b

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [Qemu-devel] [PATCH 3/3] USB serial device support
  2009-05-18 15:00   ` [Qemu-devel] [PATCH 2/3] serial: fix lost character after sysrq Jason Wessel
@ 2009-05-18 15:00     ` Jason Wessel
  2009-05-18 15:46       ` Pantelis Koukousoulas
  0 siblings, 1 reply; 5+ messages in thread
From: Jason Wessel @ 2009-05-18 15:00 UTC (permalink / raw)
  To: qemu-devel

Add in a workaround to allow the usb serial devices to work with the
usb pass through mechanism.  The ioctl() to request an alternate
interface will always return < 0 for a usb-serial device based on the
kernel driver.  This means there is no alternate interface end point.

This was fully tested with a pl2303 usb serial device.

Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
---
 usb-linux.c |    3 +--
 1 files changed, 1 insertions(+), 2 deletions(-)

diff --git a/usb-linux.c b/usb-linux.c
index 70d7a1c..67e4acd 100644
--- a/usb-linux.c
+++ b/usb-linux.c
@@ -833,8 +833,7 @@ static int usb_linux_update_endp_table(USBHostDevice *s)
 
         ret = ioctl(s->fd, USBDEVFS_CONTROL, &ct);
         if (ret < 0) {
-            perror("usb_linux_update_endp_table");
-            return 1;
+            alt_interface = interface;
         }
 
         /* the current interface descriptor is the active interface
-- 
1.6.3.1.9.g95405b

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [Qemu-devel] [PATCH 3/3] USB serial device support
  2009-05-18 15:00     ` [Qemu-devel] [PATCH 3/3] USB serial device support Jason Wessel
@ 2009-05-18 15:46       ` Pantelis Koukousoulas
  0 siblings, 0 replies; 5+ messages in thread
From: Pantelis Koukousoulas @ 2009-05-18 15:46 UTC (permalink / raw)
  To: Jason Wessel; +Cc: qemu-devel

On Mon, May 18, 2009 at 6:00 PM, Jason Wessel
<jason.wessel@windriver.com> wrote:
> Add in a workaround to allow the usb serial devices to work with the
> usb pass through mechanism.  The ioctl() to request an alternate
> interface will always return < 0 for a usb-serial device based on the
> kernel driver.  This means there is no alternate interface end point.
>
> This was fully tested with a pl2303 usb serial device.
>
> Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
> ---
>  usb-linux.c |    3 +--
>  1 files changed, 1 insertions(+), 2 deletions(-)
>
> diff --git a/usb-linux.c b/usb-linux.c
> index 70d7a1c..67e4acd 100644
> --- a/usb-linux.c
> +++ b/usb-linux.c
> @@ -833,8 +833,7 @@ static int usb_linux_update_endp_table(USBHostDevice *s)
>
>         ret = ioctl(s->fd, USBDEVFS_CONTROL, &ct);
>         if (ret < 0) {
> -            perror("usb_linux_update_endp_table");
> -            return 1;
> +            alt_interface = interface;
>         }
>
>         /* the current interface descriptor is the active interface
> --
> 1.6.3.1.9.g95405b

+1 for this patch.
I 've tested it with my UPS (usb-serial essentially), a usb-serial adaptor
but even my konig gamepad doesn't work without it.

tested-by: Pantelis Koukousoulas <pktoss@gmail.com>

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2009-05-18 15:46 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-05-18 15:00 [Qemu-devel] [PATCH 0/3] usb and non usb serial improvements Jason Wessel
2009-05-18 15:00 ` [Qemu-devel] [PATCH 1/3] usb-serial: implement break event Jason Wessel
2009-05-18 15:00   ` [Qemu-devel] [PATCH 2/3] serial: fix lost character after sysrq Jason Wessel
2009-05-18 15:00     ` [Qemu-devel] [PATCH 3/3] USB serial device support Jason Wessel
2009-05-18 15:46       ` Pantelis Koukousoulas

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.