diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2023-01-05 17:15:24 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2023-01-05 17:15:24 +0000 |
commit | 457ba087b13a881b013940f6e54c09566ec10ed1 (patch) | |
tree | 14c5a9606455893cd9aae9bb6f8b03640f07bc10 /sys/src/cmd/nusb | |
parent | 556eea1f5a6cd0f1eeb74156ff3899803d107822 (diff) |
nusb/usbd: assign hname to hubs
For the port control, it can be usefull to refer to a
hub by its stable hash name.
Diffstat (limited to 'sys/src/cmd/nusb')
-rw-r--r-- | sys/src/cmd/nusb/usbd/fns.h | 1 | ||||
-rw-r--r-- | sys/src/cmd/nusb/usbd/hub.c | 6 | ||||
-rw-r--r-- | sys/src/cmd/nusb/usbd/usbd.c | 21 |
3 files changed, 21 insertions, 7 deletions
diff --git a/sys/src/cmd/nusb/usbd/fns.h b/sys/src/cmd/nusb/usbd/fns.h index 52eb8d7f6..b97da554f 100644 --- a/sys/src/cmd/nusb/usbd/fns.h +++ b/sys/src/cmd/nusb/usbd/fns.h @@ -3,5 +3,6 @@ void detachdev(Port*); void work(void); Hub* newhub(char *, Dev*); int hname(char *); +void assignhname(Dev *dev); void checkidle(void); int portfeature(Hub*, int, int, int); diff --git a/sys/src/cmd/nusb/usbd/hub.c b/sys/src/cmd/nusb/usbd/hub.c index 8a9a6c115..4ff03b3f0 100644 --- a/sys/src/cmd/nusb/usbd/hub.c +++ b/sys/src/cmd/nusb/usbd/hub.c @@ -199,8 +199,10 @@ newhub(char *fn, Dev *d) devctl(h->dev, "info roothub csp %#08ux ports %d", 0x000009, h->nport); else{ - devctl(h->dev, "info hub csp %#08ulx ports %d vid %#.4ux did %#.4ux %q %q", - ud->csp, h->nport, ud->vid, ud->did, ud->vendor, ud->product); + assignhname(h->dev); + + devctl(h->dev, "info hub csp %#08ulx ports %d vid %#.4ux did %#.4ux %q %q %s", + ud->csp, h->nport, ud->vid, ud->did, ud->vendor, ud->product, h->dev->hname); for(i = 1; i <= h->nport; i++) if(portfeature(h, i, Fportpower, 1) < 0) fprint(2, "%s: %s: power: %r\n", argv0, fn); diff --git a/sys/src/cmd/nusb/usbd/usbd.c b/sys/src/cmd/nusb/usbd/usbd.c index 101fc9338..e475a9647 100644 --- a/sys/src/cmd/nusb/usbd/usbd.c +++ b/sys/src/cmd/nusb/usbd/usbd.c @@ -227,7 +227,8 @@ usbdwrite(Req *req) extern Hub *hubs; Hub *hub; Cmdbuf *cb; - int hubid, port, feature, on; + char hubid[16]; + int port, feature, on; if((long)req->fid->qid.path != Qusbhubctl){ respond(req, Enonexist); @@ -246,7 +247,6 @@ usbdwrite(Req *req) respond(req, "unnown feature"); goto out; } - hubid = atoi(cb->f[1]); port = atoi(cb->f[2]); if(strcmp(cb->f[3], "on") == 0) on = 1; @@ -256,9 +256,13 @@ usbdwrite(Req *req) on = atoi(cb->f[3]) != 0; qlock(&hublock); - for(hub = hubs; hub != nil; hub = hub->next) - if(hub->dev->id == hubid) + for(hub = hubs; hub != nil; hub = hub->next){ + if(hub->dev->hname != nil && strcmp(hub->dev->hname, cb->f[1]) == 0) break; + snprint(hubid, sizeof(hubid), "%d", hub->dev->id); + if(strcmp(hubid, cb->f[1]) == 0) + break; + } if(hub == nil){ qunlock(&hublock); respond(req, "unknown hub"); @@ -441,7 +445,7 @@ Srv usbdsrv = { .destroyfid = usbddestroyfid, }; -static void +void assignhname(Dev *dev) { extern Hub *hubs; @@ -462,6 +466,13 @@ assignhname(Dev *dev) /* check for collisions */ col = 0; for(h = hubs; h != nil; h = h->next){ + if(ud->class == Clhub){ + if(h->dev->hname == nil) + continue; + if(strncmp(h->dev->hname, buf, n) == 0) + col++; + continue; + } for(i = 1; i <= h->nport; i++){ if(h->port[i].dev == nil) continue; |