Implement sysrq for the pl011.  This was tested on
the ARM Versatile AB + kernel.org 2.6.X kernel.

Signed-off-by: Jason Wessel <[EMAIL PROTECTED]>

---
 hw/pl011.c |   19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

--- a/hw/pl011.c
+++ b/hw/pl011.c
@@ -208,7 +208,24 @@ static void pl011_receive(void *opaque, 
 
 static void pl011_event(void *opaque, int event)
 {
-    /* ??? Should probably implement break.  */
+    if (event == CHR_EVENT_BREAK) {
+        pl011_state *s = (pl011_state *)opaque;
+        int slot;
+
+        slot = s->read_pos + s->read_count;
+        if (slot >= 16)
+            slot -= 16;
+        s->read_fifo[slot] = 0x400;
+        s->read_count++;
+        s->flags &= ~PL011_FLAG_RXFE;
+        if (s->cr & 0x10 || s->read_count == 16) {
+            s->flags |= PL011_FLAG_RXFF;
+        }
+        if (s->read_count == s->read_trigger) {
+            s->int_level |= PL011_INT_RX;
+            pl011_update(s);
+        }
+    }
 }
 
 static CPUReadMemoryFunc *pl011_readfn[] = {


Reply via email to