diff options
author | imp <imp@FreeBSD.org> | 2001-08-14 23:24:56 +0000 |
---|---|---|
committer | imp <imp@FreeBSD.org> | 2001-08-14 23:24:56 +0000 |
commit | 09db468bbb936df7a97e76ccd18eb85f0d3f6212 (patch) | |
tree | b1ab99e8e1859ba08f6b0b446894219f1f3a568f /sys/pccard/mecia.c | |
parent | 48f7c0491f991ef2bf20bde680359ae1dce4ad1b (diff) | |
download | FreeBSD-src-09db468bbb936df7a97e76ccd18eb85f0d3f6212.zip FreeBSD-src-09db468bbb936df7a97e76ccd18eb85f0d3f6212.tar.gz |
Implement PIOCSRESOURCE for mecia like we do for pcic.
Diffstat (limited to 'sys/pccard/mecia.c')
-rw-r--r-- | sys/pccard/mecia.c | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/sys/pccard/mecia.c b/sys/pccard/mecia.c index 76669c8..59ef5b1 100644 --- a/sys/pccard/mecia.c +++ b/sys/pccard/mecia.c @@ -207,13 +207,49 @@ mecia_attach(device_t dev) return (bus_generic_attach(dev)); } +static int +mecia_sresource(struct slot *slt, caddr_t data) +{ + struct pccard_resource *pr; + struct resource *r; + int flags; + int rid = 0; + device_t pccarddev = slt->dev; + + pr = (struct pccard_resource *)data; + pr->resource_addr = ~0ul; + switch(pr->type) { + default: + return (EINVAL); + case SYS_RES_MEMORY: + case SYS_RES_IRQ: + case SYS_RES_IOPORT: + break; + } + flags = rman_make_alignment_flags(pr->size); + r = bus_alloc_resource(pccarddev, pr->type, &rid, pr->min, pr->max, + pr->size, flags); + if (r != NULL) { + pr->resource_addr = (u_long)rman_get_start(r); + bus_release_resource(bridgedev, pr->type, rid, r); + } + return (0); +} + /* * ioctl calls - Controller specific ioctls */ static int mecia_ioctl(struct slot *slt, int cmd, caddr_t data) { - return (ENOTTY); + switch(cmd) { + default: + return (ENOTTY); + case PIOCSRESOURCE: /* Can I use this resource? */ + mecia_sresource(slt, data); + break; + } + return (0); } /* |