if (dev->mmio[n].memory) {
memory_region_del_subregion(get_system_memory(),
dev->mmio[n].memory);
- } else if (dev->mmio[n].unmap) {
- dev->mmio[n].unmap(dev, dev->mmio[n].addr);
}
}
dev->mmio[n].addr = addr;
memory_region_add_subregion(get_system_memory(),
addr,
dev->mmio[n].memory);
- } else if (dev->mmio[n].cb) {
- dev->mmio[n].cb(dev, addr);
}
}
}
}
-void sysbus_init_mmio_cb2(SysBusDevice *dev,
- mmio_mapfunc cb, mmio_mapfunc unmap)
-{
- int n;
-
- assert(dev->num_mmio < QDEV_MAX_MMIO);
- n = dev->num_mmio++;
- dev->mmio[n].addr = -1;
- dev->mmio[n].cb = cb;
- dev->mmio[n].unmap = unmap;
-}
-
void sysbus_init_mmio(SysBusDevice *dev, MemoryRegion *memory)
{
int n;
#define QDEV_MAX_IRQ 256
typedef struct SysBusDevice SysBusDevice;
-typedef void (*mmio_mapfunc)(SysBusDevice *dev, target_phys_addr_t addr);
struct SysBusDevice {
DeviceState qdev;
int num_mmio;
struct {
target_phys_addr_t addr;
- mmio_mapfunc cb;
- mmio_mapfunc unmap;
MemoryRegion *memory;
} mmio[QDEV_MAX_MMIO];
int num_pio;
void sysbus_register_dev(const char *name, size_t size, sysbus_initfn init);
void sysbus_register_withprop(SysBusDeviceInfo *info);
void *sysbus_new(void);
-void sysbus_init_mmio_cb2(SysBusDevice *dev,
- mmio_mapfunc cb, mmio_mapfunc unmap);
void sysbus_init_mmio(SysBusDevice *dev, MemoryRegion *memory);
MemoryRegion *sysbus_mmio_get_region(SysBusDevice *dev, int n);
void sysbus_init_irq(SysBusDevice *dev, qemu_irq *p);