Commit 577390ff4b7ca39f3780cbfd67d02bff3d4bf8e5

Authored by blueswir1
1 parent 54215f7d

No keyboard mode (Robert Reif)


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3773 c046a42c-6fe2-441c-8c8c-71466251a162
hw/slavio_serial.c
@@ -100,6 +100,7 @@ typedef struct ChannelState { @@ -100,6 +100,7 @@ typedef struct ChannelState {
100 SERIOQueue queue; 100 SERIOQueue queue;
101 CharDriverState *chr; 101 CharDriverState *chr;
102 int e0_mode, led_mode, caps_lock_mode, num_lock_mode; 102 int e0_mode, led_mode, caps_lock_mode, num_lock_mode;
  103 + int disabled;
103 } ChannelState; 104 } ChannelState;
104 105
105 struct SerialState { 106 struct SerialState {
@@ -193,7 +194,10 @@ static void slavio_serial_reset_chn(ChannelState *s) @@ -193,7 +194,10 @@ static void slavio_serial_reset_chn(ChannelState *s)
193 s->wregs[11] = 8; 194 s->wregs[11] = 8;
194 s->wregs[14] = 0x30; 195 s->wregs[14] = 0x30;
195 s->wregs[15] = 0xf8; 196 s->wregs[15] = 0xf8;
196 - s->rregs[0] = 0x44; 197 + if (s->disabled)
  198 + s->rregs[0] = 0x7c;
  199 + else
  200 + s->rregs[0] = 0x44;
197 s->rregs[1] = 6; 201 s->rregs[1] = 6;
198 202
199 s->rx = s->tx = 0; 203 s->rx = s->tx = 0;
@@ -437,7 +441,7 @@ static void slavio_serial_mem_writeb(void *opaque, target_phys_addr_t addr, uint @@ -437,7 +441,7 @@ static void slavio_serial_mem_writeb(void *opaque, target_phys_addr_t addr, uint
437 if (s->wregs[5] & 8) { // tx enabled 441 if (s->wregs[5] & 8) { // tx enabled
438 if (s->chr) 442 if (s->chr)
439 qemu_chr_write(s->chr, &s->tx, 1); 443 qemu_chr_write(s->chr, &s->tx, 1);
440 - else if (s->type == kbd) { 444 + else if (s->type == kbd && !s->disabled) {
441 handle_kbd_command(s, val); 445 handle_kbd_command(s, val);
442 } 446 }
443 } 447 }
@@ -611,6 +615,8 @@ SerialState *slavio_serial_init(target_phys_addr_t base, qemu_irq irq, @@ -611,6 +615,8 @@ SerialState *slavio_serial_init(target_phys_addr_t base, qemu_irq irq,
611 615
612 s->chn[0].chr = chr1; 616 s->chn[0].chr = chr1;
613 s->chn[1].chr = chr2; 617 s->chn[1].chr = chr2;
  618 + s->chn[0].disabled = 0;
  619 + s->chn[1].disabled = 0;
614 620
615 for (i = 0; i < 2; i++) { 621 for (i = 0; i < 2; i++) {
616 s->chn[i].irq = irq; 622 s->chn[i].irq = irq;
@@ -765,7 +771,8 @@ static void sunmouse_event(void *opaque, @@ -765,7 +771,8 @@ static void sunmouse_event(void *opaque,
765 put_queue(s, 0); 771 put_queue(s, 0);
766 } 772 }
767 773
768 -void slavio_serial_ms_kbd_init(target_phys_addr_t base, qemu_irq irq) 774 +void slavio_serial_ms_kbd_init(target_phys_addr_t base, qemu_irq irq,
  775 + int disabled)
769 { 776 {
770 int slavio_serial_io_memory, i; 777 int slavio_serial_io_memory, i;
771 SerialState *s; 778 SerialState *s;
@@ -782,6 +789,8 @@ void slavio_serial_ms_kbd_init(target_phys_addr_t base, qemu_irq irq) @@ -782,6 +789,8 @@ void slavio_serial_ms_kbd_init(target_phys_addr_t base, qemu_irq irq)
782 s->chn[1].otherchn = &s->chn[0]; 789 s->chn[1].otherchn = &s->chn[0];
783 s->chn[0].type = mouse; 790 s->chn[0].type = mouse;
784 s->chn[1].type = kbd; 791 s->chn[1].type = kbd;
  792 + s->chn[0].disabled = disabled;
  793 + s->chn[1].disabled = disabled;
785 794
786 slavio_serial_io_memory = cpu_register_io_memory(0, slavio_serial_mem_read, slavio_serial_mem_write, s); 795 slavio_serial_io_memory = cpu_register_io_memory(0, slavio_serial_mem_read, slavio_serial_mem_write, s);
787 cpu_register_physical_memory(base, SERIAL_SIZE, slavio_serial_io_memory); 796 cpu_register_physical_memory(base, SERIAL_SIZE, slavio_serial_io_memory);
hw/sun4m.c
@@ -436,7 +436,8 @@ static void sun4m_hw_init(const struct hwdef *hwdef, int RAM_size, @@ -436,7 +436,8 @@ static void sun4m_hw_init(const struct hwdef *hwdef, int RAM_size,
436 slavio_timer_init_all(hwdef->counter_base, slavio_irq[hwdef->clock1_irq], 436 slavio_timer_init_all(hwdef->counter_base, slavio_irq[hwdef->clock1_irq],
437 slavio_cpu_irq); 437 slavio_cpu_irq);
438 438
439 - slavio_serial_ms_kbd_init(hwdef->ms_kb_base, slavio_irq[hwdef->ms_kb_irq]); 439 + slavio_serial_ms_kbd_init(hwdef->ms_kb_base, slavio_irq[hwdef->ms_kb_irq],
  440 + nographic);
440 // Slavio TTYA (base+4, Linux ttyS0) is the first Qemu serial device 441 // Slavio TTYA (base+4, Linux ttyS0) is the first Qemu serial device
441 // Slavio TTYB (base+0, Linux ttyS1) is the second Qemu serial device 442 // Slavio TTYB (base+0, Linux ttyS1) is the second Qemu serial device
442 slavio_serial_init(hwdef->serial_base, slavio_irq[hwdef->ser_irq], 443 slavio_serial_init(hwdef->serial_base, slavio_irq[hwdef->ser_irq],
hw/sun4m.h
@@ -41,7 +41,8 @@ void slavio_timer_init_all(target_phys_addr_t base, qemu_irq master_irq, @@ -41,7 +41,8 @@ void slavio_timer_init_all(target_phys_addr_t base, qemu_irq master_irq,
41 /* slavio_serial.c */ 41 /* slavio_serial.c */
42 SerialState *slavio_serial_init(target_phys_addr_t base, qemu_irq irq, 42 SerialState *slavio_serial_init(target_phys_addr_t base, qemu_irq irq,
43 CharDriverState *chr1, CharDriverState *chr2); 43 CharDriverState *chr1, CharDriverState *chr2);
44 -void slavio_serial_ms_kbd_init(target_phys_addr_t base, qemu_irq irq); 44 +void slavio_serial_ms_kbd_init(target_phys_addr_t base, qemu_irq irq,
  45 + int disabled);
45 46
46 /* slavio_misc.c */ 47 /* slavio_misc.c */
47 void *slavio_misc_init(target_phys_addr_t base, target_phys_addr_t power_base, 48 void *slavio_misc_init(target_phys_addr_t base, target_phys_addr_t power_base,