qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH] sparc32 no keyboard mode


From: Robert Reif
Subject: [Qemu-devel] [PATCH] sparc32 no keyboard mode
Date: Sun, 02 Dec 2007 18:55:03 -0500
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4.2) Gecko/20040308

If a sun system is booted without a keyboard, it uses serial port A for the console.

This patch disables (unplugs) the keyboard when -nographic is set on the command line.
Another option would be to add a -nokeyboard option to the command line.
Index: hw/slavio_serial.c
===================================================================
RCS file: /sources/qemu/qemu/hw/slavio_serial.c,v
retrieving revision 1.28
diff -p -u -r1.28 slavio_serial.c
--- hw/slavio_serial.c  25 Nov 2007 08:48:16 -0000      1.28
+++ hw/slavio_serial.c  2 Dec 2007 23:47:08 -0000
@@ -100,6 +100,7 @@ typedef struct ChannelState {
     SERIOQueue queue;
     CharDriverState *chr;
     int e0_mode, led_mode, caps_lock_mode, num_lock_mode;
+    int disabled;
 } ChannelState;
 
 struct SerialState {
@@ -193,7 +194,10 @@ static void slavio_serial_reset_chn(Chan
     s->wregs[11] = 8;
     s->wregs[14] = 0x30;
     s->wregs[15] = 0xf8;
-    s->rregs[0] = 0x44;
+    if (s->disabled)
+        s->rregs[0] = 0x7c;
+    else
+        s->rregs[0] = 0x44;
     s->rregs[1] = 6;
 
     s->rx = s->tx = 0;
@@ -437,7 +441,7 @@ static void slavio_serial_mem_writeb(voi
         if (s->wregs[5] & 8) { // tx enabled
             if (s->chr)
                 qemu_chr_write(s->chr, &s->tx, 1);
-            else if (s->type == kbd) {
+            else if (s->type == kbd && !s->disabled) {
                 handle_kbd_command(s, val);
             }
         }
@@ -765,7 +769,8 @@ static void sunmouse_event(void *opaque,
     put_queue(s, 0);
 }
 
-void slavio_serial_ms_kbd_init(target_phys_addr_t base, qemu_irq irq)
+void slavio_serial_ms_kbd_init(target_phys_addr_t base, qemu_irq irq,
+                               int disabled)
 {
     int slavio_serial_io_memory, i;
     SerialState *s;
@@ -782,6 +787,8 @@ void slavio_serial_ms_kbd_init(target_ph
     s->chn[1].otherchn = &s->chn[0];
     s->chn[0].type = mouse;
     s->chn[1].type = kbd;
+    s->chn[0].disabled = disabled;
+    s->chn[1].disabled = disabled;
 
     slavio_serial_io_memory = cpu_register_io_memory(0, 
slavio_serial_mem_read, slavio_serial_mem_write, s);
     cpu_register_physical_memory(base, SERIAL_SIZE, slavio_serial_io_memory);
Index: hw/sun4m.c
===================================================================
RCS file: /sources/qemu/qemu/hw/sun4m.c,v
retrieving revision 1.66
diff -p -u -r1.66 sun4m.c
--- hw/sun4m.c  2 Dec 2007 04:51:10 -0000       1.66
+++ hw/sun4m.c  2 Dec 2007 23:47:09 -0000
@@ -436,7 +443,8 @@ static void sun4m_hw_init(const struct h
     slavio_timer_init_all(hwdef->counter_base, slavio_irq[hwdef->clock1_irq],
                           slavio_cpu_irq);
 
-    slavio_serial_ms_kbd_init(hwdef->ms_kb_base, slavio_irq[hwdef->ms_kb_irq]);
+    slavio_serial_ms_kbd_init(hwdef->ms_kb_base, slavio_irq[hwdef->ms_kb_irq],
+                              nographic);
     // Slavio TTYA (base+4, Linux ttyS0) is the first Qemu serial device
     // Slavio TTYB (base+0, Linux ttyS1) is the second Qemu serial device
     slavio_serial_init(hwdef->serial_base, slavio_irq[hwdef->ser_irq],
Index: hw/sun4m.h
===================================================================
RCS file: /sources/qemu/qemu/hw/sun4m.h,v
retrieving revision 1.2
diff -p -u -r1.2 sun4m.h
--- hw/sun4m.h  2 Dec 2007 04:51:10 -0000       1.2
+++ hw/sun4m.h  2 Dec 2007 23:47:09 -0000
@@ -41,7 +41,8 @@ void slavio_timer_init_all(target_phys_a
 /* slavio_serial.c */
 SerialState *slavio_serial_init(target_phys_addr_t base, qemu_irq irq,
                                 CharDriverState *chr1, CharDriverState *chr2);
-void slavio_serial_ms_kbd_init(target_phys_addr_t base, qemu_irq irq);
+void slavio_serial_ms_kbd_init(target_phys_addr_t base, qemu_irq irq,
+                               int disabled);
 
 /* slavio_misc.c */
 void *slavio_misc_init(target_phys_addr_t base, target_phys_addr_t power_base,

reply via email to

[Prev in Thread] Current Thread [Next in Thread]