diff options
author | Jason Wessel <jason.wessel@windriver.com> | 2009-05-18 10:00:26 -0500 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-05-22 10:50:34 -0500 |
commit | 7e57f0493a661e57c5a2572a8818d35267482922 (patch) | |
tree | 6bf34f08b0c6b0621869f2e80c5384591cdf6a0e | |
parent | 0928a95ffe91862938cee997c9e30602fa7884ab (diff) |
usb-serial: implement break event.
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>
-rw-r--r-- | 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 be231f91ed..19870a53cc 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; |