No keyboard mode (Robert Reif)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3773 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									54215f7d71
								
							
						
					
					
						commit
						577390ff4b
					
				@ -100,6 +100,7 @@ typedef struct ChannelState {
 | 
				
			|||||||
    SERIOQueue queue;
 | 
					    SERIOQueue queue;
 | 
				
			||||||
    CharDriverState *chr;
 | 
					    CharDriverState *chr;
 | 
				
			||||||
    int e0_mode, led_mode, caps_lock_mode, num_lock_mode;
 | 
					    int e0_mode, led_mode, caps_lock_mode, num_lock_mode;
 | 
				
			||||||
 | 
					    int disabled;
 | 
				
			||||||
} ChannelState;
 | 
					} ChannelState;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct SerialState {
 | 
					struct SerialState {
 | 
				
			||||||
@ -193,6 +194,9 @@ static void slavio_serial_reset_chn(ChannelState *s)
 | 
				
			|||||||
    s->wregs[11] = 8;
 | 
					    s->wregs[11] = 8;
 | 
				
			||||||
    s->wregs[14] = 0x30;
 | 
					    s->wregs[14] = 0x30;
 | 
				
			||||||
    s->wregs[15] = 0xf8;
 | 
					    s->wregs[15] = 0xf8;
 | 
				
			||||||
 | 
					    if (s->disabled)
 | 
				
			||||||
 | 
					        s->rregs[0] = 0x7c;
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
        s->rregs[0] = 0x44;
 | 
					        s->rregs[0] = 0x44;
 | 
				
			||||||
    s->rregs[1] = 6;
 | 
					    s->rregs[1] = 6;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -437,7 +441,7 @@ static void slavio_serial_mem_writeb(void *opaque, target_phys_addr_t addr, uint
 | 
				
			|||||||
        if (s->wregs[5] & 8) { // tx enabled
 | 
					        if (s->wregs[5] & 8) { // tx enabled
 | 
				
			||||||
            if (s->chr)
 | 
					            if (s->chr)
 | 
				
			||||||
                qemu_chr_write(s->chr, &s->tx, 1);
 | 
					                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);
 | 
					                handle_kbd_command(s, val);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -611,6 +615,8 @@ SerialState *slavio_serial_init(target_phys_addr_t base, qemu_irq irq,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    s->chn[0].chr = chr1;
 | 
					    s->chn[0].chr = chr1;
 | 
				
			||||||
    s->chn[1].chr = chr2;
 | 
					    s->chn[1].chr = chr2;
 | 
				
			||||||
 | 
					    s->chn[0].disabled = 0;
 | 
				
			||||||
 | 
					    s->chn[1].disabled = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (i = 0; i < 2; i++) {
 | 
					    for (i = 0; i < 2; i++) {
 | 
				
			||||||
        s->chn[i].irq = irq;
 | 
					        s->chn[i].irq = irq;
 | 
				
			||||||
@ -765,7 +771,8 @@ static void sunmouse_event(void *opaque,
 | 
				
			|||||||
    put_queue(s, 0);
 | 
					    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;
 | 
					    int slavio_serial_io_memory, i;
 | 
				
			||||||
    SerialState *s;
 | 
					    SerialState *s;
 | 
				
			||||||
@ -782,6 +789,8 @@ void slavio_serial_ms_kbd_init(target_phys_addr_t base, qemu_irq irq)
 | 
				
			|||||||
    s->chn[1].otherchn = &s->chn[0];
 | 
					    s->chn[1].otherchn = &s->chn[0];
 | 
				
			||||||
    s->chn[0].type = mouse;
 | 
					    s->chn[0].type = mouse;
 | 
				
			||||||
    s->chn[1].type = kbd;
 | 
					    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);
 | 
					    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);
 | 
					    cpu_register_physical_memory(base, SERIAL_SIZE, slavio_serial_io_memory);
 | 
				
			||||||
 | 
				
			|||||||
@ -436,7 +436,8 @@ static void sun4m_hw_init(const struct hwdef *hwdef, int RAM_size,
 | 
				
			|||||||
    slavio_timer_init_all(hwdef->counter_base, slavio_irq[hwdef->clock1_irq],
 | 
					    slavio_timer_init_all(hwdef->counter_base, slavio_irq[hwdef->clock1_irq],
 | 
				
			||||||
                          slavio_cpu_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 TTYA (base+4, Linux ttyS0) is the first Qemu serial device
 | 
				
			||||||
    // Slavio TTYB (base+0, Linux ttyS1) is the second 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],
 | 
					    slavio_serial_init(hwdef->serial_base, slavio_irq[hwdef->ser_irq],
 | 
				
			||||||
 | 
				
			|||||||
@ -41,7 +41,8 @@ void slavio_timer_init_all(target_phys_addr_t base, qemu_irq master_irq,
 | 
				
			|||||||
/* slavio_serial.c */
 | 
					/* slavio_serial.c */
 | 
				
			||||||
SerialState *slavio_serial_init(target_phys_addr_t base, qemu_irq irq,
 | 
					SerialState *slavio_serial_init(target_phys_addr_t base, qemu_irq irq,
 | 
				
			||||||
                                CharDriverState *chr1, CharDriverState *chr2);
 | 
					                                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 */
 | 
					/* slavio_misc.c */
 | 
				
			||||||
void *slavio_misc_init(target_phys_addr_t base, target_phys_addr_t power_base,
 | 
					void *slavio_misc_init(target_phys_addr_t base, target_phys_addr_t power_base,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user