diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-07-05 06:01:03 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-07-05 06:01:03 +0200 |
commit | 502247bf92f380a642b8e17048466c18bb9efd24 (patch) | |
tree | 6def2bea9f0977c82481a0dcab6adaf4b7de10dc /sys | |
parent | 336e605a1191efe1293333bac3b4f76d07b9f89b (diff) |
nusb/serial: more cleanup
Diffstat (limited to 'sys')
-rw-r--r-- | sys/src/cmd/nusb/serial/ftdi.c | 20 | ||||
-rw-r--r-- | sys/src/cmd/nusb/serial/prolific.c | 23 | ||||
-rw-r--r-- | sys/src/cmd/nusb/serial/serial.c | 42 | ||||
-rw-r--r-- | sys/src/cmd/nusb/serial/serial.h | 9 | ||||
-rw-r--r-- | sys/src/cmd/nusb/serial/silabs.c | 20 | ||||
-rw-r--r-- | sys/src/cmd/nusb/serial/ucons.c | 25 |
6 files changed, 55 insertions, 84 deletions
diff --git a/sys/src/cmd/nusb/serial/ftdi.c b/sys/src/cmd/nusb/serial/ftdi.c index ef6fc4937..fec86ed64 100644 --- a/sys/src/cmd/nusb/serial/ftdi.c +++ b/sys/src/cmd/nusb/serial/ftdi.c @@ -1167,20 +1167,14 @@ ftgettype(Serial *ser) } int -ftmatch(Serial *ser, char *info) +ftprobe(Serial *ser) { - Cinfo *ip; - char buf[50]; - - for(ip = ftinfo; ip->vid != 0; ip++){ - snprint(buf, sizeof buf, "vid %#06x did %#06x", ip->vid, ip->did); - dsprint(2, "serial: %s %s\n", buf, info); - if(strstr(info, buf) != nil){ - ftgettype(ser); - return 0; - } - } - return -1; + Usbdev *ud = ser->dev->usb; + + if(matchid(ftinfo, ud->vid, ud->did) == nil) + return -1; + ftgettype(ser); + return 0; } static int diff --git a/sys/src/cmd/nusb/serial/prolific.c b/sys/src/cmd/nusb/serial/prolific.c index b81d04e08..a0a489111 100644 --- a/sys/src/cmd/nusb/serial/prolific.c +++ b/sys/src/cmd/nusb/serial/prolific.c @@ -231,22 +231,15 @@ Cinfo plinfo[] = { static Serialops plops; int -plmatch(Serial *ser, char *info) +plprobe(Serial *ser) { - Cinfo *ip; - char buf[50]; - - for(ip = plinfo; ip->vid != 0; ip++){ - snprint(buf, sizeof buf, "vid %#06x did %#06x", - ip->vid, ip->did); - dsprint(2, "serial: %s %s\n", buf, info); - if(strstr(info, buf) != nil){ - ser->hasepintr = 1; - ser->Serialops = plops; - return 0; - } - } - return -1; + Usbdev *ud = ser->dev->usb; + + if(matchid(plinfo, ud->vid, ud->did) == nil) + return -1; + ser->hasepintr = 1; + ser->Serialops = plops; + return 0; } static void statusreader(void *u); diff --git a/sys/src/cmd/nusb/serial/serial.c b/sys/src/cmd/nusb/serial/serial.c index c543dde40..1fd804bd3 100644 --- a/sys/src/cmd/nusb/serial/serial.c +++ b/sys/src/cmd/nusb/serial/serial.c @@ -12,11 +12,7 @@ #include "usb.h" #include "serial.h" - - int serialdebug; -static int sdebug; - Serialport **ports; int nports; @@ -308,6 +304,17 @@ serdumpst(Serialport *p, char *buf, int bufsz) return s; } +Cinfo* +matchid(Cinfo *tab, int vid, int did) +{ + while(tab->vid != 0){ + if(tab->vid == vid && (tab->did == did || did == 0)) + return tab; + tab++; + } + return nil; +} + static int serinit(Serialport *p) { @@ -755,10 +762,10 @@ static Srv serialfs = { .end = dend, }; -int ftmatch(Serial *ser, char *info); -int plmatch(Serial *ser, char *info); -int slmatch(Serial *ser, char *info); -int uconsmatch(Serial *ser, char *info); +extern int ftprobe(Serial *ser); +extern int plprobe(Serial *ser); +extern int slprobe(Serial *ser); +extern int uconsprobe(Serial *ser); void threadmain(int argc, char* argv[]) @@ -790,14 +797,11 @@ threadmain(int argc, char* argv[]) ser->jtag = -1; ser->nifcs = 1; - snprint(buf, sizeof buf, "vid %#06x did %#06x", - dev->usb->vid, dev->usb->did); - /* probe all the drivers */ - if(plmatch(ser, buf) - && uconsmatch(ser, buf) - && ftmatch(ser, buf) - && slmatch(ser, buf)) + if(plprobe(ser) + && uconsprobe(ser) + && ftprobe(ser) + && slprobe(ser)) sysfatal("no serial devices found"); for(i = 0; i < ser->nifcs; i++){ @@ -818,9 +822,8 @@ threadmain(int argc, char* argv[]) for(i = 0; i < ser->nifcs; i++){ p = &ser->p[i]; dprint(2, "serial: valid interface, calling serinit\n"); - if(serinit(p) < 0){ + if(serinit(p) < 0) sysfatal("wserinit: %r"); - } dsprint(2, "serial: adding interface %d, %p\n", p->interfc, p); if(ser->nifcs == 1) @@ -835,10 +838,7 @@ threadmain(int argc, char* argv[]) } qunlock(ser); - if(nports == 0) - threadexits("no ports"); - snprint(buf, sizeof buf, "%d.serial", dev->id); threadpostsharesrv(&serialfs, nil, "usb", buf); - threadexits(0); + threadexits(nil); } diff --git a/sys/src/cmd/nusb/serial/serial.h b/sys/src/cmd/nusb/serial/serial.h index 267738103..4117e7e95 100644 --- a/sys/src/cmd/nusb/serial/serial.h +++ b/sys/src/cmd/nusb/serial/serial.h @@ -22,7 +22,6 @@ enum { Maxifc = 16, }; - struct Serialport { char name[32]; Serial *s; /* device we belong to */ @@ -110,17 +109,14 @@ enum { * !hget http://lxr.linux.no/source/drivers/usb/serial/pl2303.c|htmlfmt */ -int serialmain(Dev *d, int argc, char *argv[]); - typedef struct Cinfo Cinfo; struct Cinfo { int vid; /* usb vendor id */ int did; /* usb device/product id */ - int cid; /* controller id assigned by us */ + + int cid; /* assigned for us */ }; -extern Cinfo plinfo[]; -extern Cinfo uconsinfo[]; extern int serialdebug; #define dsprint if(serialdebug)fprint @@ -128,3 +124,4 @@ extern int serialdebug; int serialrecover(Serial *ser, Serialport *p, Dev *ep, char *err); int serialreset(Serial *ser); char *serdumpst(Serialport *p, char *buf, int bufsz); +Cinfo *matchid(Cinfo *tab, int vid, int did); diff --git a/sys/src/cmd/nusb/serial/silabs.c b/sys/src/cmd/nusb/serial/silabs.c index c5cb0e634..ca2032139 100644 --- a/sys/src/cmd/nusb/serial/silabs.c +++ b/sys/src/cmd/nusb/serial/silabs.c @@ -31,20 +31,14 @@ static Cinfo slinfo[] = { static Serialops slops; -slmatch(Serial *ser, char *info) +slprobe(Serial *ser) { - Cinfo *ip; - char buf[50]; - - for(ip = slinfo; ip->vid != 0; ip++){ - snprint(buf, sizeof buf, "vid %#06x did %#06x", - ip->vid, ip->did); - if(strstr(info, buf) != nil){ - ser->Serialops = slops; - return 0; - } - } - return -1; + Usbdev *ud = ser->dev->usb; + + if(matchid(slinfo, ud->vid, ud->did) == nil) + return -1; + ser->Serialops = slops; + return 0; } static int diff --git a/sys/src/cmd/nusb/serial/ucons.c b/sys/src/cmd/nusb/serial/ucons.c index 7b2f3f9ee..552126fc8 100644 --- a/sys/src/cmd/nusb/serial/ucons.c +++ b/sys/src/cmd/nusb/serial/ucons.c @@ -15,26 +15,19 @@ enum { }; Cinfo uconsinfo[] = { - { Net20DCVid, Net20DCDid }, - { HuaweiVid, HuaweiE220 }, - { 0, 0 }, + { Net20DCVid, Net20DCDid, 1 }, + { HuaweiVid, HuaweiE220, 2 }, + { 0, 0, 0 }, }; int -uconsmatch(Serial *ser, char *info) +uconsprobe(Serial *ser) { + Usbdev *ud = ser->dev->usb; Cinfo *ip; - char buf[50]; - for(ip = uconsinfo; ip->vid != 0; ip++){ - snprint(buf, sizeof buf, "vid %#06x did %#06x", - ip->vid, ip->did); - dsprint(2, "serial: %s %s\n", buf, info); - if(strstr(info, buf) != nil){ - if(ip->vid == HuaweiVid && ip->did == HuaweiE220) - ser->nifcs = 2; - return 0; - } - } - return -1; + if((ip = matchid(uconsinfo, ud->vid, ud->did)) == nil) + return -1; + ser->nifcs = ip->cid; + return 0; } |