Lines Matching +full:sc +full:- +full:resource

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
47 #include <machine/resource.h>
75 static struct resource *unin_chip_alloc_resource(device_t, device_t, int, int *,
79 struct resource *, rman_res_t,
82 struct resource *);
84 struct resource *);
85 static int unin_chip_map_resource(device_t, device_t, struct resource *,
88 static int unin_chip_unmap_resource(device_t, device_t, struct resource *,
90 static int unin_chip_release_resource(device_t, device_t, struct resource *);
158 * Add an interrupt to the dev's resource list if present
168 if (dinfo->udi_ninterrupts >= 6) { in unin_chip_add_intr()
175 if (nintr == -1) { in unin_chip_add_intr()
178 if (nintr == -1) in unin_chip_add_intr()
182 if (intr[0] == -1) in unin_chip_add_intr()
185 if (OF_getprop(devnode, "interrupt-parent", &iparent, sizeof(iparent)) in unin_chip_add_intr()
189 if (OF_searchprop(iparent, "#interrupt-cells", &icells, sizeof(icells)) in unin_chip_add_intr()
196 resource_list_add(&dinfo->udi_resources, SYS_RES_IRQ, in unin_chip_add_intr()
197 dinfo->udi_ninterrupts, irq, irq, 1); in unin_chip_add_intr()
205 dinfo->udi_interrupts[dinfo->udi_ninterrupts] = irq; in unin_chip_add_intr()
206 dinfo->udi_ninterrupts++; in unin_chip_add_intr()
217 if (nreg == -1) in unin_chip_add_reg()
221 resource_list_add(&dinfo->udi_resources, SYS_RES_MEMORY, i, in unin_chip_add_reg()
232 struct unin_chip_softc *sc; in unin_update_reg() local
235 sc = device_get_softc(dev); in unin_update_reg()
236 reg = (void *)(sc->sc_addr + regoff); in unin_update_reg()
265 if (strcmp(name, "uni-n") != 0 && strcmp(name, "u3") != 0 in unin_chip_probe()
276 struct unin_chip_softc *sc; in unin_chip_attach() local
288 sc = device_get_softc(dev); in unin_chip_attach()
295 OF_getprop(OF_parent(root), "#address-cells", &acells, sizeof(acells)); in unin_chip_attach()
296 OF_getprop(OF_parent(root), "#size-cells", &scells, sizeof(scells)); in unin_chip_attach()
299 sc->sc_physaddr = reg[i++]; in unin_chip_attach()
301 sc->sc_physaddr <<= 32; in unin_chip_attach()
302 sc->sc_physaddr |= reg[i++]; in unin_chip_attach()
304 sc->sc_size = reg[i++]; in unin_chip_attach()
306 sc->sc_size <<= 32; in unin_chip_attach()
307 sc->sc_size |= reg[i++]; in unin_chip_attach()
310 sc->sc_mem_rman.rm_type = RMAN_ARRAY; in unin_chip_attach()
311 sc->sc_mem_rman.rm_descr = "UniNorth Device Memory"; in unin_chip_attach()
313 error = rman_init(&sc->sc_mem_rman); in unin_chip_attach()
320 error = rman_manage_region(&sc->sc_mem_rman, sc->sc_physaddr, in unin_chip_attach()
321 sc->sc_physaddr + sc->sc_size - 1); in unin_chip_attach()
333 * Iterate through the sub-devices in unin_chip_attach()
337 if (ofw_bus_gen_setup_devinfo(&dinfo->udi_obdinfo, child) in unin_chip_attach()
344 resource_list_init(&dinfo->udi_resources); in unin_chip_attach()
345 dinfo->udi_ninterrupts = 0; in unin_chip_attach()
359 if (dinfo->udi_ninterrupts == 0 && in unin_chip_attach()
360 (strcmp(name, "i2c-bus") == 0 || in unin_chip_attach()
362 if (OF_getprop(child, "interrupt-parent", &iparent, in unin_chip_attach()
369 resource_list_add(&dinfo->udi_resources, SYS_RES_IRQ, in unin_chip_attach()
370 dinfo->udi_ninterrupts, irq, irq, 1); in unin_chip_attach()
371 dinfo->udi_interrupts[dinfo->udi_ninterrupts] = irq; in unin_chip_attach()
372 dinfo->udi_ninterrupts++; in unin_chip_attach()
380 dinfo->udi_obdinfo.obd_name); in unin_chip_attach()
381 resource_list_free(&dinfo->udi_resources); in unin_chip_attach()
382 ofw_bus_gen_destroy_devinfo(&dinfo->udi_obdinfo); in unin_chip_attach()
394 sc->sc_addr = (vm_offset_t)pmap_mapdev(sc->sc_physaddr, PAGE_SIZE); in unin_chip_attach()
396 sc->sc_version = *(u_int *)sc->sc_addr; in unin_chip_attach()
397 device_printf(dev, "Version %d\n", sc->sc_version); in unin_chip_attach()
408 if (strcmp(compat, "chrp,open-pic") == 0) in unin_chip_attach()
433 rl = &dinfo->udi_resources; in unin_chip_print_child()
454 rl = &dinfo->udi_resources; in unin_chip_probe_nomatch()
468 struct unin_chip_softc *sc; in unin_chip_get_rman() local
470 sc = device_get_softc(bus); in unin_chip_get_rman()
474 return (&sc->sc_mem_rman); in unin_chip_get_rman()
480 static struct resource *
494 rle = resource_list_find(&dinfo->udi_resources, SYS_RES_MEMORY, in unin_chip_alloc_resource()
502 rle->end = rle->end - 1; /* Hack? */ in unin_chip_alloc_resource()
504 if (start < rle->start) in unin_chip_alloc_resource()
505 adjstart = rle->start; in unin_chip_alloc_resource()
506 else if (start > rle->end) in unin_chip_alloc_resource()
507 adjstart = rle->end; in unin_chip_alloc_resource()
511 if (end < rle->start) in unin_chip_alloc_resource()
512 adjend = rle->start; in unin_chip_alloc_resource()
513 else if (end > rle->end) in unin_chip_alloc_resource()
514 adjend = rle->end; in unin_chip_alloc_resource()
518 adjcount = adjend - adjstart; in unin_chip_alloc_resource()
529 rle = resource_list_find(&dinfo->udi_resources, SYS_RES_IRQ, in unin_chip_alloc_resource()
532 if (dinfo->udi_ninterrupts >= 6) { in unin_chip_alloc_resource()
538 resource_list_add(&dinfo->udi_resources, SYS_RES_IRQ, in unin_chip_alloc_resource()
539 dinfo->udi_ninterrupts, start, start, in unin_chip_alloc_resource()
542 dinfo->udi_interrupts[dinfo->udi_ninterrupts] = start; in unin_chip_alloc_resource()
543 dinfo->udi_ninterrupts++; in unin_chip_alloc_resource()
546 return (resource_list_alloc(&dinfo->udi_resources, bus, child, in unin_chip_alloc_resource()
550 device_printf(bus, "unknown resource request from %s\n", in unin_chip_alloc_resource()
557 unin_chip_adjust_resource(device_t bus, device_t child, struct resource *r, in unin_chip_adjust_resource()
573 unin_chip_release_resource(device_t bus, device_t child, struct resource *res) in unin_chip_release_resource()
587 unin_chip_activate_resource(device_t bus, device_t child, struct resource *res) in unin_chip_activate_resource()
602 struct resource *res) in unin_chip_deactivate_resource()
616 unin_chip_map_resource(device_t bus, device_t child, struct resource *r, in unin_chip_map_resource()
645 map->r_vaddr = pmap_mapdev_attr(start, length, args.memattr); in unin_chip_map_resource()
646 if (map->r_vaddr == NULL) in unin_chip_map_resource()
648 map->r_bustag = &bs_be_tag; in unin_chip_map_resource()
649 map->r_size = length; in unin_chip_map_resource()
650 map->r_bushandle = (bus_space_handle_t)map->r_vaddr; in unin_chip_map_resource()
655 unin_chip_unmap_resource(device_t bus, device_t child, struct resource *r, in unin_chip_unmap_resource()
659 * If this is a memory resource, unmap it. in unin_chip_unmap_resource()
664 pmap_unmapdev(map->r_vaddr, map->r_size); in unin_chip_unmap_resource()
678 return (&dinfo->udi_resources); in unin_chip_get_resource_list()
687 return (&dinfo->udi_obdinfo); in unin_chip_get_devinfo()