Revision e28f9884

b/hw/pc.c
63 63
static IOAPICState *ioapic;
64 64
static PCIDevice *i440fx_state;
65 65

  
66
typedef struct rom_reset_data {
67
    uint8_t *data;
68
    target_phys_addr_t addr;
69
    unsigned size;
70
} RomResetData;
71

  
72
static void option_rom_reset(void *_rrd)
73
{
74
    RomResetData *rrd = _rrd;
75

  
76
    cpu_physical_memory_write_rom(rrd->addr, rrd->data, rrd->size);
77
}
78

  
79
static void option_rom_setup_reset(target_phys_addr_t addr, unsigned size)
80
{
81
    RomResetData *rrd = qemu_malloc(sizeof *rrd);
82

  
83
    rrd->data = qemu_malloc(size);
84
    cpu_physical_memory_read(addr, rrd->data, size);
85
    rrd->addr = addr;
86
    rrd->size = size;
87
    qemu_register_reset(option_rom_reset, rrd);
88
}
89

  
66 90
static void ioport80_write(void *opaque, uint32_t addr, uint32_t data)
67 91
{
68 92
}
......
806 830
        }
807 831
        /* Round up optiom rom size to the next 2k boundary */
808 832
        size = (size + 2047) & ~2047;
833
        option_rom_setup_reset(start, size);
809 834
        return size;
810 835
}
811 836

  

Also available in: Unified diff