xref: /openbmc/linux/drivers/usb/core/sysfs.c (revision bc5aa3a0)
1 /*
2  * drivers/usb/core/sysfs.c
3  *
4  * (C) Copyright 2002 David Brownell
5  * (C) Copyright 2002,2004 Greg Kroah-Hartman
6  * (C) Copyright 2002,2004 IBM Corp.
7  *
8  * All of the sysfs file attributes for usb devices and interfaces.
9  *
10  */
11 
12 
13 #include <linux/kernel.h>
14 #include <linux/string.h>
15 #include <linux/usb.h>
16 #include <linux/usb/quirks.h>
17 #include "usb.h"
18 
19 /* Active configuration fields */
20 #define usb_actconfig_show(field, format_string)			\
21 static ssize_t field##_show(struct device *dev,				\
22 			    struct device_attribute *attr, char *buf)	\
23 {									\
24 	struct usb_device *udev;					\
25 	struct usb_host_config *actconfig;				\
26 	ssize_t rc;							\
27 									\
28 	udev = to_usb_device(dev);					\
29 	rc = usb_lock_device_interruptible(udev);			\
30 	if (rc < 0)							\
31 		return -EINTR;						\
32 	actconfig = udev->actconfig;					\
33 	if (actconfig)							\
34 		rc = sprintf(buf, format_string,			\
35 				actconfig->desc.field);			\
36 	usb_unlock_device(udev);					\
37 	return rc;							\
38 }									\
39 
40 #define usb_actconfig_attr(field, format_string)		\
41 	usb_actconfig_show(field, format_string)		\
42 	static DEVICE_ATTR_RO(field)
43 
44 usb_actconfig_attr(bNumInterfaces, "%2d\n");
45 usb_actconfig_attr(bmAttributes, "%2x\n");
46 
47 static ssize_t bMaxPower_show(struct device *dev,
48 		struct device_attribute *attr, char *buf)
49 {
50 	struct usb_device *udev;
51 	struct usb_host_config *actconfig;
52 	ssize_t rc;
53 
54 	udev = to_usb_device(dev);
55 	rc = usb_lock_device_interruptible(udev);
56 	if (rc < 0)
57 		return -EINTR;
58 	actconfig = udev->actconfig;
59 	if (actconfig)
60 		rc = sprintf(buf, "%dmA\n", usb_get_max_power(udev, actconfig));
61 	usb_unlock_device(udev);
62 	return rc;
63 }
64 static DEVICE_ATTR_RO(bMaxPower);
65 
66 static ssize_t configuration_show(struct device *dev,
67 		struct device_attribute *attr, char *buf)
68 {
69 	struct usb_device *udev;
70 	struct usb_host_config *actconfig;
71 	ssize_t rc;
72 
73 	udev = to_usb_device(dev);
74 	rc = usb_lock_device_interruptible(udev);
75 	if (rc < 0)
76 		return -EINTR;
77 	actconfig = udev->actconfig;
78 	if (actconfig && actconfig->string)
79 		rc = sprintf(buf, "%s\n", actconfig->string);
80 	usb_unlock_device(udev);
81 	return rc;
82 }
83 static DEVICE_ATTR_RO(configuration);
84 
85 /* configuration value is always present, and r/w */
86 usb_actconfig_show(bConfigurationValue, "%u\n");
87 
88 static ssize_t bConfigurationValue_store(struct device *dev,
89 					 struct device_attribute *attr,
90 					 const char *buf, size_t count)
91 {
92 	struct usb_device	*udev = to_usb_device(dev);
93 	int			config, value, rc;
94 
95 	if (sscanf(buf, "%d", &config) != 1 || config < -1 || config > 255)
96 		return -EINVAL;
97 	rc = usb_lock_device_interruptible(udev);
98 	if (rc < 0)
99 		return -EINTR;
100 	value = usb_set_configuration(udev, config);
101 	usb_unlock_device(udev);
102 	return (value < 0) ? value : count;
103 }
104 static DEVICE_ATTR_IGNORE_LOCKDEP(bConfigurationValue, S_IRUGO | S_IWUSR,
105 		bConfigurationValue_show, bConfigurationValue_store);
106 
107 /* String fields */
108 #define usb_string_attr(name)						\
109 static ssize_t  name##_show(struct device *dev,				\
110 		struct device_attribute *attr, char *buf)		\
111 {									\
112 	struct usb_device *udev;					\
113 	int retval;							\
114 									\
115 	udev = to_usb_device(dev);					\
116 	retval = usb_lock_device_interruptible(udev);			\
117 	if (retval < 0)							\
118 		return -EINTR;						\
119 	retval = sprintf(buf, "%s\n", udev->name);			\
120 	usb_unlock_device(udev);					\
121 	return retval;							\
122 }									\
123 static DEVICE_ATTR_RO(name)
124 
125 usb_string_attr(product);
126 usb_string_attr(manufacturer);
127 usb_string_attr(serial);
128 
129 static ssize_t speed_show(struct device *dev, struct device_attribute *attr,
130 			  char *buf)
131 {
132 	struct usb_device *udev;
133 	char *speed;
134 
135 	udev = to_usb_device(dev);
136 
137 	switch (udev->speed) {
138 	case USB_SPEED_LOW:
139 		speed = "1.5";
140 		break;
141 	case USB_SPEED_UNKNOWN:
142 	case USB_SPEED_FULL:
143 		speed = "12";
144 		break;
145 	case USB_SPEED_HIGH:
146 		speed = "480";
147 		break;
148 	case USB_SPEED_WIRELESS:
149 		speed = "480";
150 		break;
151 	case USB_SPEED_SUPER:
152 		speed = "5000";
153 		break;
154 	case USB_SPEED_SUPER_PLUS:
155 		speed = "10000";
156 		break;
157 	default:
158 		speed = "unknown";
159 	}
160 	return sprintf(buf, "%s\n", speed);
161 }
162 static DEVICE_ATTR_RO(speed);
163 
164 static ssize_t busnum_show(struct device *dev, struct device_attribute *attr,
165 			   char *buf)
166 {
167 	struct usb_device *udev;
168 
169 	udev = to_usb_device(dev);
170 	return sprintf(buf, "%d\n", udev->bus->busnum);
171 }
172 static DEVICE_ATTR_RO(busnum);
173 
174 static ssize_t devnum_show(struct device *dev, struct device_attribute *attr,
175 			   char *buf)
176 {
177 	struct usb_device *udev;
178 
179 	udev = to_usb_device(dev);
180 	return sprintf(buf, "%d\n", udev->devnum);
181 }
182 static DEVICE_ATTR_RO(devnum);
183 
184 static ssize_t devpath_show(struct device *dev, struct device_attribute *attr,
185 			    char *buf)
186 {
187 	struct usb_device *udev;
188 
189 	udev = to_usb_device(dev);
190 	return sprintf(buf, "%s\n", udev->devpath);
191 }
192 static DEVICE_ATTR_RO(devpath);
193 
194 static ssize_t version_show(struct device *dev, struct device_attribute *attr,
195 			    char *buf)
196 {
197 	struct usb_device *udev;
198 	u16 bcdUSB;
199 
200 	udev = to_usb_device(dev);
201 	bcdUSB = le16_to_cpu(udev->descriptor.bcdUSB);
202 	return sprintf(buf, "%2x.%02x\n", bcdUSB >> 8, bcdUSB & 0xff);
203 }
204 static DEVICE_ATTR_RO(version);
205 
206 static ssize_t maxchild_show(struct device *dev, struct device_attribute *attr,
207 			     char *buf)
208 {
209 	struct usb_device *udev;
210 
211 	udev = to_usb_device(dev);
212 	return sprintf(buf, "%d\n", udev->maxchild);
213 }
214 static DEVICE_ATTR_RO(maxchild);
215 
216 static ssize_t quirks_show(struct device *dev, struct device_attribute *attr,
217 			   char *buf)
218 {
219 	struct usb_device *udev;
220 
221 	udev = to_usb_device(dev);
222 	return sprintf(buf, "0x%x\n", udev->quirks);
223 }
224 static DEVICE_ATTR_RO(quirks);
225 
226 static ssize_t avoid_reset_quirk_show(struct device *dev,
227 				      struct device_attribute *attr, char *buf)
228 {
229 	struct usb_device *udev;
230 
231 	udev = to_usb_device(dev);
232 	return sprintf(buf, "%d\n", !!(udev->quirks & USB_QUIRK_RESET));
233 }
234 
235 static ssize_t avoid_reset_quirk_store(struct device *dev,
236 				      struct device_attribute *attr,
237 				      const char *buf, size_t count)
238 {
239 	struct usb_device	*udev = to_usb_device(dev);
240 	int			val, rc;
241 
242 	if (sscanf(buf, "%d", &val) != 1 || val < 0 || val > 1)
243 		return -EINVAL;
244 	rc = usb_lock_device_interruptible(udev);
245 	if (rc < 0)
246 		return -EINTR;
247 	if (val)
248 		udev->quirks |= USB_QUIRK_RESET;
249 	else
250 		udev->quirks &= ~USB_QUIRK_RESET;
251 	usb_unlock_device(udev);
252 	return count;
253 }
254 static DEVICE_ATTR_RW(avoid_reset_quirk);
255 
256 static ssize_t urbnum_show(struct device *dev, struct device_attribute *attr,
257 			   char *buf)
258 {
259 	struct usb_device *udev;
260 
261 	udev = to_usb_device(dev);
262 	return sprintf(buf, "%d\n", atomic_read(&udev->urbnum));
263 }
264 static DEVICE_ATTR_RO(urbnum);
265 
266 static ssize_t removable_show(struct device *dev, struct device_attribute *attr,
267 			      char *buf)
268 {
269 	struct usb_device *udev;
270 	char *state;
271 
272 	udev = to_usb_device(dev);
273 
274 	switch (udev->removable) {
275 	case USB_DEVICE_REMOVABLE:
276 		state = "removable";
277 		break;
278 	case USB_DEVICE_FIXED:
279 		state = "fixed";
280 		break;
281 	default:
282 		state = "unknown";
283 	}
284 
285 	return sprintf(buf, "%s\n", state);
286 }
287 static DEVICE_ATTR_RO(removable);
288 
289 static ssize_t ltm_capable_show(struct device *dev,
290 				struct device_attribute *attr, char *buf)
291 {
292 	if (usb_device_supports_ltm(to_usb_device(dev)))
293 		return sprintf(buf, "%s\n", "yes");
294 	return sprintf(buf, "%s\n", "no");
295 }
296 static DEVICE_ATTR_RO(ltm_capable);
297 
298 #ifdef	CONFIG_PM
299 
300 static ssize_t persist_show(struct device *dev, struct device_attribute *attr,
301 			    char *buf)
302 {
303 	struct usb_device *udev = to_usb_device(dev);
304 
305 	return sprintf(buf, "%d\n", udev->persist_enabled);
306 }
307 
308 static ssize_t persist_store(struct device *dev, struct device_attribute *attr,
309 			     const char *buf, size_t count)
310 {
311 	struct usb_device *udev = to_usb_device(dev);
312 	int value, rc;
313 
314 	/* Hubs are always enabled for USB_PERSIST */
315 	if (udev->descriptor.bDeviceClass == USB_CLASS_HUB)
316 		return -EPERM;
317 
318 	if (sscanf(buf, "%d", &value) != 1)
319 		return -EINVAL;
320 
321 	rc = usb_lock_device_interruptible(udev);
322 	if (rc < 0)
323 		return -EINTR;
324 	udev->persist_enabled = !!value;
325 	usb_unlock_device(udev);
326 	return count;
327 }
328 static DEVICE_ATTR_RW(persist);
329 
330 static int add_persist_attributes(struct device *dev)
331 {
332 	int rc = 0;
333 
334 	if (is_usb_device(dev)) {
335 		struct usb_device *udev = to_usb_device(dev);
336 
337 		/* Hubs are automatically enabled for USB_PERSIST,
338 		 * no point in creating the attribute file.
339 		 */
340 		if (udev->descriptor.bDeviceClass != USB_CLASS_HUB)
341 			rc = sysfs_add_file_to_group(&dev->kobj,
342 					&dev_attr_persist.attr,
343 					power_group_name);
344 	}
345 	return rc;
346 }
347 
348 static void remove_persist_attributes(struct device *dev)
349 {
350 	sysfs_remove_file_from_group(&dev->kobj,
351 			&dev_attr_persist.attr,
352 			power_group_name);
353 }
354 
355 static ssize_t connected_duration_show(struct device *dev,
356 				       struct device_attribute *attr, char *buf)
357 {
358 	struct usb_device *udev = to_usb_device(dev);
359 
360 	return sprintf(buf, "%u\n",
361 			jiffies_to_msecs(jiffies - udev->connect_time));
362 }
363 static DEVICE_ATTR_RO(connected_duration);
364 
365 /*
366  * If the device is resumed, the last time the device was suspended has
367  * been pre-subtracted from active_duration.  We add the current time to
368  * get the duration that the device was actually active.
369  *
370  * If the device is suspended, the active_duration is up-to-date.
371  */
372 static ssize_t active_duration_show(struct device *dev,
373 				    struct device_attribute *attr, char *buf)
374 {
375 	struct usb_device *udev = to_usb_device(dev);
376 	int duration;
377 
378 	if (udev->state != USB_STATE_SUSPENDED)
379 		duration = jiffies_to_msecs(jiffies + udev->active_duration);
380 	else
381 		duration = jiffies_to_msecs(udev->active_duration);
382 	return sprintf(buf, "%u\n", duration);
383 }
384 static DEVICE_ATTR_RO(active_duration);
385 
386 static ssize_t autosuspend_show(struct device *dev,
387 				struct device_attribute *attr, char *buf)
388 {
389 	return sprintf(buf, "%d\n", dev->power.autosuspend_delay / 1000);
390 }
391 
392 static ssize_t autosuspend_store(struct device *dev,
393 				 struct device_attribute *attr, const char *buf,
394 				 size_t count)
395 {
396 	int value;
397 
398 	if (sscanf(buf, "%d", &value) != 1 || value >= INT_MAX/1000 ||
399 			value <= -INT_MAX/1000)
400 		return -EINVAL;
401 
402 	pm_runtime_set_autosuspend_delay(dev, value * 1000);
403 	return count;
404 }
405 static DEVICE_ATTR_RW(autosuspend);
406 
407 static const char on_string[] = "on";
408 static const char auto_string[] = "auto";
409 
410 static void warn_level(void)
411 {
412 	static int level_warned;
413 
414 	if (!level_warned) {
415 		level_warned = 1;
416 		printk(KERN_WARNING "WARNING! power/level is deprecated; "
417 				"use power/control instead\n");
418 	}
419 }
420 
421 static ssize_t level_show(struct device *dev, struct device_attribute *attr,
422 			  char *buf)
423 {
424 	struct usb_device *udev = to_usb_device(dev);
425 	const char *p = auto_string;
426 
427 	warn_level();
428 	if (udev->state != USB_STATE_SUSPENDED && !udev->dev.power.runtime_auto)
429 		p = on_string;
430 	return sprintf(buf, "%s\n", p);
431 }
432 
433 static ssize_t level_store(struct device *dev, struct device_attribute *attr,
434 			   const char *buf, size_t count)
435 {
436 	struct usb_device *udev = to_usb_device(dev);
437 	int len = count;
438 	char *cp;
439 	int rc = count;
440 	int rv;
441 
442 	warn_level();
443 	cp = memchr(buf, '\n', count);
444 	if (cp)
445 		len = cp - buf;
446 
447 	rv = usb_lock_device_interruptible(udev);
448 	if (rv < 0)
449 		return -EINTR;
450 
451 	if (len == sizeof on_string - 1 &&
452 			strncmp(buf, on_string, len) == 0)
453 		usb_disable_autosuspend(udev);
454 
455 	else if (len == sizeof auto_string - 1 &&
456 			strncmp(buf, auto_string, len) == 0)
457 		usb_enable_autosuspend(udev);
458 
459 	else
460 		rc = -EINVAL;
461 
462 	usb_unlock_device(udev);
463 	return rc;
464 }
465 static DEVICE_ATTR_RW(level);
466 
467 static ssize_t usb2_hardware_lpm_show(struct device *dev,
468 				      struct device_attribute *attr, char *buf)
469 {
470 	struct usb_device *udev = to_usb_device(dev);
471 	const char *p;
472 
473 	if (udev->usb2_hw_lpm_allowed == 1)
474 		p = "enabled";
475 	else
476 		p = "disabled";
477 
478 	return sprintf(buf, "%s\n", p);
479 }
480 
481 static ssize_t usb2_hardware_lpm_store(struct device *dev,
482 				       struct device_attribute *attr,
483 				       const char *buf, size_t count)
484 {
485 	struct usb_device *udev = to_usb_device(dev);
486 	bool value;
487 	int ret;
488 
489 	ret = usb_lock_device_interruptible(udev);
490 	if (ret < 0)
491 		return -EINTR;
492 
493 	ret = strtobool(buf, &value);
494 
495 	if (!ret) {
496 		udev->usb2_hw_lpm_allowed = value;
497 		ret = usb_set_usb2_hardware_lpm(udev, value);
498 	}
499 
500 	usb_unlock_device(udev);
501 
502 	if (!ret)
503 		return count;
504 
505 	return ret;
506 }
507 static DEVICE_ATTR_RW(usb2_hardware_lpm);
508 
509 static ssize_t usb2_lpm_l1_timeout_show(struct device *dev,
510 					struct device_attribute *attr,
511 					char *buf)
512 {
513 	struct usb_device *udev = to_usb_device(dev);
514 	return sprintf(buf, "%d\n", udev->l1_params.timeout);
515 }
516 
517 static ssize_t usb2_lpm_l1_timeout_store(struct device *dev,
518 					 struct device_attribute *attr,
519 					 const char *buf, size_t count)
520 {
521 	struct usb_device *udev = to_usb_device(dev);
522 	u16 timeout;
523 
524 	if (kstrtou16(buf, 0, &timeout))
525 		return -EINVAL;
526 
527 	udev->l1_params.timeout = timeout;
528 
529 	return count;
530 }
531 static DEVICE_ATTR_RW(usb2_lpm_l1_timeout);
532 
533 static ssize_t usb2_lpm_besl_show(struct device *dev,
534 				  struct device_attribute *attr, char *buf)
535 {
536 	struct usb_device *udev = to_usb_device(dev);
537 	return sprintf(buf, "%d\n", udev->l1_params.besl);
538 }
539 
540 static ssize_t usb2_lpm_besl_store(struct device *dev,
541 				   struct device_attribute *attr,
542 				   const char *buf, size_t count)
543 {
544 	struct usb_device *udev = to_usb_device(dev);
545 	u8 besl;
546 
547 	if (kstrtou8(buf, 0, &besl) || besl > 15)
548 		return -EINVAL;
549 
550 	udev->l1_params.besl = besl;
551 
552 	return count;
553 }
554 static DEVICE_ATTR_RW(usb2_lpm_besl);
555 
556 static ssize_t usb3_hardware_lpm_u1_show(struct device *dev,
557 				      struct device_attribute *attr, char *buf)
558 {
559 	struct usb_device *udev = to_usb_device(dev);
560 	const char *p;
561 	int rc;
562 
563 	rc = usb_lock_device_interruptible(udev);
564 	if (rc < 0)
565 		return -EINTR;
566 
567 	if (udev->usb3_lpm_u1_enabled)
568 		p = "enabled";
569 	else
570 		p = "disabled";
571 
572 	usb_unlock_device(udev);
573 
574 	return sprintf(buf, "%s\n", p);
575 }
576 static DEVICE_ATTR_RO(usb3_hardware_lpm_u1);
577 
578 static ssize_t usb3_hardware_lpm_u2_show(struct device *dev,
579 				      struct device_attribute *attr, char *buf)
580 {
581 	struct usb_device *udev = to_usb_device(dev);
582 	const char *p;
583 	int rc;
584 
585 	rc = usb_lock_device_interruptible(udev);
586 	if (rc < 0)
587 		return -EINTR;
588 
589 	if (udev->usb3_lpm_u2_enabled)
590 		p = "enabled";
591 	else
592 		p = "disabled";
593 
594 	usb_unlock_device(udev);
595 
596 	return sprintf(buf, "%s\n", p);
597 }
598 static DEVICE_ATTR_RO(usb3_hardware_lpm_u2);
599 
600 static struct attribute *usb2_hardware_lpm_attr[] = {
601 	&dev_attr_usb2_hardware_lpm.attr,
602 	&dev_attr_usb2_lpm_l1_timeout.attr,
603 	&dev_attr_usb2_lpm_besl.attr,
604 	NULL,
605 };
606 static struct attribute_group usb2_hardware_lpm_attr_group = {
607 	.name	= power_group_name,
608 	.attrs	= usb2_hardware_lpm_attr,
609 };
610 
611 static struct attribute *usb3_hardware_lpm_attr[] = {
612 	&dev_attr_usb3_hardware_lpm_u1.attr,
613 	&dev_attr_usb3_hardware_lpm_u2.attr,
614 	NULL,
615 };
616 static struct attribute_group usb3_hardware_lpm_attr_group = {
617 	.name	= power_group_name,
618 	.attrs	= usb3_hardware_lpm_attr,
619 };
620 
621 static struct attribute *power_attrs[] = {
622 	&dev_attr_autosuspend.attr,
623 	&dev_attr_level.attr,
624 	&dev_attr_connected_duration.attr,
625 	&dev_attr_active_duration.attr,
626 	NULL,
627 };
628 static struct attribute_group power_attr_group = {
629 	.name	= power_group_name,
630 	.attrs	= power_attrs,
631 };
632 
633 static int add_power_attributes(struct device *dev)
634 {
635 	int rc = 0;
636 
637 	if (is_usb_device(dev)) {
638 		struct usb_device *udev = to_usb_device(dev);
639 		rc = sysfs_merge_group(&dev->kobj, &power_attr_group);
640 		if (udev->usb2_hw_lpm_capable == 1)
641 			rc = sysfs_merge_group(&dev->kobj,
642 					&usb2_hardware_lpm_attr_group);
643 		if (udev->speed == USB_SPEED_SUPER &&
644 				udev->lpm_capable == 1)
645 			rc = sysfs_merge_group(&dev->kobj,
646 					&usb3_hardware_lpm_attr_group);
647 	}
648 
649 	return rc;
650 }
651 
652 static void remove_power_attributes(struct device *dev)
653 {
654 	sysfs_unmerge_group(&dev->kobj, &usb2_hardware_lpm_attr_group);
655 	sysfs_unmerge_group(&dev->kobj, &power_attr_group);
656 }
657 
658 #else
659 
660 #define add_persist_attributes(dev)	0
661 #define remove_persist_attributes(dev)	do {} while (0)
662 
663 #define add_power_attributes(dev)	0
664 #define remove_power_attributes(dev)	do {} while (0)
665 
666 #endif	/* CONFIG_PM */
667 
668 
669 /* Descriptor fields */
670 #define usb_descriptor_attr_le16(field, format_string)			\
671 static ssize_t								\
672 field##_show(struct device *dev, struct device_attribute *attr,	\
673 		char *buf)						\
674 {									\
675 	struct usb_device *udev;					\
676 									\
677 	udev = to_usb_device(dev);					\
678 	return sprintf(buf, format_string, 				\
679 			le16_to_cpu(udev->descriptor.field));		\
680 }									\
681 static DEVICE_ATTR_RO(field)
682 
683 usb_descriptor_attr_le16(idVendor, "%04x\n");
684 usb_descriptor_attr_le16(idProduct, "%04x\n");
685 usb_descriptor_attr_le16(bcdDevice, "%04x\n");
686 
687 #define usb_descriptor_attr(field, format_string)			\
688 static ssize_t								\
689 field##_show(struct device *dev, struct device_attribute *attr,	\
690 		char *buf)						\
691 {									\
692 	struct usb_device *udev;					\
693 									\
694 	udev = to_usb_device(dev);					\
695 	return sprintf(buf, format_string, udev->descriptor.field);	\
696 }									\
697 static DEVICE_ATTR_RO(field)
698 
699 usb_descriptor_attr(bDeviceClass, "%02x\n");
700 usb_descriptor_attr(bDeviceSubClass, "%02x\n");
701 usb_descriptor_attr(bDeviceProtocol, "%02x\n");
702 usb_descriptor_attr(bNumConfigurations, "%d\n");
703 usb_descriptor_attr(bMaxPacketSize0, "%d\n");
704 
705 
706 /* show if the device is authorized (1) or not (0) */
707 static ssize_t authorized_show(struct device *dev,
708 			       struct device_attribute *attr, char *buf)
709 {
710 	struct usb_device *usb_dev = to_usb_device(dev);
711 	return snprintf(buf, PAGE_SIZE, "%u\n", usb_dev->authorized);
712 }
713 
714 /*
715  * Authorize a device to be used in the system
716  *
717  * Writing a 0 deauthorizes the device, writing a 1 authorizes it.
718  */
719 static ssize_t authorized_store(struct device *dev,
720 				struct device_attribute *attr, const char *buf,
721 				size_t size)
722 {
723 	ssize_t result;
724 	struct usb_device *usb_dev = to_usb_device(dev);
725 	unsigned val;
726 	result = sscanf(buf, "%u\n", &val);
727 	if (result != 1)
728 		result = -EINVAL;
729 	else if (val == 0)
730 		result = usb_deauthorize_device(usb_dev);
731 	else
732 		result = usb_authorize_device(usb_dev);
733 	return result < 0 ? result : size;
734 }
735 static DEVICE_ATTR_IGNORE_LOCKDEP(authorized, S_IRUGO | S_IWUSR,
736 				  authorized_show, authorized_store);
737 
738 /* "Safely remove a device" */
739 static ssize_t remove_store(struct device *dev, struct device_attribute *attr,
740 			    const char *buf, size_t count)
741 {
742 	struct usb_device *udev = to_usb_device(dev);
743 	int rc = 0;
744 
745 	usb_lock_device(udev);
746 	if (udev->state != USB_STATE_NOTATTACHED) {
747 
748 		/* To avoid races, first unconfigure and then remove */
749 		usb_set_configuration(udev, -1);
750 		rc = usb_remove_device(udev);
751 	}
752 	if (rc == 0)
753 		rc = count;
754 	usb_unlock_device(udev);
755 	return rc;
756 }
757 static DEVICE_ATTR_IGNORE_LOCKDEP(remove, S_IWUSR, NULL, remove_store);
758 
759 
760 static struct attribute *dev_attrs[] = {
761 	/* current configuration's attributes */
762 	&dev_attr_configuration.attr,
763 	&dev_attr_bNumInterfaces.attr,
764 	&dev_attr_bConfigurationValue.attr,
765 	&dev_attr_bmAttributes.attr,
766 	&dev_attr_bMaxPower.attr,
767 	/* device attributes */
768 	&dev_attr_urbnum.attr,
769 	&dev_attr_idVendor.attr,
770 	&dev_attr_idProduct.attr,
771 	&dev_attr_bcdDevice.attr,
772 	&dev_attr_bDeviceClass.attr,
773 	&dev_attr_bDeviceSubClass.attr,
774 	&dev_attr_bDeviceProtocol.attr,
775 	&dev_attr_bNumConfigurations.attr,
776 	&dev_attr_bMaxPacketSize0.attr,
777 	&dev_attr_speed.attr,
778 	&dev_attr_busnum.attr,
779 	&dev_attr_devnum.attr,
780 	&dev_attr_devpath.attr,
781 	&dev_attr_version.attr,
782 	&dev_attr_maxchild.attr,
783 	&dev_attr_quirks.attr,
784 	&dev_attr_avoid_reset_quirk.attr,
785 	&dev_attr_authorized.attr,
786 	&dev_attr_remove.attr,
787 	&dev_attr_removable.attr,
788 	&dev_attr_ltm_capable.attr,
789 	NULL,
790 };
791 static struct attribute_group dev_attr_grp = {
792 	.attrs = dev_attrs,
793 };
794 
795 /* When modifying this list, be sure to modify dev_string_attrs_are_visible()
796  * accordingly.
797  */
798 static struct attribute *dev_string_attrs[] = {
799 	&dev_attr_manufacturer.attr,
800 	&dev_attr_product.attr,
801 	&dev_attr_serial.attr,
802 	NULL
803 };
804 
805 static umode_t dev_string_attrs_are_visible(struct kobject *kobj,
806 		struct attribute *a, int n)
807 {
808 	struct device *dev = container_of(kobj, struct device, kobj);
809 	struct usb_device *udev = to_usb_device(dev);
810 
811 	if (a == &dev_attr_manufacturer.attr) {
812 		if (udev->manufacturer == NULL)
813 			return 0;
814 	} else if (a == &dev_attr_product.attr) {
815 		if (udev->product == NULL)
816 			return 0;
817 	} else if (a == &dev_attr_serial.attr) {
818 		if (udev->serial == NULL)
819 			return 0;
820 	}
821 	return a->mode;
822 }
823 
824 static struct attribute_group dev_string_attr_grp = {
825 	.attrs =	dev_string_attrs,
826 	.is_visible =	dev_string_attrs_are_visible,
827 };
828 
829 const struct attribute_group *usb_device_groups[] = {
830 	&dev_attr_grp,
831 	&dev_string_attr_grp,
832 	NULL
833 };
834 
835 /* Binary descriptors */
836 
837 static ssize_t
838 read_descriptors(struct file *filp, struct kobject *kobj,
839 		struct bin_attribute *attr,
840 		char *buf, loff_t off, size_t count)
841 {
842 	struct device *dev = container_of(kobj, struct device, kobj);
843 	struct usb_device *udev = to_usb_device(dev);
844 	size_t nleft = count;
845 	size_t srclen, n;
846 	int cfgno;
847 	void *src;
848 
849 	/* The binary attribute begins with the device descriptor.
850 	 * Following that are the raw descriptor entries for all the
851 	 * configurations (config plus subsidiary descriptors).
852 	 */
853 	for (cfgno = -1; cfgno < udev->descriptor.bNumConfigurations &&
854 			nleft > 0; ++cfgno) {
855 		if (cfgno < 0) {
856 			src = &udev->descriptor;
857 			srclen = sizeof(struct usb_device_descriptor);
858 		} else {
859 			src = udev->rawdescriptors[cfgno];
860 			srclen = __le16_to_cpu(udev->config[cfgno].desc.
861 					wTotalLength);
862 		}
863 		if (off < srclen) {
864 			n = min(nleft, srclen - (size_t) off);
865 			memcpy(buf, src + off, n);
866 			nleft -= n;
867 			buf += n;
868 			off = 0;
869 		} else {
870 			off -= srclen;
871 		}
872 	}
873 	return count - nleft;
874 }
875 
876 static struct bin_attribute dev_bin_attr_descriptors = {
877 	.attr = {.name = "descriptors", .mode = 0444},
878 	.read = read_descriptors,
879 	.size = 18 + 65535,	/* dev descr + max-size raw descriptor */
880 };
881 
882 int usb_create_sysfs_dev_files(struct usb_device *udev)
883 {
884 	struct device *dev = &udev->dev;
885 	int retval;
886 
887 	retval = device_create_bin_file(dev, &dev_bin_attr_descriptors);
888 	if (retval)
889 		goto error;
890 
891 	retval = add_persist_attributes(dev);
892 	if (retval)
893 		goto error;
894 
895 	retval = add_power_attributes(dev);
896 	if (retval)
897 		goto error;
898 	return retval;
899 error:
900 	usb_remove_sysfs_dev_files(udev);
901 	return retval;
902 }
903 
904 void usb_remove_sysfs_dev_files(struct usb_device *udev)
905 {
906 	struct device *dev = &udev->dev;
907 
908 	remove_power_attributes(dev);
909 	remove_persist_attributes(dev);
910 	device_remove_bin_file(dev, &dev_bin_attr_descriptors);
911 }
912 
913 /* Interface Association Descriptor fields */
914 #define usb_intf_assoc_attr(field, format_string)			\
915 static ssize_t								\
916 iad_##field##_show(struct device *dev, struct device_attribute *attr,	\
917 		char *buf)						\
918 {									\
919 	struct usb_interface *intf = to_usb_interface(dev);		\
920 									\
921 	return sprintf(buf, format_string,				\
922 			intf->intf_assoc->field); 			\
923 }									\
924 static DEVICE_ATTR_RO(iad_##field)
925 
926 usb_intf_assoc_attr(bFirstInterface, "%02x\n");
927 usb_intf_assoc_attr(bInterfaceCount, "%02d\n");
928 usb_intf_assoc_attr(bFunctionClass, "%02x\n");
929 usb_intf_assoc_attr(bFunctionSubClass, "%02x\n");
930 usb_intf_assoc_attr(bFunctionProtocol, "%02x\n");
931 
932 /* Interface fields */
933 #define usb_intf_attr(field, format_string)				\
934 static ssize_t								\
935 field##_show(struct device *dev, struct device_attribute *attr,		\
936 		char *buf)						\
937 {									\
938 	struct usb_interface *intf = to_usb_interface(dev);		\
939 									\
940 	return sprintf(buf, format_string,				\
941 			intf->cur_altsetting->desc.field); 		\
942 }									\
943 static DEVICE_ATTR_RO(field)
944 
945 usb_intf_attr(bInterfaceNumber, "%02x\n");
946 usb_intf_attr(bAlternateSetting, "%2d\n");
947 usb_intf_attr(bNumEndpoints, "%02x\n");
948 usb_intf_attr(bInterfaceClass, "%02x\n");
949 usb_intf_attr(bInterfaceSubClass, "%02x\n");
950 usb_intf_attr(bInterfaceProtocol, "%02x\n");
951 
952 static ssize_t interface_show(struct device *dev, struct device_attribute *attr,
953 			      char *buf)
954 {
955 	struct usb_interface *intf;
956 	char *string;
957 
958 	intf = to_usb_interface(dev);
959 	string = ACCESS_ONCE(intf->cur_altsetting->string);
960 	if (!string)
961 		return 0;
962 	return sprintf(buf, "%s\n", string);
963 }
964 static DEVICE_ATTR_RO(interface);
965 
966 static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
967 			     char *buf)
968 {
969 	struct usb_interface *intf;
970 	struct usb_device *udev;
971 	struct usb_host_interface *alt;
972 
973 	intf = to_usb_interface(dev);
974 	udev = interface_to_usbdev(intf);
975 	alt = ACCESS_ONCE(intf->cur_altsetting);
976 
977 	return sprintf(buf, "usb:v%04Xp%04Xd%04Xdc%02Xdsc%02Xdp%02X"
978 			"ic%02Xisc%02Xip%02Xin%02X\n",
979 			le16_to_cpu(udev->descriptor.idVendor),
980 			le16_to_cpu(udev->descriptor.idProduct),
981 			le16_to_cpu(udev->descriptor.bcdDevice),
982 			udev->descriptor.bDeviceClass,
983 			udev->descriptor.bDeviceSubClass,
984 			udev->descriptor.bDeviceProtocol,
985 			alt->desc.bInterfaceClass,
986 			alt->desc.bInterfaceSubClass,
987 			alt->desc.bInterfaceProtocol,
988 			alt->desc.bInterfaceNumber);
989 }
990 static DEVICE_ATTR_RO(modalias);
991 
992 static ssize_t supports_autosuspend_show(struct device *dev,
993 					 struct device_attribute *attr,
994 					 char *buf)
995 {
996 	int s;
997 
998 	s = device_lock_interruptible(dev);
999 	if (s < 0)
1000 		return -EINTR;
1001 	/* Devices will be autosuspended even when an interface isn't claimed */
1002 	s = (!dev->driver || to_usb_driver(dev->driver)->supports_autosuspend);
1003 	device_unlock(dev);
1004 
1005 	return sprintf(buf, "%u\n", s);
1006 }
1007 static DEVICE_ATTR_RO(supports_autosuspend);
1008 
1009 /*
1010  * interface_authorized_show - show authorization status of an USB interface
1011  * 1 is authorized, 0 is deauthorized
1012  */
1013 static ssize_t interface_authorized_show(struct device *dev,
1014 		struct device_attribute *attr, char *buf)
1015 {
1016 	struct usb_interface *intf = to_usb_interface(dev);
1017 
1018 	return sprintf(buf, "%u\n", intf->authorized);
1019 }
1020 
1021 /*
1022  * interface_authorized_store - authorize or deauthorize an USB interface
1023  */
1024 static ssize_t interface_authorized_store(struct device *dev,
1025 		struct device_attribute *attr, const char *buf, size_t count)
1026 {
1027 	struct usb_interface *intf = to_usb_interface(dev);
1028 	bool val;
1029 
1030 	if (strtobool(buf, &val) != 0)
1031 		return -EINVAL;
1032 
1033 	if (val)
1034 		usb_authorize_interface(intf);
1035 	else
1036 		usb_deauthorize_interface(intf);
1037 
1038 	return count;
1039 }
1040 static struct device_attribute dev_attr_interface_authorized =
1041 		__ATTR(authorized, S_IRUGO | S_IWUSR,
1042 		interface_authorized_show, interface_authorized_store);
1043 
1044 static struct attribute *intf_attrs[] = {
1045 	&dev_attr_bInterfaceNumber.attr,
1046 	&dev_attr_bAlternateSetting.attr,
1047 	&dev_attr_bNumEndpoints.attr,
1048 	&dev_attr_bInterfaceClass.attr,
1049 	&dev_attr_bInterfaceSubClass.attr,
1050 	&dev_attr_bInterfaceProtocol.attr,
1051 	&dev_attr_modalias.attr,
1052 	&dev_attr_supports_autosuspend.attr,
1053 	&dev_attr_interface_authorized.attr,
1054 	NULL,
1055 };
1056 static struct attribute_group intf_attr_grp = {
1057 	.attrs = intf_attrs,
1058 };
1059 
1060 static struct attribute *intf_assoc_attrs[] = {
1061 	&dev_attr_iad_bFirstInterface.attr,
1062 	&dev_attr_iad_bInterfaceCount.attr,
1063 	&dev_attr_iad_bFunctionClass.attr,
1064 	&dev_attr_iad_bFunctionSubClass.attr,
1065 	&dev_attr_iad_bFunctionProtocol.attr,
1066 	NULL,
1067 };
1068 
1069 static umode_t intf_assoc_attrs_are_visible(struct kobject *kobj,
1070 		struct attribute *a, int n)
1071 {
1072 	struct device *dev = container_of(kobj, struct device, kobj);
1073 	struct usb_interface *intf = to_usb_interface(dev);
1074 
1075 	if (intf->intf_assoc == NULL)
1076 		return 0;
1077 	return a->mode;
1078 }
1079 
1080 static struct attribute_group intf_assoc_attr_grp = {
1081 	.attrs =	intf_assoc_attrs,
1082 	.is_visible =	intf_assoc_attrs_are_visible,
1083 };
1084 
1085 const struct attribute_group *usb_interface_groups[] = {
1086 	&intf_attr_grp,
1087 	&intf_assoc_attr_grp,
1088 	NULL
1089 };
1090 
1091 void usb_create_sysfs_intf_files(struct usb_interface *intf)
1092 {
1093 	struct usb_device *udev = interface_to_usbdev(intf);
1094 	struct usb_host_interface *alt = intf->cur_altsetting;
1095 
1096 	if (intf->sysfs_files_created || intf->unregistering)
1097 		return;
1098 
1099 	if (!alt->string && !(udev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS))
1100 		alt->string = usb_cache_string(udev, alt->desc.iInterface);
1101 	if (alt->string && device_create_file(&intf->dev, &dev_attr_interface))
1102 		;	/* We don't actually care if the function fails. */
1103 	intf->sysfs_files_created = 1;
1104 }
1105 
1106 void usb_remove_sysfs_intf_files(struct usb_interface *intf)
1107 {
1108 	if (!intf->sysfs_files_created)
1109 		return;
1110 
1111 	device_remove_file(&intf->dev, &dev_attr_interface);
1112 	intf->sysfs_files_created = 0;
1113 }
1114