Revision 956a3e6b hw/pc.c
b/hw/pc.c | ||
---|---|---|
365 | 365 |
rtc_set_memory(s, 0x39, val); |
366 | 366 |
} |
367 | 367 |
|
368 |
void ioport_set_a20(int enable)
|
|
368 |
static void handle_a20_line_change(void *opaque, int irq, int level)
|
|
369 | 369 |
{ |
370 |
/* XXX: send to all CPUs ? */ |
|
371 |
cpu_x86_set_a20(first_cpu, enable); |
|
372 |
} |
|
373 |
|
|
374 |
int ioport_get_a20(void) |
|
375 |
{ |
|
376 |
return ((first_cpu->a20_mask >> 20) & 1); |
|
377 |
} |
|
378 |
|
|
379 |
static void ioport92_write(void *opaque, uint32_t addr, uint32_t val) |
|
380 |
{ |
|
381 |
ioport_set_a20((val >> 1) & 1); |
|
382 |
/* XXX: bit 0 is fast reset */ |
|
383 |
} |
|
370 |
CPUState *cpu = opaque; |
|
384 | 371 |
|
385 |
static uint32_t ioport92_read(void *opaque, uint32_t addr) |
|
386 |
{ |
|
387 |
return ioport_get_a20() << 1; |
|
372 |
/* XXX: send to all CPUs ? */ |
|
373 |
cpu_x86_set_a20(cpu, level); |
|
388 | 374 |
} |
389 | 375 |
|
390 | 376 |
/***********************************************************/ |
... | ... | |
935 | 921 |
int i; |
936 | 922 |
DriveInfo *fd[MAX_FD]; |
937 | 923 |
PITState *pit; |
924 |
qemu_irq *a20_line; |
|
925 |
ISADevice *i8042; |
|
938 | 926 |
|
939 | 927 |
register_ioport_write(0x80, 1, 1, ioport80_write, NULL); |
940 | 928 |
|
... | ... | |
944 | 932 |
|
945 | 933 |
qemu_register_boot_set(pc_boot_set, *rtc_state); |
946 | 934 |
|
947 |
register_ioport_read(0x92, 1, 1, ioport92_read, NULL); |
|
948 |
register_ioport_write(0x92, 1, 1, ioport92_write, NULL); |
|
949 |
|
|
950 | 935 |
pit = pit_init(0x40, isa_reserve_irq(0)); |
951 | 936 |
pcspk_init(pit); |
952 | 937 |
if (!no_hpet) { |
... | ... | |
965 | 950 |
} |
966 | 951 |
} |
967 | 952 |
|
968 |
isa_create_simple("i8042"); |
|
953 |
a20_line = qemu_allocate_irqs(handle_a20_line_change, first_cpu, 1); |
|
954 |
i8042 = isa_create_simple("i8042"); |
|
955 |
i8042_setup_a20_line(i8042, a20_line); |
|
956 |
vmmouse_init(i8042); |
|
957 |
|
|
969 | 958 |
DMA_init(0); |
970 | 959 |
|
971 | 960 |
for(i = 0; i < MAX_FD; i++) { |
Also available in: Unified diff