From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1M40g6-0003L0-HC for qemu-devel@nongnu.org; Tue, 12 May 2009 18:42:26 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1M40g2-0003IS-Sg for qemu-devel@nongnu.org; Tue, 12 May 2009 18:42:26 -0400 Received: from [199.232.76.173] (port=34147 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1M40g2-0003IB-FW for qemu-devel@nongnu.org; Tue, 12 May 2009 18:42:22 -0400 Received: from mail.windriver.com ([147.11.1.11]:58723 helo=mail.wrs.com) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1M40g1-0004mi-RB for qemu-devel@nongnu.org; Tue, 12 May 2009 18:42:22 -0400 Received: from ALA-MAIL03.corp.ad.wrs.com (ala-mail03 [147.11.57.144]) by mail.wrs.com (8.13.6/8.13.6) with ESMTP id n4CMgJgG010381 for ; Tue, 12 May 2009 15:42:19 -0700 (PDT) From: Jason Wessel Date: Tue, 12 May 2009 17:42:18 -0500 Message-Id: <1242168139-25537-1-git-send-email-jason.wessel@windriver.com> Subject: [Qemu-devel] [PATCH 1/2] usb-serial: implement break event. List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org 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 --- 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 5208482..2caf498 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.9.g6345d