diff options
author | imp <imp@FreeBSD.org> | 2003-04-23 23:39:21 +0000 |
---|---|---|
committer | imp <imp@FreeBSD.org> | 2003-04-23 23:39:21 +0000 |
commit | 5c827309fcbfa496d917dad6be838e8a04d33d56 (patch) | |
tree | 47d618993b14df00f487317887c2f960fccf9467 /sys/pccard/pccard.c | |
parent | 1848692e44bcf63ff4d2c22a9a232c41c4baaf6f (diff) | |
download | FreeBSD-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.c | 34 |
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 */ |