Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/pccard/pccard.c
Show First 20 Lines • Show All 501 Lines • ▼ Show 20 Lines | STAILQ_FOREACH(cfe, &pf->cfe_head, cfe_list) { | ||||
spaces = 0; | spaces = 0; | ||||
for (i = 0; i < cfe->num_iospace; i++) { | for (i = 0; i < cfe->num_iospace; i++) { | ||||
ios = cfe->iospace + i; | ios = cfe->iospace + i; | ||||
start = ios->start; | start = ios->start; | ||||
if (start) | if (start) | ||||
end = start + ios->length - 1; | end = start + ios->length - 1; | ||||
else | else | ||||
end = ~0; | end = ~0; | ||||
DEVPRINTF((bus, "I/O rid %d start %#lx end %#lx\n", | DEVPRINTF((bus, "I/O rid %d start %#jx end %#jx\n", | ||||
i, start, end)); | i, start, end)); | ||||
rid = i; | rid = i; | ||||
len = ios->length; | len = ios->length; | ||||
r = bus_alloc_resource(bus, SYS_RES_IOPORT, &rid, | r = bus_alloc_resource(bus, SYS_RES_IOPORT, &rid, | ||||
start, end, len, rman_make_alignment_flags(len)); | start, end, len, rman_make_alignment_flags(len)); | ||||
if (r == NULL) { | if (r == NULL) { | ||||
DEVPRINTF((bus, "I/O rid %d failed\n", i)); | DEVPRINTF((bus, "I/O rid %d failed\n", i)); | ||||
goto not_this_one; | goto not_this_one; | ||||
} | } | ||||
rle = resource_list_add(rl, SYS_RES_IOPORT, | rle = resource_list_add(rl, SYS_RES_IOPORT, | ||||
rid, rman_get_start(r), rman_get_end(r), len); | rid, rman_get_start(r), rman_get_end(r), len); | ||||
if (rle == NULL) | if (rle == NULL) | ||||
panic("Cannot add resource rid %d IOPORT", rid); | panic("Cannot add resource rid %d IOPORT", rid); | ||||
rle->res = r; | rle->res = r; | ||||
spaces++; | spaces++; | ||||
} | } | ||||
for (i = 0; i < cfe->num_memspace; i++) { | for (i = 0; i < cfe->num_memspace; i++) { | ||||
mems = cfe->memspace + i; | mems = cfe->memspace + i; | ||||
start = mems->cardaddr + mems->hostaddr; | start = mems->cardaddr + mems->hostaddr; | ||||
if (start) | if (start) | ||||
end = start + mems->length - 1; | end = start + mems->length - 1; | ||||
else | else | ||||
end = ~0; | end = ~0; | ||||
DEVPRINTF((bus, "Memory rid %d start %#lx end %#lx\ncardaddr %#lx hostaddr %#lx length %#lx\n", | DEVPRINTF((bus, "Memory rid %d start %#jx end %#jx\ncardaddr %#jx hostaddr %#jx length %#jx\n", | ||||
i, start, end, mems->cardaddr, mems->hostaddr, | i, start, end, mems->cardaddr, mems->hostaddr, | ||||
mems->length)); | mems->length)); | ||||
rid = i; | rid = i; | ||||
len = mems->length; | len = mems->length; | ||||
r = bus_alloc_resource(bus, SYS_RES_MEMORY, &rid, | r = bus_alloc_resource(bus, SYS_RES_MEMORY, &rid, | ||||
start, end, len, rman_make_alignment_flags(len)); | start, end, len, rman_make_alignment_flags(len)); | ||||
if (r == NULL) { | if (r == NULL) { | ||||
DEVPRINTF((bus, "Memory rid %d failed\n", i)); | DEVPRINTF((bus, "Memory rid %d failed\n", i)); | ||||
▲ Show 20 Lines • Show All 54 Lines • ▼ Show 20 Lines | pccard_function_free(struct pccard_function *pf) | ||||
} | } | ||||
STAILQ_FOREACH(rle, &devi->resources, link) { | STAILQ_FOREACH(rle, &devi->resources, link) { | ||||
if (rle->res) { | if (rle->res) { | ||||
if (rman_get_device(rle->res) != pf->sc->dev) | if (rman_get_device(rle->res) != pf->sc->dev) | ||||
device_printf(pf->sc->dev, | device_printf(pf->sc->dev, | ||||
"function_free: Resource still owned by " | "function_free: Resource still owned by " | ||||
"child, oops. " | "child, oops. " | ||||
"(type=%d, rid=%d, addr=%#lx)\n", | "(type=%d, rid=%d, addr=%#jx)\n", | ||||
rle->type, rle->rid, | rle->type, rle->rid, | ||||
rman_get_start(rle->res)); | rman_get_start(rle->res)); | ||||
BUS_RELEASE_RESOURCE(device_get_parent(pf->sc->dev), | BUS_RELEASE_RESOURCE(device_get_parent(pf->sc->dev), | ||||
pf->sc->dev, rle->type, rle->rid, rle->res); | pf->sc->dev, rle->type, rle->rid, rle->res); | ||||
rle->res = NULL; | rle->res = NULL; | ||||
} | } | ||||
} | } | ||||
resource_list_free(&devi->resources); | resource_list_free(&devi->resources); | ||||
▲ Show 20 Lines • Show All 78 Lines • ▼ Show 20 Lines | STAILQ_FOREACH(tmp, &pf->sc->card.pf_head, pf_list) { | ||||
} | } | ||||
} | } | ||||
if (tmp == NULL) { | if (tmp == NULL) { | ||||
pf->ccr_rid = 0; | pf->ccr_rid = 0; | ||||
pf->ccr_res = bus_alloc_resource_anywhere(dev, SYS_RES_MEMORY, | pf->ccr_res = bus_alloc_resource_anywhere(dev, SYS_RES_MEMORY, | ||||
&pf->ccr_rid, PCCARD_MEM_PAGE_SIZE, RF_ACTIVE); | &pf->ccr_rid, PCCARD_MEM_PAGE_SIZE, RF_ACTIVE); | ||||
if (!pf->ccr_res) | if (!pf->ccr_res) | ||||
goto bad; | goto bad; | ||||
DEVPRINTF((dev, "ccr_res == %#lx-%#lx, base=%#x\n", | DEVPRINTF((dev, "ccr_res == %#jx-%#jx, base=%#x\n", | ||||
rman_get_start(pf->ccr_res), rman_get_end(pf->ccr_res), | rman_get_start(pf->ccr_res), rman_get_end(pf->ccr_res), | ||||
pf->ccr_base)); | pf->ccr_base)); | ||||
CARD_SET_RES_FLAGS(device_get_parent(dev), dev, SYS_RES_MEMORY, | CARD_SET_RES_FLAGS(device_get_parent(dev), dev, SYS_RES_MEMORY, | ||||
pf->ccr_rid, PCCARD_A_MEM_ATTR); | pf->ccr_rid, PCCARD_A_MEM_ATTR); | ||||
CARD_SET_MEMORY_OFFSET(device_get_parent(dev), dev, | CARD_SET_MEMORY_OFFSET(device_get_parent(dev), dev, | ||||
pf->ccr_rid, pf->ccr_base, &pf->pf_ccr_offset); | pf->ccr_rid, pf->ccr_base, &pf->pf_ccr_offset); | ||||
pf->pf_ccrt = rman_get_bustag(pf->ccr_res); | pf->pf_ccrt = rman_get_bustag(pf->ccr_res); | ||||
pf->pf_ccrh = rman_get_bushandle(pf->ccr_res); | pf->pf_ccrh = rman_get_bushandle(pf->ccr_res); | ||||
▲ Show 20 Lines • Show All 483 Lines • ▼ Show 20 Lines | return BUS_RELEASE_RESOURCE(device_get_parent(dev), child, | ||||
type, rid, r); | type, rid, r); | ||||
dinfo = device_get_ivars(child); | dinfo = device_get_ivars(child); | ||||
rle = resource_list_find(&dinfo->resources, type, rid); | rle = resource_list_find(&dinfo->resources, type, rid); | ||||
if (!rle) { | if (!rle) { | ||||
device_printf(dev, "Allocated resource not found, " | device_printf(dev, "Allocated resource not found, " | ||||
"%d %#x %#lx %#lx\n", | "%d %#x %#jx %#jx\n", | ||||
type, rid, rman_get_start(r), rman_get_size(r)); | type, rid, rman_get_start(r), rman_get_size(r)); | ||||
return ENOENT; | return ENOENT; | ||||
} | } | ||||
if (!rle->res) { | if (!rle->res) { | ||||
device_printf(dev, "Allocated resource not recorded\n"); | device_printf(dev, "Allocated resource not recorded\n"); | ||||
return ENOENT; | return ENOENT; | ||||
} | } | ||||
/* | /* | ||||
▲ Show 20 Lines • Show All 285 Lines • Show Last 20 Lines |