Convert the PCI ID selection from a simple if into a table.
Mark the table with PNP info. Fix compilation by returning FILTER_STRAY in two places, as suggested by comments. Create a simple module from this. Left unconnected because I can't test it as a module.
This commit is contained in:
parent
f0df5e27ce
commit
b0a5c98898
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=331430
@ -137,7 +137,7 @@ adlink_intr(void *arg)
|
|||||||
sc = arg;
|
sc = arg;
|
||||||
u = bus_read_4(sc->res[0], 0x38);
|
u = bus_read_4(sc->res[0], 0x38);
|
||||||
if (!(u & 0x00800000))
|
if (!(u & 0x00800000))
|
||||||
return; // XXX - FILTER_STRAY?
|
return (FILTER_STRAY);
|
||||||
bus_write_4(sc->res[0], 0x38, u | 0x003f4000);
|
bus_write_4(sc->res[0], 0x38, u | 0x003f4000);
|
||||||
|
|
||||||
sc->sample += sc->p0->chunksize / 2;
|
sc->sample += sc->p0->chunksize / 2;
|
||||||
@ -150,7 +150,7 @@ adlink_intr(void *arg)
|
|||||||
|
|
||||||
if (sc->p0->state != STATE_RUN) {
|
if (sc->p0->state != STATE_RUN) {
|
||||||
printf("adlink: stopping %d\n", sc->p0->state);
|
printf("adlink: stopping %d\n", sc->p0->state);
|
||||||
return; // XXX - FILTER_STRAY?
|
return (FILTER_STRAY);
|
||||||
}
|
}
|
||||||
|
|
||||||
pg = pg->next;
|
pg = pg->next;
|
||||||
@ -346,15 +346,33 @@ adlink_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, struct threa
|
|||||||
|
|
||||||
static devclass_t adlink_devclass;
|
static devclass_t adlink_devclass;
|
||||||
|
|
||||||
|
struct pci_id
|
||||||
|
{
|
||||||
|
uint16_t vendor;
|
||||||
|
uint16_t device;
|
||||||
|
const char *desc;
|
||||||
|
} adlink_id[] = {
|
||||||
|
{ .vendor = 0x10e8, .device = 0x80da,
|
||||||
|
.desc ="Adlink PCI-9812 4 ch 12 bit 20 msps" }
|
||||||
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
adlink_probe(device_t self)
|
adlink_probe(device_t self)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
|
uint16_t vendor, device;
|
||||||
|
|
||||||
if (pci_get_devid(self) != 0x80da10e8)
|
vendor = pci_get_vendor(self);
|
||||||
return (ENXIO);
|
device = pci_get_device(self);
|
||||||
device_set_desc(self, "Adlink PCI-9812 4 ch 12 bit 20 msps");
|
for (i = 0; i < nitems(adlink_id); i++) {
|
||||||
|
if (adlink_id[i].vendor == vendor &&
|
||||||
|
adlink_id[i].device == device) {
|
||||||
|
device_set_desc(self, adlink_id[i].desc);
|
||||||
return (BUS_PROBE_DEFAULT);
|
return (BUS_PROBE_DEFAULT);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return (ENXIO);
|
||||||
|
}
|
||||||
|
|
||||||
static struct resource_spec adlink_res_spec[] = {
|
static struct resource_spec adlink_res_spec[] = {
|
||||||
{ SYS_RES_IOPORT, PCIR_BAR(0), RF_ACTIVE},
|
{ SYS_RES_IOPORT, PCIR_BAR(0), RF_ACTIVE},
|
||||||
@ -420,5 +438,6 @@ static driver_t adlink_driver = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
DRIVER_MODULE(adlink, pci, adlink_driver, adlink_devclass, 0, 0);
|
DRIVER_MODULE(adlink, pci, adlink_driver, adlink_devclass, 0, 0);
|
||||||
|
MODULE_PNP_INFO("U16:vendor;U16:device;D:#", pci, adlink, adlink_id, sizeof(adlink_id[0]),
|
||||||
|
nitems(adlink_id));
|
||||||
#endif /* _KERNEL */
|
#endif /* _KERNEL */
|
||||||
|
9
sys/modules/adlink/Makefile
Normal file
9
sys/modules/adlink/Makefile
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# $FreeBSD$
|
||||||
|
|
||||||
|
.PATH: ${SRCTOP}/sys/dev/adlink
|
||||||
|
|
||||||
|
KMOD= adlink
|
||||||
|
SRCS= adlink.c \
|
||||||
|
device_if.h bus_if.h
|
||||||
|
|
||||||
|
.include <bsd.kmod.mk>
|
Loading…
Reference in New Issue
Block a user