diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-06-28 18:11:04 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-06-28 18:11:04 +0200 |
commit | 7d9339f75e21ccfaae85b8d460748412831d1e4d (patch) | |
tree | 986afee67aba13e00348aadc8f9da22d745af046 /sys/src/cmd | |
parent | 9d30b0f32dd9d8219805ed0d3ef04605c5f461cf (diff) | |
parent | 4275c49e72544d5b92512e41ddecbd6af5bee6c3 (diff) |
merge
Diffstat (limited to 'sys/src/cmd')
-rw-r--r-- | sys/src/cmd/iostats/statfs.h | 2 | ||||
-rw-r--r-- | sys/src/cmd/nusb/audio/audio.c | 2 | ||||
-rw-r--r-- | sys/src/cmd/nusb/disk/disk.c | 7 | ||||
-rw-r--r-- | sys/src/cmd/nusb/ether/ether.c | 4 | ||||
-rw-r--r-- | sys/src/cmd/nusb/joy/joy.c | 2 | ||||
-rw-r--r-- | sys/src/cmd/nusb/kb/kb.c | 2 | ||||
-rw-r--r-- | sys/src/cmd/nusb/lib/dev.c | 32 | ||||
-rw-r--r-- | sys/src/cmd/nusb/lib/usb.h | 3 | ||||
-rw-r--r-- | sys/src/cmd/nusb/ptp/ptp.c | 4 | ||||
-rw-r--r-- | sys/src/cmd/nusb/serial/serial.c | 17 | ||||
-rw-r--r-- | sys/src/cmd/nusb/usbd/fns.h | 1 | ||||
-rw-r--r-- | sys/src/cmd/nusb/usbd/hname.c | 17 | ||||
-rw-r--r-- | sys/src/cmd/nusb/usbd/mkfile | 1 | ||||
-rw-r--r-- | sys/src/cmd/nusb/usbd/usbd.c | 42 |
14 files changed, 107 insertions, 29 deletions
diff --git a/sys/src/cmd/iostats/statfs.h b/sys/src/cmd/iostats/statfs.h index 6d82f1938..68fccdc00 100644 --- a/sys/src/cmd/iostats/statfs.h +++ b/sys/src/cmd/iostats/statfs.h @@ -5,7 +5,7 @@ #define DEBUGFILE "iostats.out" #define DONESTR "done" #define DEBUG if(!dbg){}else fprint -#define MAXPROC 16 +#define MAXPROC 64 #define FHASHSIZE 64 #define fidhash(s) fhash[s%FHASHSIZE] diff --git a/sys/src/cmd/nusb/audio/audio.c b/sys/src/cmd/nusb/audio/audio.c index a187c8f96..08d9f9fc6 100644 --- a/sys/src/cmd/nusb/audio/audio.c +++ b/sys/src/cmd/nusb/audio/audio.c @@ -184,7 +184,7 @@ main(int argc, char *argv[]) if(argc == 0) usage(); - if((d = getdev(atoi(*argv))) == nil) + if((d = getdev(*argv)) == nil) sysfatal("getdev: %r"); audiodev = d; diff --git a/sys/src/cmd/nusb/disk/disk.c b/sys/src/cmd/nusb/disk/disk.c index 0b964f052..b690825ab 100644 --- a/sys/src/cmd/nusb/disk/disk.c +++ b/sys/src/cmd/nusb/disk/disk.c @@ -1042,7 +1042,7 @@ main(int argc, char **argv) if(argc != 1) usage(); - dev = getdev(atoi(*argv)); + dev = getdev(*argv); if(dev == nil) sysfatal("getdev: %r"); ums = dev->aux = emallocz(sizeof(Ums), 1); @@ -1062,7 +1062,10 @@ main(int argc, char **argv) for(i = 0; i <= ums->maxlun; i++){ lun = &ums->lun[i]; - snprint(lun->name, sizeof(lun->name), "sdU%d.%d", dev->id, i); + if(ums->maxlun > 0) + snprint(lun->name, sizeof(lun->name), "sdU%s.%d", dev->hname, i); + else + snprint(lun->name, sizeof(lun->name), "sdU%s", dev->hname); makeparts(lun); } snprint(buf, sizeof buf, "%d.disk", dev->id); diff --git a/sys/src/cmd/nusb/ether/ether.c b/sys/src/cmd/nusb/ether/ether.c index cc3116911..abdb0f897 100644 --- a/sys/src/cmd/nusb/ether/ether.c +++ b/sys/src/cmd/nusb/ether/ether.c @@ -819,7 +819,7 @@ threadmain(int argc, char **argv) if(argc != 1) usage(); - if((d = getdev(atoi(*argv))) == nil) + if((d = getdev(*argv)) == nil) sysfatal("getdev: %r"); if(findendpoints(d, &ei, &eo) < 0) sysfatal("no endpoints found"); @@ -847,7 +847,7 @@ threadmain(int argc, char **argv) atnotify(inote, 1); time0 = time(0); - tab[Qiface].name = smprint("etherU%d", d->id); + tab[Qiface].name = smprint("etherU%s", d->hname); snprint(s, sizeof(s), "%d.ether", d->id); closedev(d); threadpostsharesrv(&fs, nil, "usbnet", s); diff --git a/sys/src/cmd/nusb/joy/joy.c b/sys/src/cmd/nusb/joy/joy.c index cf9b093d7..c1f7cca71 100644 --- a/sys/src/cmd/nusb/joy/joy.c +++ b/sys/src/cmd/nusb/joy/joy.c @@ -410,7 +410,7 @@ threadmain(int argc, char* argv[]) }ARGEND; if(argc != 1) usage(); - d = getdev(atoi(*argv)); + d = getdev(*argv); if(d == nil) sysfatal("getdev: %r"); ud = d->usb; diff --git a/sys/src/cmd/nusb/kb/kb.c b/sys/src/cmd/nusb/kb/kb.c index 73cb52a41..0f60c9bad 100644 --- a/sys/src/cmd/nusb/kb/kb.c +++ b/sys/src/cmd/nusb/kb/kb.c @@ -794,7 +794,7 @@ threadmain(int argc, char* argv[]) }ARGEND; if(argc != 1) usage(); - d = getdev(atoi(*argv)); + d = getdev(*argv); if(d == nil) sysfatal("getdev: %r"); ud = d->usb; diff --git a/sys/src/cmd/nusb/lib/dev.c b/sys/src/cmd/nusb/lib/dev.c index 60d327e87..2eed9490e 100644 --- a/sys/src/cmd/nusb/lib/dev.c +++ b/sys/src/cmd/nusb/lib/dev.c @@ -121,6 +121,7 @@ opendev(char *fn) free(d); return nil; } + d->hname = nil; dprint(2, "%s: opendev %#p %s\n", argv0, d, fn); return d; } @@ -323,6 +324,8 @@ closedev(Dev *d) d->cfd = d->dfd = -1; free(d->dir); d->dir = nil; + free(d->hname); + d->hname = nil; ud = d->usb; d->usb = nil; if(ud != nil){ @@ -509,12 +512,26 @@ devctl(Dev *dev, char *fmt, ...) } Dev * -getdev(int id) +getdev(char *devid) { + char buf[40], *p; Dev *d; - char buf[40]; - - snprint(buf, sizeof buf, "/dev/usb/ep%d.0", id); + + if(devid[0] == '/' || devid[0] == '#'){ + snprint(buf, sizeof buf, "%s", devid); + p = strrchr(buf, '/'); + if(p != nil){ + p = strrchr(buf, ':'); + if(p != nil) + *p = 0; + } + } else { + p = nil; + snprint(buf, sizeof buf, "/dev/usb/ep%ld.0", strtol(devid, &p, 10)); + if(*p != ':') + p = nil; + } + d = opendev(buf); if(d == nil) return nil; @@ -522,5 +539,12 @@ getdev(int id) closedev(d); return nil; } + + if(p == nil){ + snprint(buf, sizeof buf, ":%d", d->id); + p = buf; + } + d->hname = strdup(p+1); + return d; } diff --git a/sys/src/cmd/nusb/lib/usb.h b/sys/src/cmd/nusb/lib/usb.h index 24454a58f..9f47fe116 100644 --- a/sys/src/cmd/nusb/lib/usb.h +++ b/sys/src/cmd/nusb/lib/usb.h @@ -174,6 +174,7 @@ struct Dev Usbdev* usb; /* USB description */ void* aux; /* for the device driver */ void (*free)(void*); /* idem. to release aux */ + char* hname; /* hash name, uniqueue for device */ }; /* @@ -351,7 +352,7 @@ int parsedesc(Usbdev *d, Conf *c, uchar *b, int n); int parsedev(Dev *xd, uchar *b, int n); int unstall(Dev *dev, Dev *ep, int dir); int usbcmd(Dev *d, int type, int req, int value, int index, uchar *data, int count); -Dev* getdev(int id); +Dev* getdev(char *devid); extern int usbdebug; /* more messages for bigger values */ diff --git a/sys/src/cmd/nusb/ptp/ptp.c b/sys/src/cmd/nusb/ptp/ptp.c index c43ef802c..aae70d984 100644 --- a/sys/src/cmd/nusb/ptp/ptp.c +++ b/sys/src/cmd/nusb/ptp/ptp.c @@ -1011,7 +1011,7 @@ threadmain(int argc, char **argv) if(argc == 0) usage(); - if((d = getdev(atoi(*argv))) == nil) + if((d = getdev(*argv)) == nil) sysfatal("opendev: %r"); if(findendpoints(d, &epin, &epout, &epint) < 0) sysfatal("findendpoints: %r"); @@ -1037,7 +1037,7 @@ threadmain(int argc, char **argv) time0 = time(0); - snprint(name, sizeof name, "sdU%d", d->id); + snprint(name, sizeof name, "sdU%s", d->hname); snprint(desc, sizeof desc, "%d.ptp", d->id); threadpostsharesrv(&fs, nil, name, desc); diff --git a/sys/src/cmd/nusb/serial/serial.c b/sys/src/cmd/nusb/serial/serial.c index ad6a93bd7..e5a385600 100644 --- a/sys/src/cmd/nusb/serial/serial.c +++ b/sys/src/cmd/nusb/serial/serial.c @@ -810,7 +810,7 @@ threadmain(int argc, char* argv[]) }ARGEND if(argc != 1) usage(); - dev = getdev(atoi(*argv)); + dev = getdev(*argv); if(dev == nil) sysfatal("getdev: %r"); @@ -859,17 +859,10 @@ threadmain(int argc, char* argv[]) } dsprint(2, "serial: adding interface %d, %p\n", p->interfc, p); - if(p->isjtag){ - snprint(p->name, sizeof p->name, "jtag"); - dsprint(2, "serial: JTAG interface %d %p\n", i, p); - snprint(p->name, sizeof p->name, "jtag%d.%d", dev->id, i); - } else { - snprint(p->name, sizeof p->name, "eiaU"); - if(i == 0) - snprint(p->name, sizeof p->name, "eiaU%d", dev->id); - else - snprint(p->name, sizeof p->name, "eiaU%d.%d", dev->id, i); - } + if(ser->nifcs == 1) + snprint(p->name, sizeof p->name, "%s%s", p->isjtag ? "jtag" : "eiaU", dev->hname); + else + snprint(p->name, sizeof p->name, "%s%s.%d", p->isjtag ? "jtag" : "eiaU", dev->hname, i); fprint(2, "%s...", p->name); incref(dev); p->readrend.l = &p->readq; diff --git a/sys/src/cmd/nusb/usbd/fns.h b/sys/src/cmd/nusb/usbd/fns.h index 9016610c0..981ff0ceb 100644 --- a/sys/src/cmd/nusb/usbd/fns.h +++ b/sys/src/cmd/nusb/usbd/fns.h @@ -2,3 +2,4 @@ int attachdev(Port*); void detachdev(Port*); void work(void); Hub* newhub(char *, Dev *); +void hname(char *); diff --git a/sys/src/cmd/nusb/usbd/hname.c b/sys/src/cmd/nusb/usbd/hname.c new file mode 100644 index 000000000..c88a0faa1 --- /dev/null +++ b/sys/src/cmd/nusb/usbd/hname.c @@ -0,0 +1,17 @@ +#include <u.h> +#include <libc.h> +#include <mp.h> +#include <libsec.h> + +void +hname(char *buf) +{ + uchar d[SHA1dlen]; + u32int x; + int n; + + n = strlen(buf); + sha1((uchar*)buf, n, d, nil); + x = d[0] | d[1]<<8 | d[2]<<16; + snprint(buf, n+1, "%.5ux", x & 0xfffff); +} diff --git a/sys/src/cmd/nusb/usbd/mkfile b/sys/src/cmd/nusb/usbd/mkfile index 4e8beeb6a..37fa1759c 100644 --- a/sys/src/cmd/nusb/usbd/mkfile +++ b/sys/src/cmd/nusb/usbd/mkfile @@ -3,6 +3,7 @@ OFILES=\ usbd.$O\ hub.$O\ + hname.$O\ HFILES=\ dat.h\ diff --git a/sys/src/cmd/nusb/usbd/usbd.c b/sys/src/cmd/nusb/usbd/usbd.c index 59a827e01..644c16261 100644 --- a/sys/src/cmd/nusb/usbd/usbd.c +++ b/sys/src/cmd/nusb/usbd/usbd.c @@ -221,8 +221,10 @@ static char * formatdev(Dev *d, int type) { Usbdev *u = d->usb; - - return smprint("%s %d %.4x %.4x %.8lx\n", type ? "detach" : "attach", d->id, u->vid, u->did, u->csp); + return smprint("%s %d %.4x %.4x %.6lx %s\n", + type ? "detach" : "attach", + d->id, u->vid, u->did, u->csp, + d->hname != nil ? d->hname : ""); } static void @@ -335,6 +337,39 @@ Srv usbdsrv = { .destroyfid = usbddestroyfid, }; +static void +assignhname(Dev *dev) +{ + extern Hub *hubs; + char buf[64]; + Usbdev *ud; + Hub *h; + int i; + + ud = dev->usb; + + /* build string of device uniqueue stuff */ + snprint(buf, sizeof(buf), "%.4x%.4x%.4x%.6lx%s", + ud->vid, ud->did, ud->dno, ud->csp, ud->serial); + + hname(buf); + + /* check for collisions */ + for(h = hubs; h != nil; h = h->next){ + for(i = 1; i <= h->nport; i++){ + if(h->port[i].dev == nil) + continue; + if(h->port[i].dev->hname == nil || h->port[i].dev == dev) + continue; + if(strcmp(h->port[i].dev->hname, buf) == 0){ + dev->hname = smprint("%s%d", buf, dev->id); + return; + } + } + } + dev->hname = strdup(buf); +} + int attachdev(Port *p) { @@ -355,6 +390,9 @@ attachdev(Port *p) /* close control endpoint so driver can open it */ close(d->dfd); d->dfd = -1; + + /* assign stable name based on device descriptor */ + assignhname(d); pushevent(d, formatdev(d, 0)); return 0; |