cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

vga-isa.c (4119B)


      1/*
      2 * QEMU ISA VGA Emulator.
      3 *
      4 * see docs/specs/standard-vga.txt for virtual hardware specs.
      5 *
      6 * Copyright (c) 2003 Fabrice Bellard
      7 *
      8 * Permission is hereby granted, free of charge, to any person obtaining a copy
      9 * of this software and associated documentation files (the "Software"), to deal
     10 * in the Software without restriction, including without limitation the rights
     11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     12 * copies of the Software, and to permit persons to whom the Software is
     13 * furnished to do so, subject to the following conditions:
     14 *
     15 * The above copyright notice and this permission notice shall be included in
     16 * all copies or substantial portions of the Software.
     17 *
     18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
     21 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
     22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
     23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
     24 * THE SOFTWARE.
     25 */
     26
     27#include "qemu/osdep.h"
     28#include "hw/isa/isa.h"
     29#include "vga_int.h"
     30#include "ui/pixel_ops.h"
     31#include "qemu/module.h"
     32#include "qemu/timer.h"
     33#include "hw/loader.h"
     34#include "hw/qdev-properties.h"
     35#include "qom/object.h"
     36#include "qapi/error.h"
     37
     38#define TYPE_ISA_VGA "isa-vga"
     39OBJECT_DECLARE_SIMPLE_TYPE(ISAVGAState, ISA_VGA)
     40
     41struct ISAVGAState {
     42    ISADevice parent_obj;
     43
     44    struct VGACommonState state;
     45    PortioList portio_vga;
     46    PortioList portio_vbe;
     47};
     48
     49static void vga_isa_reset(DeviceState *dev)
     50{
     51    ISAVGAState *d = ISA_VGA(dev);
     52    VGACommonState *s = &d->state;
     53
     54    vga_common_reset(s);
     55}
     56
     57static void vga_isa_realizefn(DeviceState *dev, Error **errp)
     58{
     59    ISADevice *isadev = ISA_DEVICE(dev);
     60    ISAVGAState *d = ISA_VGA(dev);
     61    VGACommonState *s = &d->state;
     62    MemoryRegion *vga_io_memory;
     63    const MemoryRegionPortio *vga_ports, *vbe_ports;
     64
     65    /*
     66     * make sure this device is not being added twice, if so
     67     * exit without crashing qemu
     68     */
     69    if (object_resolve_path_type("", TYPE_ISA_VGA, NULL)) {
     70        error_setg(errp, "at most one %s device is permitted", TYPE_ISA_VGA);
     71        return;
     72    }
     73
     74    s->global_vmstate = true;
     75    vga_common_init(s, OBJECT(dev));
     76    s->legacy_address_space = isa_address_space(isadev);
     77    vga_io_memory = vga_init_io(s, OBJECT(dev), &vga_ports, &vbe_ports);
     78    isa_register_portio_list(isadev, &d->portio_vga,
     79                             0x3b0, vga_ports, s, "vga");
     80    if (vbe_ports) {
     81        isa_register_portio_list(isadev, &d->portio_vbe,
     82                                 0x1ce, vbe_ports, s, "vbe");
     83    }
     84    memory_region_add_subregion_overlap(isa_address_space(isadev),
     85                                        0x000a0000,
     86                                        vga_io_memory, 1);
     87    memory_region_set_coalescing(vga_io_memory);
     88    s->con = graphic_console_init(dev, 0, s->hw_ops, s);
     89
     90    memory_region_add_subregion(isa_address_space(isadev),
     91                                VBE_DISPI_LFB_PHYSICAL_ADDRESS,
     92                                &s->vram);
     93    /* ROM BIOS */
     94    rom_add_vga(VGABIOS_FILENAME);
     95}
     96
     97static Property vga_isa_properties[] = {
     98    DEFINE_PROP_UINT32("vgamem_mb", ISAVGAState, state.vram_size_mb, 8),
     99    DEFINE_PROP_END_OF_LIST(),
    100};
    101
    102static void vga_isa_class_initfn(ObjectClass *klass, void *data)
    103{
    104    DeviceClass *dc = DEVICE_CLASS(klass);
    105
    106    dc->realize = vga_isa_realizefn;
    107    dc->reset = vga_isa_reset;
    108    dc->vmsd = &vmstate_vga_common;
    109    device_class_set_props(dc, vga_isa_properties);
    110    set_bit(DEVICE_CATEGORY_DISPLAY, dc->categories);
    111}
    112
    113static const TypeInfo vga_isa_info = {
    114    .name          = TYPE_ISA_VGA,
    115    .parent        = TYPE_ISA_DEVICE,
    116    .instance_size = sizeof(ISAVGAState),
    117    .class_init    = vga_isa_class_initfn,
    118};
    119
    120static void vga_isa_register_types(void)
    121{
    122    type_register_static(&vga_isa_info);
    123}
    124
    125type_init(vga_isa_register_types)