1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * devices.c 4 * (C) Copyright 1999 Randy Dunlap. 5 * (C) Copyright 1999,2000 Thomas Sailer <sailer@ife.ee.ethz.ch>. 6 * (proc file per device) 7 * (C) Copyright 1999 Deti Fliegl (new USB architecture) 8 * 9 ************************************************************* 10 * 11 * <mountpoint>/devices contains USB topology, device, config, class, 12 * interface, & endpoint data. 13 * 14 * I considered using /dev/bus/usb/device# for each device 15 * as it is attached or detached, but I didn't like this for some 16 * reason -- maybe it's just too deep of a directory structure. 17 * I also don't like looking in multiple places to gather and view 18 * the data. Having only one file for ./devices also prevents race 19 * conditions that could arise if a program was reading device info 20 * for devices that are being removed (unplugged). (That is, the 21 * program may find a directory for devnum_12 then try to open it, 22 * but it was just unplugged, so the directory is now deleted. 23 * But programs would just have to be prepared for situations like 24 * this in any plug-and-play environment.) 25 * 26 * 1999-12-16: Thomas Sailer <sailer@ife.ee.ethz.ch> 27 * Converted the whole proc stuff to real 28 * read methods. Now not the whole device list needs to fit 29 * into one page, only the device list for one bus. 30 * Added a poll method to /sys/kernel/debug/usb/devices, to wake 31 * up an eventual usbd 32 * 2000-01-04: Thomas Sailer <sailer@ife.ee.ethz.ch> 33 * Turned into its own filesystem 34 * 2000-07-05: Ashley Montanaro <ashley@compsoc.man.ac.uk> 35 * Converted file reading routine to dump to buffer once 36 * per device, not per bus 37 */ 38 39 #include <linux/fs.h> 40 #include <linux/mm.h> 41 #include <linux/gfp.h> 42 #include <linux/poll.h> 43 #include <linux/usb.h> 44 #include <linux/usbdevice_fs.h> 45 #include <linux/usb/hcd.h> 46 #include <linux/mutex.h> 47 #include <linux/uaccess.h> 48 49 #include "usb.h" 50 51 /* Define ALLOW_SERIAL_NUMBER if you want to see the serial number of devices */ 52 #define ALLOW_SERIAL_NUMBER 53 54 static const char format_topo[] = 55 /* T: Bus=dd Lev=dd Prnt=dd Port=dd Cnt=dd Dev#=ddd Spd=dddd MxCh=dd */ 56 "\nT: Bus=%2.2d Lev=%2.2d Prnt=%2.2d Port=%2.2d Cnt=%2.2d Dev#=%3d Spd=%-4s MxCh=%2d\n"; 57 58 static const char format_string_manufacturer[] = 59 /* S: Manufacturer=xxxx */ 60 "S: Manufacturer=%.100s\n"; 61 62 static const char format_string_product[] = 63 /* S: Product=xxxx */ 64 "S: Product=%.100s\n"; 65 66 #ifdef ALLOW_SERIAL_NUMBER 67 static const char format_string_serialnumber[] = 68 /* S: SerialNumber=xxxx */ 69 "S: SerialNumber=%.100s\n"; 70 #endif 71 72 static const char format_bandwidth[] = 73 /* B: Alloc=ddd/ddd us (xx%), #Int=ddd, #Iso=ddd */ 74 "B: Alloc=%3d/%3d us (%2d%%), #Int=%3d, #Iso=%3d\n"; 75 76 static const char format_device1[] = 77 /* D: Ver=xx.xx Cls=xx(sssss) Sub=xx Prot=xx MxPS=dd #Cfgs=dd */ 78 "D: Ver=%2x.%02x Cls=%02x(%-5s) Sub=%02x Prot=%02x MxPS=%2d #Cfgs=%3d\n"; 79 80 static const char format_device2[] = 81 /* P: Vendor=xxxx ProdID=xxxx Rev=xx.xx */ 82 "P: Vendor=%04x ProdID=%04x Rev=%2x.%02x\n"; 83 84 static const char format_config[] = 85 /* C: #Ifs=dd Cfg#=dd Atr=xx MPwr=dddmA */ 86 "C:%c #Ifs=%2d Cfg#=%2d Atr=%02x MxPwr=%3dmA\n"; 87 88 static const char format_iad[] = 89 /* A: FirstIf#=dd IfCount=dd Cls=xx(sssss) Sub=xx Prot=xx */ 90 "A: FirstIf#=%2d IfCount=%2d Cls=%02x(%-5s) Sub=%02x Prot=%02x\n"; 91 92 static const char format_iface[] = 93 /* I: If#=dd Alt=dd #EPs=dd Cls=xx(sssss) Sub=xx Prot=xx Driver=xxxx*/ 94 "I:%c If#=%2d Alt=%2d #EPs=%2d Cls=%02x(%-5s) Sub=%02x Prot=%02x Driver=%s\n"; 95 96 static const char format_endpt[] = 97 /* E: Ad=xx(s) Atr=xx(ssss) MxPS=dddd Ivl=D?s */ 98 "E: Ad=%02x(%c) Atr=%02x(%-4s) MxPS=%4d Ivl=%d%cs\n"; 99 100 /* 101 * Wait for an connect/disconnect event to happen. We initialize 102 * the event counter with an odd number, and each event will increment 103 * the event counter by two, so it will always _stay_ odd. That means 104 * that it will never be zero, so "event 0" will never match a current 105 * event, and thus 'poll' will always trigger as readable for the first 106 * time it gets called. 107 */ 108 static struct device_connect_event { 109 atomic_t count; 110 wait_queue_head_t wait; 111 } device_event = { 112 .count = ATOMIC_INIT(1), 113 .wait = __WAIT_QUEUE_HEAD_INITIALIZER(device_event.wait) 114 }; 115 116 struct class_info { 117 int class; 118 char *class_name; 119 }; 120 121 static const struct class_info clas_info[] = { 122 /* max. 5 chars. per name string */ 123 {USB_CLASS_PER_INTERFACE, ">ifc"}, 124 {USB_CLASS_AUDIO, "audio"}, 125 {USB_CLASS_COMM, "comm."}, 126 {USB_CLASS_HID, "HID"}, 127 {USB_CLASS_PHYSICAL, "PID"}, 128 {USB_CLASS_STILL_IMAGE, "still"}, 129 {USB_CLASS_PRINTER, "print"}, 130 {USB_CLASS_MASS_STORAGE, "stor."}, 131 {USB_CLASS_HUB, "hub"}, 132 {USB_CLASS_CDC_DATA, "data"}, 133 {USB_CLASS_CSCID, "scard"}, 134 {USB_CLASS_CONTENT_SEC, "c-sec"}, 135 {USB_CLASS_VIDEO, "video"}, 136 {USB_CLASS_WIRELESS_CONTROLLER, "wlcon"}, 137 {USB_CLASS_MISC, "misc"}, 138 {USB_CLASS_APP_SPEC, "app."}, 139 {USB_CLASS_VENDOR_SPEC, "vend."}, 140 {-1, "unk."} /* leave as last */ 141 }; 142 143 /*****************************************************************/ 144 145 void usbfs_conn_disc_event(void) 146 { 147 atomic_add(2, &device_event.count); 148 wake_up(&device_event.wait); 149 } 150 151 static const char *class_decode(const int class) 152 { 153 int ix; 154 155 for (ix = 0; clas_info[ix].class != -1; ix++) 156 if (clas_info[ix].class == class) 157 break; 158 return clas_info[ix].class_name; 159 } 160 161 static char *usb_dump_endpoint_descriptor(int speed, char *start, char *end, 162 const struct usb_endpoint_descriptor *desc) 163 { 164 char dir, unit, *type; 165 unsigned interval, bandwidth = 1; 166 167 if (start > end) 168 return start; 169 170 dir = usb_endpoint_dir_in(desc) ? 'I' : 'O'; 171 172 if (speed == USB_SPEED_HIGH) 173 bandwidth = usb_endpoint_maxp_mult(desc); 174 175 /* this isn't checking for illegal values */ 176 switch (usb_endpoint_type(desc)) { 177 case USB_ENDPOINT_XFER_CONTROL: 178 type = "Ctrl"; 179 if (speed == USB_SPEED_HIGH) /* uframes per NAK */ 180 interval = desc->bInterval; 181 else 182 interval = 0; 183 dir = 'B'; /* ctrl is bidirectional */ 184 break; 185 case USB_ENDPOINT_XFER_ISOC: 186 type = "Isoc"; 187 interval = 1 << (desc->bInterval - 1); 188 break; 189 case USB_ENDPOINT_XFER_BULK: 190 type = "Bulk"; 191 if (speed == USB_SPEED_HIGH && dir == 'O') /* uframes per NAK */ 192 interval = desc->bInterval; 193 else 194 interval = 0; 195 break; 196 case USB_ENDPOINT_XFER_INT: 197 type = "Int."; 198 if (speed == USB_SPEED_HIGH || speed >= USB_SPEED_SUPER) 199 interval = 1 << (desc->bInterval - 1); 200 else 201 interval = desc->bInterval; 202 break; 203 default: /* "can't happen" */ 204 return start; 205 } 206 interval *= (speed == USB_SPEED_HIGH || 207 speed >= USB_SPEED_SUPER) ? 125 : 1000; 208 if (interval % 1000) 209 unit = 'u'; 210 else { 211 unit = 'm'; 212 interval /= 1000; 213 } 214 215 start += sprintf(start, format_endpt, desc->bEndpointAddress, dir, 216 desc->bmAttributes, type, 217 usb_endpoint_maxp(desc) * 218 bandwidth, 219 interval, unit); 220 return start; 221 } 222 223 static char *usb_dump_interface_descriptor(char *start, char *end, 224 const struct usb_interface_cache *intfc, 225 const struct usb_interface *iface, 226 int setno) 227 { 228 const struct usb_interface_descriptor *desc; 229 const char *driver_name = ""; 230 int active = 0; 231 232 if (start > end) 233 return start; 234 desc = &intfc->altsetting[setno].desc; 235 if (iface) { 236 driver_name = (iface->dev.driver 237 ? iface->dev.driver->name 238 : "(none)"); 239 active = (desc == &iface->cur_altsetting->desc); 240 } 241 start += sprintf(start, format_iface, 242 active ? '*' : ' ', /* mark active altsetting */ 243 desc->bInterfaceNumber, 244 desc->bAlternateSetting, 245 desc->bNumEndpoints, 246 desc->bInterfaceClass, 247 class_decode(desc->bInterfaceClass), 248 desc->bInterfaceSubClass, 249 desc->bInterfaceProtocol, 250 driver_name); 251 return start; 252 } 253 254 static char *usb_dump_interface(int speed, char *start, char *end, 255 const struct usb_interface_cache *intfc, 256 const struct usb_interface *iface, int setno) 257 { 258 const struct usb_host_interface *desc = &intfc->altsetting[setno]; 259 int i; 260 261 start = usb_dump_interface_descriptor(start, end, intfc, iface, setno); 262 for (i = 0; i < desc->desc.bNumEndpoints; i++) { 263 if (start > end) 264 return start; 265 start = usb_dump_endpoint_descriptor(speed, 266 start, end, &desc->endpoint[i].desc); 267 } 268 return start; 269 } 270 271 static char *usb_dump_iad_descriptor(char *start, char *end, 272 const struct usb_interface_assoc_descriptor *iad) 273 { 274 if (start > end) 275 return start; 276 start += sprintf(start, format_iad, 277 iad->bFirstInterface, 278 iad->bInterfaceCount, 279 iad->bFunctionClass, 280 class_decode(iad->bFunctionClass), 281 iad->bFunctionSubClass, 282 iad->bFunctionProtocol); 283 return start; 284 } 285 286 /* TBD: 287 * 0. TBDs 288 * 1. marking active interface altsettings (code lists all, but should mark 289 * which ones are active, if any) 290 */ 291 static char *usb_dump_config_descriptor(char *start, char *end, 292 const struct usb_config_descriptor *desc, 293 int active, int speed) 294 { 295 int mul; 296 297 if (start > end) 298 return start; 299 if (speed >= USB_SPEED_SUPER) 300 mul = 8; 301 else 302 mul = 2; 303 start += sprintf(start, format_config, 304 /* mark active/actual/current cfg. */ 305 active ? '*' : ' ', 306 desc->bNumInterfaces, 307 desc->bConfigurationValue, 308 desc->bmAttributes, 309 desc->bMaxPower * mul); 310 return start; 311 } 312 313 static char *usb_dump_config(int speed, char *start, char *end, 314 const struct usb_host_config *config, int active) 315 { 316 int i, j; 317 struct usb_interface_cache *intfc; 318 struct usb_interface *interface; 319 320 if (start > end) 321 return start; 322 if (!config) 323 /* getting these some in 2.3.7; none in 2.3.6 */ 324 return start + sprintf(start, "(null Cfg. desc.)\n"); 325 start = usb_dump_config_descriptor(start, end, &config->desc, active, 326 speed); 327 for (i = 0; i < USB_MAXIADS; i++) { 328 if (config->intf_assoc[i] == NULL) 329 break; 330 start = usb_dump_iad_descriptor(start, end, 331 config->intf_assoc[i]); 332 } 333 for (i = 0; i < config->desc.bNumInterfaces; i++) { 334 intfc = config->intf_cache[i]; 335 interface = config->interface[i]; 336 for (j = 0; j < intfc->num_altsetting; j++) { 337 if (start > end) 338 return start; 339 start = usb_dump_interface(speed, 340 start, end, intfc, interface, j); 341 } 342 } 343 return start; 344 } 345 346 /* 347 * Dump the different USB descriptors. 348 */ 349 static char *usb_dump_device_descriptor(char *start, char *end, 350 const struct usb_device_descriptor *desc) 351 { 352 u16 bcdUSB = le16_to_cpu(desc->bcdUSB); 353 u16 bcdDevice = le16_to_cpu(desc->bcdDevice); 354 355 if (start > end) 356 return start; 357 start += sprintf(start, format_device1, 358 bcdUSB >> 8, bcdUSB & 0xff, 359 desc->bDeviceClass, 360 class_decode(desc->bDeviceClass), 361 desc->bDeviceSubClass, 362 desc->bDeviceProtocol, 363 desc->bMaxPacketSize0, 364 desc->bNumConfigurations); 365 if (start > end) 366 return start; 367 start += sprintf(start, format_device2, 368 le16_to_cpu(desc->idVendor), 369 le16_to_cpu(desc->idProduct), 370 bcdDevice >> 8, bcdDevice & 0xff); 371 return start; 372 } 373 374 /* 375 * Dump the different strings that this device holds. 376 */ 377 static char *usb_dump_device_strings(char *start, char *end, 378 struct usb_device *dev) 379 { 380 if (start > end) 381 return start; 382 if (dev->manufacturer) 383 start += sprintf(start, format_string_manufacturer, 384 dev->manufacturer); 385 if (start > end) 386 goto out; 387 if (dev->product) 388 start += sprintf(start, format_string_product, dev->product); 389 if (start > end) 390 goto out; 391 #ifdef ALLOW_SERIAL_NUMBER 392 if (dev->serial) 393 start += sprintf(start, format_string_serialnumber, 394 dev->serial); 395 #endif 396 out: 397 return start; 398 } 399 400 static char *usb_dump_desc(char *start, char *end, struct usb_device *dev) 401 { 402 int i; 403 404 if (start > end) 405 return start; 406 407 start = usb_dump_device_descriptor(start, end, &dev->descriptor); 408 409 if (start > end) 410 return start; 411 412 start = usb_dump_device_strings(start, end, dev); 413 414 for (i = 0; i < dev->descriptor.bNumConfigurations; i++) { 415 if (start > end) 416 return start; 417 start = usb_dump_config(dev->speed, 418 start, end, dev->config + i, 419 /* active ? */ 420 (dev->config + i) == dev->actconfig); 421 } 422 return start; 423 } 424 425 426 #ifdef PROC_EXTRA /* TBD: may want to add this code later */ 427 428 static char *usb_dump_hub_descriptor(char *start, char *end, 429 const struct usb_hub_descriptor *desc) 430 { 431 int leng = USB_DT_HUB_NONVAR_SIZE; 432 unsigned char *ptr = (unsigned char *)desc; 433 434 if (start > end) 435 return start; 436 start += sprintf(start, "Interface:"); 437 while (leng && start <= end) { 438 start += sprintf(start, " %02x", *ptr); 439 ptr++; leng--; 440 } 441 *start++ = '\n'; 442 return start; 443 } 444 445 static char *usb_dump_string(char *start, char *end, 446 const struct usb_device *dev, char *id, int index) 447 { 448 if (start > end) 449 return start; 450 start += sprintf(start, "Interface:"); 451 if (index <= dev->maxstring && dev->stringindex && 452 dev->stringindex[index]) 453 start += sprintf(start, "%s: %.100s ", id, 454 dev->stringindex[index]); 455 return start; 456 } 457 458 #endif /* PROC_EXTRA */ 459 460 /*****************************************************************/ 461 462 /* This is a recursive function. Parameters: 463 * buffer - the user-space buffer to write data into 464 * nbytes - the maximum number of bytes to write 465 * skip_bytes - the number of bytes to skip before writing anything 466 * file_offset - the offset into the devices file on completion 467 * The caller must own the device lock. 468 */ 469 static ssize_t usb_device_dump(char __user **buffer, size_t *nbytes, 470 loff_t *skip_bytes, loff_t *file_offset, 471 struct usb_device *usbdev, struct usb_bus *bus, 472 int level, int index, int count) 473 { 474 int chix; 475 int ret, cnt = 0; 476 int parent_devnum = 0; 477 char *pages_start, *data_end, *speed; 478 unsigned int length; 479 ssize_t total_written = 0; 480 struct usb_device *childdev = NULL; 481 482 /* don't bother with anything else if we're not writing any data */ 483 if (*nbytes <= 0) 484 return 0; 485 486 if (level > MAX_TOPO_LEVEL) 487 return 0; 488 /* allocate 2^1 pages = 8K (on i386); 489 * should be more than enough for one device */ 490 pages_start = (char *)__get_free_pages(GFP_NOIO, 1); 491 if (!pages_start) 492 return -ENOMEM; 493 494 if (usbdev->parent && usbdev->parent->devnum != -1) 495 parent_devnum = usbdev->parent->devnum; 496 /* 497 * So the root hub's parent is 0 and any device that is 498 * plugged into the root hub has a parent of 0. 499 */ 500 switch (usbdev->speed) { 501 case USB_SPEED_LOW: 502 speed = "1.5"; break; 503 case USB_SPEED_UNKNOWN: /* usb 1.1 root hub code */ 504 case USB_SPEED_FULL: 505 speed = "12"; break; 506 case USB_SPEED_WIRELESS: /* Wireless has no real fixed speed */ 507 case USB_SPEED_HIGH: 508 speed = "480"; break; 509 case USB_SPEED_SUPER: 510 speed = "5000"; break; 511 case USB_SPEED_SUPER_PLUS: 512 speed = "10000"; break; 513 default: 514 speed = "??"; 515 } 516 data_end = pages_start + sprintf(pages_start, format_topo, 517 bus->busnum, level, parent_devnum, 518 index, count, usbdev->devnum, 519 speed, usbdev->maxchild); 520 /* 521 * level = topology-tier level; 522 * parent_devnum = parent device number; 523 * index = parent's connector number; 524 * count = device count at this level 525 */ 526 /* If this is the root hub, display the bandwidth information */ 527 if (level == 0) { 528 int max; 529 530 /* super/high speed reserves 80%, full/low reserves 90% */ 531 if (usbdev->speed == USB_SPEED_HIGH || 532 usbdev->speed >= USB_SPEED_SUPER) 533 max = 800; 534 else 535 max = FRAME_TIME_MAX_USECS_ALLOC; 536 537 /* report "average" periodic allocation over a microsecond. 538 * the schedules are actually bursty, HCDs need to deal with 539 * that and just compute/report this average. 540 */ 541 data_end += sprintf(data_end, format_bandwidth, 542 bus->bandwidth_allocated, max, 543 (100 * bus->bandwidth_allocated + max / 2) 544 / max, 545 bus->bandwidth_int_reqs, 546 bus->bandwidth_isoc_reqs); 547 548 } 549 data_end = usb_dump_desc(data_end, pages_start + (2 * PAGE_SIZE) - 256, 550 usbdev); 551 552 if (data_end > (pages_start + (2 * PAGE_SIZE) - 256)) 553 data_end += sprintf(data_end, "(truncated)\n"); 554 555 length = data_end - pages_start; 556 /* if we can start copying some data to the user */ 557 if (length > *skip_bytes) { 558 length -= *skip_bytes; 559 if (length > *nbytes) 560 length = *nbytes; 561 if (copy_to_user(*buffer, pages_start + *skip_bytes, length)) { 562 free_pages((unsigned long)pages_start, 1); 563 return -EFAULT; 564 } 565 *nbytes -= length; 566 *file_offset += length; 567 total_written += length; 568 *buffer += length; 569 *skip_bytes = 0; 570 } else 571 *skip_bytes -= length; 572 573 free_pages((unsigned long)pages_start, 1); 574 575 /* Now look at all of this device's children. */ 576 usb_hub_for_each_child(usbdev, chix, childdev) { 577 usb_lock_device(childdev); 578 ret = usb_device_dump(buffer, nbytes, skip_bytes, 579 file_offset, childdev, bus, 580 level + 1, chix - 1, ++cnt); 581 usb_unlock_device(childdev); 582 if (ret == -EFAULT) 583 return total_written; 584 total_written += ret; 585 } 586 return total_written; 587 } 588 589 static ssize_t usb_device_read(struct file *file, char __user *buf, 590 size_t nbytes, loff_t *ppos) 591 { 592 struct usb_bus *bus; 593 ssize_t ret, total_written = 0; 594 loff_t skip_bytes = *ppos; 595 int id; 596 597 if (*ppos < 0) 598 return -EINVAL; 599 if (nbytes <= 0) 600 return 0; 601 if (!access_ok(buf, nbytes)) 602 return -EFAULT; 603 604 mutex_lock(&usb_bus_idr_lock); 605 /* print devices for all busses */ 606 idr_for_each_entry(&usb_bus_idr, bus, id) { 607 /* recurse through all children of the root hub */ 608 if (!bus_to_hcd(bus)->rh_registered) 609 continue; 610 usb_lock_device(bus->root_hub); 611 ret = usb_device_dump(&buf, &nbytes, &skip_bytes, ppos, 612 bus->root_hub, bus, 0, 0, 0); 613 usb_unlock_device(bus->root_hub); 614 if (ret < 0) { 615 mutex_unlock(&usb_bus_idr_lock); 616 return ret; 617 } 618 total_written += ret; 619 } 620 mutex_unlock(&usb_bus_idr_lock); 621 return total_written; 622 } 623 624 /* Kernel lock for "lastev" protection */ 625 static __poll_t usb_device_poll(struct file *file, 626 struct poll_table_struct *wait) 627 { 628 unsigned int event_count; 629 630 poll_wait(file, &device_event.wait, wait); 631 632 event_count = atomic_read(&device_event.count); 633 if (file->f_version != event_count) { 634 file->f_version = event_count; 635 return EPOLLIN | EPOLLRDNORM; 636 } 637 638 return 0; 639 } 640 641 const struct file_operations usbfs_devices_fops = { 642 .llseek = no_seek_end_llseek, 643 .read = usb_device_read, 644 .poll = usb_device_poll, 645 }; 646