int isa_release_resource(device_t bus, device_t child, int type, int rid, struct resource *res) { return (bus_generic_rl_release_resource(bus, child, type, rid, res)); }
static int atkbdc_isa_release_resource(device_t dev, device_t child, int type, int rid, struct resource *r) { atkbdc_softc_t *sc; sc = *(atkbdc_softc_t **)device_get_softc(dev); if (type == SYS_RES_IRQ && rid == KBDC_RID_KBD && r == sc->irq) return (0); return (bus_generic_rl_release_resource(dev, child, type, rid, r)); }
static int xlp_pci_release_resource(device_t bus, device_t child, int type, int rid, struct resource *r) { u_long start; /* If custom alloc, handle that */ start = rman_get_start(r); if (type == SYS_RES_MEMORY && pci_get_bus(child) == 0 && start >= EMUL_MEM_START && start <= EMUL_MEM_END) return (BUS_RELEASE_RESOURCE(device_get_parent(bus), child, type, rid, r)); /* use default PCI function */ return (bus_generic_rl_release_resource(bus, child, type, rid, r)); }
static int chipc_release_resource(device_t dev, device_t child, int type, int rid, struct resource *r) { struct chipc_softc *sc; struct chipc_region *cr; struct rman *rm; struct resource_list_entry *rle; int error; sc = device_get_softc(dev); /* Handled by parent bus? */ rm = chipc_get_rman(sc, type); if (rm == NULL || !rman_is_region_manager(r, rm)) { return (bus_generic_rl_release_resource(dev, child, type, rid, r)); } /* Locate the mapping region */ cr = chipc_find_region(sc, rman_get_start(r), rman_get_end(r)); if (cr == NULL) return (EINVAL); /* Deactivate resources */ if (rman_get_flags(r) & RF_ACTIVE) { error = BUS_DEACTIVATE_RESOURCE(dev, child, type, rid, r); if (error) return (error); } if ((error = rman_release_resource(r))) return (error); /* Drop allocation reference */ chipc_release_region(sc, cr, RF_ALLOCATED); /* Clear reference from the resource list entry if exists */ rle = resource_list_find(BUS_GET_RESOURCE_LIST(dev, child), type, rid); if (rle != NULL) rle->res = NULL; return (0); }