Example #1
0
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));
}
Example #2
0
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));
}
Example #3
0
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));
}
Example #4
0
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);
}