diff options
author | Warner Losh <imp@FreeBSD.org> | 2001-08-14 23:24:56 +0000 |
---|---|---|
committer | Warner Losh <imp@FreeBSD.org> | 2001-08-14 23:24:56 +0000 |
commit | a547ba9cce7b0d21ec145cdc6834dacebb9233fa (patch) | |
tree | b1ab99e8e1859ba08f6b0b446894219f1f3a568f /sys/pccard | |
parent | b194597fd59a80a3ade1a4d4b055d2018a78446f (diff) | |
download | src-a547ba9cce7b0d21ec145cdc6834dacebb9233fa.tar.gz src-a547ba9cce7b0d21ec145cdc6834dacebb9233fa.zip |
Implement PIOCSRESOURCE for mecia like we do for pcic.
Notes
Notes:
svn path=/head/; revision=81652
Diffstat (limited to 'sys/pccard')
-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 76669c8ea9d3..59ef5b1960c8 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); } /* |