summaryrefslogtreecommitdiffstats
path: root/sys/pccard/mecia.c
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2001-08-14 23:24:56 +0000
committerimp <imp@FreeBSD.org>2001-08-14 23:24:56 +0000
commit09db468bbb936df7a97e76ccd18eb85f0d3f6212 (patch)
treeb1ab99e8e1859ba08f6b0b446894219f1f3a568f /sys/pccard/mecia.c
parent48f7c0491f991ef2bf20bde680359ae1dce4ad1b (diff)
downloadFreeBSD-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.c38
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);
}
/*
OpenPOWER on IntegriCloud