Lines Matching +full:sc +full:- +full:resource
1 /*-
2 * SPDX-License-Identifier: BSD-3-Clause
33 * /iobus@0x80000000/name psim-iobus
35 * Code borrowed from various nexus.c and uninorth.c :-)
54 #include <machine/resource.h>
74 static struct resource *iobus_alloc_resource(device_t, device_t, int, int *,
77 static int iobus_adjust_resource(device_t, device_t, struct resource *,
79 static int iobus_activate_resource(device_t, device_t, struct resource *);
80 static int iobus_deactivate_resource(device_t, device_t, struct resource *);
81 static int iobus_map_resource(device_t, device_t, struct resource *,
84 static int iobus_unmap_resource(device_t, device_t, struct resource *,
86 static int iobus_release_resource(device_t, device_t, struct resource *);
132 if (strcmp(type, "psim-iobus") != 0) in iobus_probe()
140 * Add interrupt/addr range to the dev's resource list if present
145 u_int intr = -1; in iobus_add_intr()
147 if (OF_getprop(devnode, "interrupt", &intr, sizeof(intr)) != -1) { in iobus_add_intr()
148 resource_list_add(&dinfo->id_resources, in iobus_add_intr()
151 dinfo->id_interrupt = intr; in iobus_add_intr()
161 size = OF_getprop(devnode, "reg", dinfo->id_reg,sizeof(dinfo->id_reg)); in iobus_add_reg()
163 if (size != -1) { in iobus_add_reg()
164 dinfo->id_nregs = size / (sizeof(dinfo->id_reg[0])); in iobus_add_reg()
166 for (i = 0; i < dinfo->id_nregs; i+= 3) { in iobus_add_reg()
172 dinfo->id_reg[i+1] -= iobus_off; in iobus_add_reg()
174 resource_list_add(&dinfo->id_resources, in iobus_add_reg()
176 dinfo->id_reg[i+1], in iobus_add_reg()
177 dinfo->id_reg[i+1] + in iobus_add_reg()
178 dinfo->id_reg[i+2], in iobus_add_reg()
179 dinfo->id_reg[i+2]); in iobus_add_reg()
187 struct iobus_softc *sc; in iobus_attach() local
196 sc = device_get_softc(dev); in iobus_attach()
197 sc->sc_node = ofw_bus_get_node(dev); in iobus_attach()
201 * resource manager in iobus_attach()
203 size = OF_getprop(sc->sc_node, "reg", reg, sizeof(reg)); in iobus_attach()
205 sc->sc_addr = reg[0]; in iobus_attach()
206 sc->sc_size = reg[1]; in iobus_attach()
211 sc->sc_mem_rman.rm_type = RMAN_ARRAY; in iobus_attach()
212 sc->sc_mem_rman.rm_descr = "IOBus Device Memory"; in iobus_attach()
213 if (rman_init(&sc->sc_mem_rman) != 0) { in iobus_attach()
218 rman_manage_region(&sc->sc_mem_rman, 0, sc->sc_size); in iobus_attach()
221 * Iterate through the sub-devices in iobus_attach()
223 root = sc->sc_node; in iobus_attach()
232 resource_list_init(&dinfo->id_resources); in iobus_attach()
233 dinfo->id_node = child; in iobus_attach()
234 dinfo->id_name = name; in iobus_attach()
236 iobus_add_reg(child, dinfo, sc->sc_addr); in iobus_attach()
255 rl = &dinfo->id_resources; in iobus_print_child()
259 retval += printf(" offset 0x%x", dinfo->id_reg[1]); in iobus_print_child()
282 *result = dinfo->id_node; in iobus_read_ivar()
285 *result = (uintptr_t)dinfo->id_name; in iobus_read_ivar()
288 *result = dinfo->id_nregs; in iobus_read_ivar()
291 *result = (uintptr_t)dinfo->id_reg; in iobus_read_ivar()
309 struct iobus_softc *sc; in iobus_get_rman() local
311 sc = device_get_softc(bus); in iobus_get_rman()
315 return (&sc->sc_mem_rman); in iobus_get_rman()
321 static struct resource *
336 device_printf(bus, "unknown resource request from %s\n", in iobus_alloc_resource()
343 iobus_adjust_resource(device_t bus, device_t child, struct resource *r, in iobus_adjust_resource()
360 iobus_release_resource(device_t bus, device_t child, struct resource *res) in iobus_release_resource()
375 iobus_activate_resource(device_t bus, device_t child, struct resource *res) in iobus_activate_resource()
390 iobus_deactivate_resource(device_t bus, device_t child, struct resource *res) in iobus_deactivate_resource()
405 iobus_map_resource(device_t bus, device_t child, struct resource *r, in iobus_map_resource()
409 struct iobus_softc *sc; in iobus_map_resource() local
431 sc = device_get_softc(bus); in iobus_map_resource()
432 map->r_vaddr = pmap_mapdev_attr((vm_paddr_t)start + sc->sc_addr, in iobus_map_resource()
434 if (map->r_vaddr == NULL) in iobus_map_resource()
436 map->r_bustag = &bs_le_tag; in iobus_map_resource()
437 map->r_bushandle = (vm_offset_t)map->r_vaddr; in iobus_map_resource()
438 map->r_size = length; in iobus_map_resource()
443 iobus_unmap_resource(device_t bus, device_t child, struct resource *r, in iobus_unmap_resource()
450 pmap_unmapdev(map->r_vaddr, map->r_size); in iobus_unmap_resource()