Commit 577390ff4b7ca39f3780cbfd67d02bff3d4bf8e5
1 parent
54215f7d
No keyboard mode (Robert Reif)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3773 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
3 changed files
with
16 additions
and
5 deletions
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, |