Signed-off-by: Hervé Poussineau <hpous...@reactos.org> --- ioport.c | 121 -------------------------------------------------------------- ioport.h | 19 ---------- 2 files changed, 140 deletions(-)
diff --git a/ioport.c b/ioport.c index 6e4ca0d..05f8026 100644 --- a/ioport.c +++ b/ioport.c @@ -329,124 +329,3 @@ uint32_t cpu_inl(pio_addr_t addr) LOG_IOPORT("inl : %04"FMT_pioaddr" %08"PRIx32"\n", addr, val); return val; } - -void portio_list_init(PortioList *piolist, - const MemoryRegionPortio *callbacks, - void *opaque, const char *name) -{ - unsigned n = 0; - - while (callbacks[n].size) { - ++n; - } - - piolist->ports = callbacks; - piolist->nr = 0; - piolist->regions = g_new0(MemoryRegion *, n); - piolist->aliases = g_new0(MemoryRegion *, n); - piolist->address_space = NULL; - piolist->opaque = opaque; - piolist->name = name; -} - -void portio_list_destroy(PortioList *piolist) -{ - g_free(piolist->regions); - g_free(piolist->aliases); -} - -static void portio_list_add_1(PortioList *piolist, - const MemoryRegionPortio *pio_init, - unsigned count, unsigned start, - unsigned off_low, unsigned off_high) -{ - MemoryRegionPortio *pio; - MemoryRegionOps *ops; - MemoryRegion *region, *alias; - unsigned i; - - /* Copy the sub-list and null-terminate it. */ - pio = g_new(MemoryRegionPortio, count + 1); - memcpy(pio, pio_init, sizeof(MemoryRegionPortio) * count); - memset(pio + count, 0, sizeof(MemoryRegionPortio)); - - /* Adjust the offsets to all be zero-based for the region. */ - for (i = 0; i < count; ++i) { - pio[i].offset -= off_low; - } - - ops = g_new0(MemoryRegionOps, 1); - ops->old_portio = pio; - - region = g_new(MemoryRegion, 1); - alias = g_new(MemoryRegion, 1); - /* - * Use an alias so that the callback is called with an absolute address, - * rather than an offset relative to to start + off_low. - */ - memory_region_init_io(region, ops, piolist->opaque, piolist->name, - INT64_MAX); - memory_region_init_alias(alias, piolist->name, - region, start + off_low, off_high - off_low); - memory_region_add_subregion(piolist->address_space, - start + off_low, alias); - piolist->regions[piolist->nr] = region; - piolist->aliases[piolist->nr] = alias; - ++piolist->nr; -} - -void portio_list_add(PortioList *piolist, - MemoryRegion *address_space, - uint32_t start) -{ - const MemoryRegionPortio *pio, *pio_start = piolist->ports; - unsigned int off_low, off_high, off_last, count; - - piolist->address_space = address_space; - - /* Handle the first entry specially. */ - off_last = off_low = pio_start->offset; - off_high = off_low + pio_start->len; - count = 1; - - for (pio = pio_start + 1; pio->size != 0; pio++, count++) { - /* All entries must be sorted by offset. */ - assert(pio->offset >= off_last); - off_last = pio->offset; - - /* If we see a hole, break the region. */ - if (off_last > off_high) { - portio_list_add_1(piolist, pio_start, count, start, off_low, - off_high); - /* ... and start collecting anew. */ - pio_start = pio; - off_low = off_last; - off_high = off_low + pio->len; - count = 0; - } else if (off_last + pio->len > off_high) { - off_high = off_last + pio->len; - } - } - - /* There will always be an open sub-list. */ - portio_list_add_1(piolist, pio_start, count, start, off_low, off_high); -} - -void portio_list_del(PortioList *piolist) -{ - MemoryRegion *mr, *alias; - unsigned i; - - for (i = 0; i < piolist->nr; ++i) { - mr = piolist->regions[i]; - alias = piolist->aliases[i]; - memory_region_del_subregion(piolist->address_space, alias); - memory_region_destroy(alias); - memory_region_destroy(mr); - g_free((MemoryRegionOps *)mr->ops); - g_free(mr); - g_free(alias); - piolist->regions[i] = NULL; - piolist->aliases[i] = NULL; - } -} diff --git a/ioport.h b/ioport.h index 23441cb..cb06bff 100644 --- a/ioport.h +++ b/ioport.h @@ -56,23 +56,4 @@ uint32_t cpu_inl(pio_addr_t addr); struct MemoryRegion; struct MemoryRegionPortio; -typedef struct PortioList { - const struct MemoryRegionPortio *ports; - struct MemoryRegion *address_space; - unsigned nr; - struct MemoryRegion **regions; - struct MemoryRegion **aliases; - void *opaque; - const char *name; -} PortioList; - -void portio_list_init(PortioList *piolist, - const struct MemoryRegionPortio *callbacks, - void *opaque, const char *name); -void portio_list_destroy(PortioList *piolist); -void portio_list_add(PortioList *piolist, - struct MemoryRegion *address_space, - uint32_t addr); -void portio_list_del(PortioList *piolist); - #endif /* IOPORT_H */ -- 1.7.10.4