Lines Matching refs:mrpio
149 MemoryRegionPortioList *mrpio; in portio_list_destroy() local
153 mrpio = container_of(piolist->regions[i], MemoryRegionPortioList, mr); in portio_list_destroy()
154 object_unparent(OBJECT(&mrpio->mr)); in portio_list_destroy()
155 object_unref(mrpio); in portio_list_destroy()
160 static const MemoryRegionPortio *find_portio(MemoryRegionPortioList *mrpio, in find_portio() argument
166 for (mrp = mrpio->ports; mrp->size; ++mrp) { in find_portio()
178 MemoryRegionPortioList *mrpio = opaque; in portio_read() local
179 const MemoryRegionPortio *mrp = find_portio(mrpio, addr, size, false); in portio_read()
184 data = mrp->read(mrpio->portio_opaque, mrpio->mr.addr + addr); in portio_read()
186 mrp = find_portio(mrpio, addr, 1, false); in portio_read()
188 data = mrp->read(mrpio->portio_opaque, mrpio->mr.addr + addr); in portio_read()
190 data |= mrp->read(mrpio->portio_opaque, mrpio->mr.addr + addr + 1) << 8; in portio_read()
202 MemoryRegionPortioList *mrpio = opaque; in portio_write() local
203 const MemoryRegionPortio *mrp = find_portio(mrpio, addr, size, true); in portio_write()
206 mrp->write(mrpio->portio_opaque, mrpio->mr.addr + addr, data); in portio_write()
208 mrp = find_portio(mrpio, addr, 1, true); in portio_write()
210 mrp->write(mrpio->portio_opaque, mrpio->mr.addr + addr, data & 0xff); in portio_write()
212 mrp->write(mrpio->portio_opaque, mrpio->mr.addr + addr + 1, data >> 8); in portio_write()
231 MemoryRegionPortioList *mrpio; in portio_list_add_1() local
237 mrpio = MEMORY_REGION_PORTIO_LIST( in portio_list_add_1()
239 mrpio->portio_opaque = piolist->opaque; in portio_list_add_1()
240 mrpio->ports = g_malloc0(sizeof(MemoryRegionPortio) * (count + 1)); in portio_list_add_1()
241 memcpy(mrpio->ports, pio_init, sizeof(MemoryRegionPortio) * count); in portio_list_add_1()
242 memset(mrpio->ports + count, 0, sizeof(MemoryRegionPortio)); in portio_list_add_1()
246 mrpio->ports[i].offset -= off_low; in portio_list_add_1()
253 memory_region_init_io(&mrpio->mr, OBJECT(mrpio), &portio_ops, mrpio, in portio_list_add_1()
257 object_ref(&mrpio->mr); in portio_list_add_1()
258 object_unparent(OBJECT(&mrpio->mr)); in portio_list_add_1()
265 object_property_add_child(owner, name, OBJECT(&mrpio->mr)); in portio_list_add_1()
269 memory_region_set_flush_coalesced(&mrpio->mr); in portio_list_add_1()
272 start + off_low, &mrpio->mr); in portio_list_add_1()
273 piolist->regions[piolist->nr] = &mrpio->mr; in portio_list_add_1()
317 MemoryRegionPortioList *mrpio; in portio_list_del() local
321 mrpio = container_of(piolist->regions[i], MemoryRegionPortioList, mr); in portio_list_del()
322 memory_region_del_subregion(piolist->address_space, &mrpio->mr); in portio_list_del()
337 MemoryRegionPortioList *mrpio; in portio_list_set_address() local
341 mrpio = container_of(piolist->regions[i], MemoryRegionPortioList, mr); in portio_list_set_address()
342 memory_region_set_address(&mrpio->mr, in portio_list_set_address()
343 mrpio->mr.addr - piolist->addr + addr); in portio_list_set_address()
344 for (j = 0; mrpio->ports[j].size; ++j) { in portio_list_set_address()
345 mrpio->ports[j].offset += addr - piolist->addr; in portio_list_set_address()
354 MemoryRegionPortioList *mrpio = MEMORY_REGION_PORTIO_LIST(obj); in memory_region_portio_list_finalize() local
356 object_unref(&mrpio->mr); in memory_region_portio_list_finalize()
357 g_free(mrpio->ports); in memory_region_portio_list_finalize()