summaryrefslogtreecommitdiff
path: root/sys/src/cmd
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2014-06-28 18:11:04 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2014-06-28 18:11:04 +0200
commit7d9339f75e21ccfaae85b8d460748412831d1e4d (patch)
tree986afee67aba13e00348aadc8f9da22d745af046 /sys/src/cmd
parent9d30b0f32dd9d8219805ed0d3ef04605c5f461cf (diff)
parent4275c49e72544d5b92512e41ddecbd6af5bee6c3 (diff)
merge
Diffstat (limited to 'sys/src/cmd')
-rw-r--r--sys/src/cmd/iostats/statfs.h2
-rw-r--r--sys/src/cmd/nusb/audio/audio.c2
-rw-r--r--sys/src/cmd/nusb/disk/disk.c7
-rw-r--r--sys/src/cmd/nusb/ether/ether.c4
-rw-r--r--sys/src/cmd/nusb/joy/joy.c2
-rw-r--r--sys/src/cmd/nusb/kb/kb.c2
-rw-r--r--sys/src/cmd/nusb/lib/dev.c32
-rw-r--r--sys/src/cmd/nusb/lib/usb.h3
-rw-r--r--sys/src/cmd/nusb/ptp/ptp.c4
-rw-r--r--sys/src/cmd/nusb/serial/serial.c17
-rw-r--r--sys/src/cmd/nusb/usbd/fns.h1
-rw-r--r--sys/src/cmd/nusb/usbd/hname.c17
-rw-r--r--sys/src/cmd/nusb/usbd/mkfile1
-rw-r--r--sys/src/cmd/nusb/usbd/usbd.c42
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;