diff options
Diffstat (limited to 'include/linux/usb.h')
| -rw-r--r-- | include/linux/usb.h | 35 | 
1 files changed, 24 insertions, 11 deletions
| diff --git a/include/linux/usb.h b/include/linux/usb.h index d81b050e5955..827cc6de5f5c 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
| @@ -225,7 +225,7 @@ struct usb_interface_cache { | |||
| 225 | * Device drivers should not attempt to activate configurations. The choice | 225 | * Device drivers should not attempt to activate configurations. The choice | 
| 226 | * of which configuration to install is a policy decision based on such | 226 | * of which configuration to install is a policy decision based on such | 
| 227 | * considerations as available power, functionality provided, and the user's | 227 | * considerations as available power, functionality provided, and the user's | 
| 228 | * desires (expressed through hotplug scripts). However, drivers can call | 228 | * desires (expressed through userspace tools). However, drivers can call | 
| 229 | * usb_reset_configuration() to reinitialize the current configuration and | 229 | * usb_reset_configuration() to reinitialize the current configuration and | 
| 230 | * all its interfaces. | 230 | * all its interfaces. | 
| 231 | */ | 231 | */ | 
| @@ -329,8 +329,6 @@ struct usb_device { | |||
| 329 | struct usb_tt *tt; /* low/full speed dev, highspeed hub */ | 329 | struct usb_tt *tt; /* low/full speed dev, highspeed hub */ | 
| 330 | int ttport; /* device port on that tt hub */ | 330 | int ttport; /* device port on that tt hub */ | 
| 331 | 331 | ||
| 332 | struct semaphore serialize; | ||
| 333 | |||
| 334 | unsigned int toggle[2]; /* one bit for each endpoint | 332 | unsigned int toggle[2]; /* one bit for each endpoint | 
| 335 | * ([0] = IN, [1] = OUT) */ | 333 | * ([0] = IN, [1] = OUT) */ | 
| 336 | 334 | ||
| @@ -349,6 +347,9 @@ struct usb_device { | |||
| 349 | 347 | ||
| 350 | char **rawdescriptors; /* Raw descriptors for each config */ | 348 | char **rawdescriptors; /* Raw descriptors for each config */ | 
| 351 | 349 | ||
| 350 | unsigned short bus_mA; /* Current available from the bus */ | ||
| 351 | u8 portnum; /* Parent port number (origin 1) */ | ||
| 352 | |||
| 352 | int have_langid; /* whether string_langid is valid */ | 353 | int have_langid; /* whether string_langid is valid */ | 
| 353 | int string_langid; /* language ID for strings */ | 354 | int string_langid; /* language ID for strings */ | 
| 354 | 355 | ||
| @@ -377,11 +378,12 @@ struct usb_device { | |||
| 377 | extern struct usb_device *usb_get_dev(struct usb_device *dev); | 378 | extern struct usb_device *usb_get_dev(struct usb_device *dev); | 
| 378 | extern void usb_put_dev(struct usb_device *dev); | 379 | extern void usb_put_dev(struct usb_device *dev); | 
| 379 | 380 | ||
| 380 | extern void usb_lock_device(struct usb_device *udev); | 381 | /* USB device locking */ | 
| 381 | extern int usb_trylock_device(struct usb_device *udev); | 382 | #define usb_lock_device(udev) down(&(udev)->dev.sem) | 
| 383 | #define usb_unlock_device(udev) up(&(udev)->dev.sem) | ||
| 384 | #define usb_trylock_device(udev) down_trylock(&(udev)->dev.sem) | ||
| 382 | extern int usb_lock_device_for_reset(struct usb_device *udev, | 385 | extern int usb_lock_device_for_reset(struct usb_device *udev, | 
| 383 | struct usb_interface *iface); | 386 | struct usb_interface *iface); | 
| 384 | extern void usb_unlock_device(struct usb_device *udev); | ||
| 385 | 387 | ||
| 386 | /* USB port reset for device reinitialization */ | 388 | /* USB port reset for device reinitialization */ | 
| 387 | extern int usb_reset_device(struct usb_device *dev); | 389 | extern int usb_reset_device(struct usb_device *dev); | 
| @@ -529,10 +531,13 @@ static inline int usb_make_path (struct usb_device *dev, char *buf, | |||
| 529 | 531 | ||
| 530 | /* ----------------------------------------------------------------------- */ | 532 | /* ----------------------------------------------------------------------- */ | 
| 531 | 533 | ||
| 534 | struct usb_dynids { | ||
| 535 | spinlock_t lock; | ||
| 536 | struct list_head list; | ||
| 537 | }; | ||
| 538 | |||
| 532 | /** | 539 | /** | 
| 533 | * struct usb_driver - identifies USB driver to usbcore | 540 | * struct usb_driver - identifies USB driver to usbcore | 
| 534 | * @owner: Pointer to the module owner of this driver; initialize | ||
| 535 | * it using THIS_MODULE. | ||
| 536 | * @name: The driver name should be unique among USB drivers, | 541 | * @name: The driver name should be unique among USB drivers, | 
| 537 | * and should normally be the same as the module name. | 542 | * and should normally be the same as the module name. | 
| 538 | * @probe: Called to see if the driver is willing to manage a particular | 543 | * @probe: Called to see if the driver is willing to manage a particular | 
| @@ -553,7 +558,11 @@ static inline int usb_make_path (struct usb_device *dev, char *buf, | |||
| 553 | * @id_table: USB drivers use ID table to support hotplugging. | 558 | * @id_table: USB drivers use ID table to support hotplugging. | 
| 554 | * Export this with MODULE_DEVICE_TABLE(usb,...). This must be set | 559 | * Export this with MODULE_DEVICE_TABLE(usb,...). This must be set | 
| 555 | * or your driver's probe function will never get called. | 560 | * or your driver's probe function will never get called. | 
| 561 | * @dynids: used internally to hold the list of dynamically added device | ||
| 562 | * ids for this driver. | ||
| 556 | * @driver: the driver model core driver structure. | 563 | * @driver: the driver model core driver structure. | 
| 564 | * @no_dynamic_id: if set to 1, the USB core will not allow dynamic ids to be | ||
| 565 | * added to this driver by preventing the sysfs file from being created. | ||
| 557 | * | 566 | * | 
| 558 | * USB drivers must provide a name, probe() and disconnect() methods, | 567 | * USB drivers must provide a name, probe() and disconnect() methods, | 
| 559 | * and an id_table. Other driver fields are optional. | 568 | * and an id_table. Other driver fields are optional. | 
| @@ -571,8 +580,6 @@ static inline int usb_make_path (struct usb_device *dev, char *buf, | |||
| 571 | * them as necessary, and blocking until the unlinks complete). | 580 | * them as necessary, and blocking until the unlinks complete). | 
| 572 | */ | 581 | */ | 
| 573 | struct usb_driver { | 582 | struct usb_driver { | 
| 574 | struct module *owner; | ||
| 575 | |||
| 576 | const char *name; | 583 | const char *name; | 
| 577 | 584 | ||
| 578 | int (*probe) (struct usb_interface *intf, | 585 | int (*probe) (struct usb_interface *intf, | 
| @@ -588,7 +595,9 @@ struct usb_driver { | |||
| 588 | 595 | ||
| 589 | const struct usb_device_id *id_table; | 596 | const struct usb_device_id *id_table; | 
| 590 | 597 | ||
| 598 | struct usb_dynids dynids; | ||
| 591 | struct device_driver driver; | 599 | struct device_driver driver; | 
| 600 | unsigned int no_dynamic_id:1; | ||
| 592 | }; | 601 | }; | 
| 593 | #define to_usb_driver(d) container_of(d, struct usb_driver, driver) | 602 | #define to_usb_driver(d) container_of(d, struct usb_driver, driver) | 
| 594 | 603 | ||
| @@ -614,7 +623,11 @@ struct usb_class_driver { | |||
| 614 | * use these in module_init()/module_exit() | 623 | * use these in module_init()/module_exit() | 
| 615 | * and don't forget MODULE_DEVICE_TABLE(usb, ...) | 624 | * and don't forget MODULE_DEVICE_TABLE(usb, ...) | 
| 616 | */ | 625 | */ | 
| 617 | extern int usb_register(struct usb_driver *); | 626 | int usb_register_driver(struct usb_driver *, struct module *); | 
| 627 | static inline int usb_register(struct usb_driver *driver) | ||
| 628 | { | ||
| 629 | return usb_register_driver(driver, THIS_MODULE); | ||
| 630 | } | ||
| 618 | extern void usb_deregister(struct usb_driver *); | 631 | extern void usb_deregister(struct usb_driver *); | 
| 619 | 632 | ||
| 620 | extern int usb_register_dev(struct usb_interface *intf, | 633 | extern int usb_register_dev(struct usb_interface *intf, | 
