summaryrefslogtreecommitdiffstats
path: root/sys/pccard/pccard.c
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2003-04-23 23:39:21 +0000
committerimp <imp@FreeBSD.org>2003-04-23 23:39:21 +0000
commit5c827309fcbfa496d917dad6be838e8a04d33d56 (patch)
tree47d618993b14df00f487317887c2f960fccf9467 /sys/pccard/pccard.c
parent1848692e44bcf63ff4d2c22a9a232c41c4baaf6f (diff)
downloadFreeBSD-src-5c827309fcbfa496d917dad6be838e8a04d33d56.zip
FreeBSD-src-5c827309fcbfa496d917dad6be838e8a04d33d56.tar.gz
1. Allow drivers to query CIS strings from OLDCARD.
2. Include backwards compatibility good for the moment (eventually will be turned off in current, but allow for a short transition period). PR: 51333 Submited by: Scott Mitchell (1) MFC after: 2 weeks
Diffstat (limited to 'sys/pccard/pccard.c')
-rw-r--r--sys/pccard/pccard.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/sys/pccard/pccard.c b/sys/pccard/pccard.c
index 3d3ad26..71d8b20 100644
--- a/sys/pccard/pccard.c
+++ b/sys/pccard/pccard.c
@@ -223,6 +223,8 @@ allocate_driver(struct slot *slt, struct dev_desc *desc)
bcopy(desc->misc, devi->misc, sizeof(desc->misc));
strcpy(devi->manufstr, desc->manufstr);
strcpy(devi->versstr, desc->versstr);
+ strcpy(devi->cis3str, desc->cis3str);
+ strcpy(devi->cis4str, desc->cis4str);
devi->manufacturer = desc->manufacturer;
devi->product = desc->product;
devi->prodext = desc->prodext;
@@ -476,6 +478,10 @@ crdioctl(dev_t dev, u_long cmd, caddr_t data, int fflag, d_thread_t *td)
int pwval;
int s;
struct slot *slt = PCCARD_DEV2SOFTC(dev);
+/*XXX*/#if __FreeBSD_version < 5000000 /* 4.x compatibility only. */
+ struct dev_desc d;
+ struct dev_desc_old *odp;
+/*XXX*/#endif
if (slt == 0 && cmd != PIOCRWMEM)
return (ENXIO);
@@ -606,6 +612,34 @@ crdioctl(dev_t dev, u_long cmd, caddr_t data, int fflag, d_thread_t *td)
else
pccard_failure_beep();
return (err);
+/***/#if __FreeBSD_version < 5000000 /* 4.x compatibility only. */
+ case PIOCSDRVOLD:
+ if (suser(td))
+ return (EPERM);
+ odp = (struct dev_desc_old *) data;
+ strlcpy(d.name, odp->name, sizeof(d.name));
+ d.unit = odp->unit;
+ d.mem = odp->mem;
+ d.memsize = odp->memsize;
+ d.iobase = odp->iobase;
+ d.iosize = odp->iosize;
+ d.irqmask = odp->irqmask;
+ d.flags = odp->flags;
+ memcpy(d.misc, odp->misc, sizeof(odp->misc));
+ strlcpy(d.manufstr, odp->manufstr, sizeof(d.manufstr));
+ strlcpy(d.versstr, odp->versstr, sizeof(d.versstr));
+ *d.cis3str = '\0';
+ *d.cis4str = '\0';
+ d.manufacturer = odp->manufacturer;
+ d.product = odp->product;
+ d.prodext = odp->prodext;
+ err = allocate_driver(slt, &d);
+ if (!err)
+ pccard_success_beep();
+ else
+ pccard_failure_beep();
+ return (err);
+/***/#endif
/*
* Virtual removal/insertion
*/
OpenPOWER on IntegriCloud