1 /* 2 * QEMU ISA VGA Emulator. 3 * 4 * Copyright (c) 2003 Fabrice Bellard 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a copy 7 * of this software and associated documentation files (the "Software"), to deal 8 * in the Software without restriction, including without limitation the rights 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 * copies of the Software, and to permit persons to whom the Software is 11 * furnished to do so, subject to the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be included in 14 * all copies or substantial portions of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 * THE SOFTWARE. 23 */ 24 #include "hw.h" 25 #include "console.h" 26 #include "pc.h" 27 #include "vga_int.h" 28 #include "pixel_ops.h" 29 #include "qemu-timer.h" 30 #include "loader.h" 31 32 typedef struct ISAVGAState { 33 ISADevice dev; 34 struct VGACommonState state; 35 } ISAVGAState; 36 37 static void vga_reset_isa(DeviceState *dev) 38 { 39 ISAVGAState *d = container_of(dev, ISAVGAState, dev.qdev); 40 VGACommonState *s = &d->state; 41 42 vga_common_reset(s); 43 } 44 45 static int vga_initfn(ISADevice *dev) 46 { 47 ISAVGAState *d = DO_UPCAST(ISAVGAState, dev, dev); 48 VGACommonState *s = &d->state; 49 MemoryRegion *vga_io_memory; 50 51 vga_common_init(s, VGA_RAM_SIZE); 52 vga_io_memory = vga_init_io(s); 53 memory_region_add_subregion_overlap(isa_address_space(dev), 54 isa_mem_base + 0x000a0000, 55 vga_io_memory, 1); 56 memory_region_set_coalescing(vga_io_memory); 57 isa_init_ioport(dev, 0x3c0); 58 isa_init_ioport(dev, 0x3b4); 59 isa_init_ioport(dev, 0x3ba); 60 isa_init_ioport(dev, 0x3da); 61 isa_init_ioport(dev, 0x3c0); 62 #ifdef CONFIG_BOCHS_VBE 63 isa_init_ioport(dev, 0x1ce); 64 isa_init_ioport(dev, 0x1cf); 65 isa_init_ioport(dev, 0x1d0); 66 #endif /* CONFIG_BOCHS_VBE */ 67 s->ds = graphic_console_init(s->update, s->invalidate, 68 s->screen_dump, s->text_update, s); 69 70 vga_init_vbe(s, isa_address_space(dev)); 71 /* ROM BIOS */ 72 rom_add_vga(VGABIOS_FILENAME); 73 return 0; 74 } 75 76 static ISADeviceInfo vga_info = { 77 .qdev.name = "isa-vga", 78 .qdev.size = sizeof(ISAVGAState), 79 .qdev.vmsd = &vmstate_vga_common, 80 .qdev.reset = vga_reset_isa, 81 .init = vga_initfn, 82 }; 83 84 static void vga_register(void) 85 { 86 isa_qdev_register(&vga_info); 87 } 88 device_init(vga_register) 89