Revision ec3bb837 hw/sysbus.c
b/hw/sysbus.c | ||
---|---|---|
19 | 19 |
|
20 | 20 |
#include "sysbus.h" |
21 | 21 |
#include "monitor.h" |
22 |
#include "exec-memory.h" |
|
22 | 23 |
|
23 | 24 |
static void sysbus_dev_print(Monitor *mon, DeviceState *dev, int indent); |
24 | 25 |
static char *sysbus_get_fw_dev_path(DeviceState *dev); |
... | ... | |
49 | 50 |
} |
50 | 51 |
if (dev->mmio[n].addr != (target_phys_addr_t)-1) { |
51 | 52 |
/* Unregister previous mapping. */ |
52 |
cpu_register_physical_memory(dev->mmio[n].addr, dev->mmio[n].size, |
|
53 |
IO_MEM_UNASSIGNED); |
|
53 |
if (dev->mmio[n].memory) { |
|
54 |
memory_region_del_subregion(get_system_memory(), |
|
55 |
dev->mmio[n].memory); |
|
56 |
} else { |
|
57 |
cpu_register_physical_memory(dev->mmio[n].addr, dev->mmio[n].size, |
|
58 |
IO_MEM_UNASSIGNED); |
|
59 |
} |
|
54 | 60 |
} |
55 | 61 |
dev->mmio[n].addr = addr; |
56 |
if (dev->mmio[n].cb) { |
|
62 |
if (dev->mmio[n].memory) { |
|
63 |
memory_region_add_subregion(get_system_memory(), |
|
64 |
addr, |
|
65 |
dev->mmio[n].memory); |
|
66 |
} else if (dev->mmio[n].cb) { |
|
57 | 67 |
dev->mmio[n].cb(dev, addr); |
58 | 68 |
} else { |
59 | 69 |
cpu_register_physical_memory(addr, dev->mmio[n].size, |
... | ... | |
107 | 117 |
dev->mmio[n].cb = cb; |
108 | 118 |
} |
109 | 119 |
|
120 |
void sysbus_init_mmio_region(SysBusDevice *dev, MemoryRegion *memory) |
|
121 |
{ |
|
122 |
int n; |
|
123 |
|
|
124 |
assert(dev->num_mmio < QDEV_MAX_MMIO); |
|
125 |
n = dev->num_mmio++; |
|
126 |
dev->mmio[n].addr = -1; |
|
127 |
dev->mmio[n].size = memory_region_size(memory); |
|
128 |
dev->mmio[n].memory = memory; |
|
129 |
} |
|
130 |
|
|
110 | 131 |
void sysbus_init_ioports(SysBusDevice *dev, pio_addr_t ioport, pio_addr_t size) |
111 | 132 |
{ |
112 | 133 |
pio_addr_t i; |
Also available in: Unified diff