Commit edf3d92b authored by Linus Torvalds's avatar Linus Torvalds

Merge http://linuxusb.bkbits.net/linus-2.5

into home.transmeta.com:/home/torvalds/v2.5/linux
parents 17454310 f601a8a6
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/byteorder.h> #include <asm/byteorder.h>
#include "hcd.h" /* for usbcore internals */
struct async { struct async {
struct list_head asynclist; struct list_head asynclist;
...@@ -724,7 +725,7 @@ static int proc_resetdevice(struct dev_state *ps) ...@@ -724,7 +725,7 @@ static int proc_resetdevice(struct dev_state *ps)
lock_kernel(); lock_kernel();
if (intf->driver && ps->dev) { if (intf->driver && ps->dev) {
usb_bind_driver(intf->driver,ps->dev, i); usb_bind_driver (intf->driver, intf);
} }
unlock_kernel(); unlock_kernel();
} }
...@@ -1062,8 +1063,8 @@ static int proc_ioctl (struct dev_state *ps, void *arg) ...@@ -1062,8 +1063,8 @@ static int proc_ioctl (struct dev_state *ps, void *arg)
int size; int size;
void *buf = 0; void *buf = 0;
int retval = 0; int retval = 0;
struct usb_interface *ifp = 0; struct usb_interface *ifp = 0;
struct usb_driver *driver = 0; struct usb_driver *driver = 0;
/* get input parameters and alloc buffer */ /* get input parameters and alloc buffer */
if (copy_from_user(&ctrl, (void *) arg, sizeof (ctrl))) if (copy_from_user(&ctrl, (void *) arg, sizeof (ctrl)))
...@@ -1102,10 +1103,10 @@ static int proc_ioctl (struct dev_state *ps, void *arg) ...@@ -1102,10 +1103,10 @@ static int proc_ioctl (struct dev_state *ps, void *arg)
unlock_kernel(); unlock_kernel();
break; break;
/* let kernel drivers try to (re)bind to the interface */ /* let kernel drivers try to (re)bind to the interface */
case USBDEVFS_CONNECT: case USBDEVFS_CONNECT:
usb_find_interface_driver_for_ifnum (ps->dev, ctrl.ifno); usb_find_interface_driver (ps->dev, ifp);
break; break;
/* talk directly to the interface's driver */ /* talk directly to the interface's driver */
default: default:
...@@ -1144,6 +1145,11 @@ static int proc_ioctl (struct dev_state *ps, void *arg) ...@@ -1144,6 +1145,11 @@ static int proc_ioctl (struct dev_state *ps, void *arg)
return retval; return retval;
} }
/*
* NOTE: All requests here that have interface numbers as parameters
* are assuming that somehow the configuration has been prevented from
* changing. But there's no mechanism to ensure that...
*/
static int usbdev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) static int usbdev_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
{ {
struct dev_state *ps = (struct dev_state *)file->private_data; struct dev_state *ps = (struct dev_state *)file->private_data;
......
...@@ -348,6 +348,16 @@ extern struct semaphore usb_bus_list_lock; ...@@ -348,6 +348,16 @@ extern struct semaphore usb_bus_list_lock;
extern void usb_bus_get (struct usb_bus *bus); extern void usb_bus_get (struct usb_bus *bus);
extern void usb_bus_put (struct usb_bus *bus); extern void usb_bus_put (struct usb_bus *bus);
extern struct usb_interface *usb_ifnum_to_if (struct usb_device *dev,
unsigned ifnum);
extern int usb_find_interface_driver (struct usb_device *dev,
struct usb_interface *interface);
/* for probe/disconnect with correct module usage counting */
void *usb_bind_driver(struct usb_driver *driver, struct usb_interface *intf);
void usb_unbind_driver(struct usb_device *device, struct usb_interface *intf);
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
/* hub.h ... DeviceRemovable in 2.4.2-ac11, gone in 2.4.10 */ /* hub.h ... DeviceRemovable in 2.4.2-ac11, gone in 2.4.10 */
......
...@@ -123,6 +123,10 @@ struct usb_hub_status { ...@@ -123,6 +123,10 @@ struct usb_hub_status {
* Hub descriptor * Hub descriptor
* See USB 2.0 spec Table 11-13 * See USB 2.0 spec Table 11-13
*/ */
#define USB_DT_HUB (USB_TYPE_CLASS | 0x09)
#define USB_DT_HUB_NONVAR_SIZE 7
struct usb_hub_descriptor { struct usb_hub_descriptor {
__u8 bDescLength; __u8 bDescLength;
__u8 bDescriptorType; __u8 bDescriptorType;
......
...@@ -8,6 +8,8 @@ ...@@ -8,6 +8,8 @@
#include <linux/init.h> #include <linux/init.h>
#include <asm/byteorder.h> #include <asm/byteorder.h>
#include "hcd.h" /* for usbcore internals */
struct usb_api_data { struct usb_api_data {
wait_queue_head_t wqh; wait_queue_head_t wqh;
int done; int done;
......
This diff is collapsed.
...@@ -252,7 +252,7 @@ show_async (struct device *dev, char *buf, size_t count, loff_t off) ...@@ -252,7 +252,7 @@ show_async (struct device *dev, char *buf, size_t count, loff_t off)
return count - size; return count - size;
} }
static DEVICE_ATTR (async, "sched-async", S_IRUSR, show_async, NULL); static DEVICE_ATTR (async, S_IRUSR, show_async, NULL);
#define DBG_SCHED_LIMIT 64 #define DBG_SCHED_LIMIT 64
...@@ -360,7 +360,7 @@ show_periodic (struct device *dev, char *buf, size_t count, loff_t off) ...@@ -360,7 +360,7 @@ show_periodic (struct device *dev, char *buf, size_t count, loff_t off)
return count - size; return count - size;
} }
static DEVICE_ATTR (periodic, "sched-periodic", S_IRUSR, show_periodic, NULL); static DEVICE_ATTR (periodic, S_IRUSR, show_periodic, NULL);
#undef DBG_SCHED_LIMIT #undef DBG_SCHED_LIMIT
......
...@@ -1193,7 +1193,7 @@ static void * usb_serial_probe(struct usb_device *dev, unsigned int ifnum, ...@@ -1193,7 +1193,7 @@ static void * usb_serial_probe(struct usb_device *dev, unsigned int ifnum,
interface = &dev->actconfig->interface[ifnum]; interface = &dev->actconfig->interface[ifnum];
list_for_each (tmp, &usb_serial_driver_list) { list_for_each (tmp, &usb_serial_driver_list) {
type = list_entry(tmp, struct usb_serial_device_type, driver_list); type = list_entry(tmp, struct usb_serial_device_type, driver_list);
id_pattern = usb_match_id(dev, interface, type->id_table); id_pattern = usb_match_id(interface, type->id_table);
if (id_pattern != NULL) { if (id_pattern != NULL) {
dbg("descriptor matches"); dbg("descriptor matches");
found = 1; found = 1;
......
...@@ -265,7 +265,7 @@ static int bus_reset( Scsi_Cmnd *srb ) ...@@ -265,7 +265,7 @@ static int bus_reset( Scsi_Cmnd *srb )
US_DEBUGPX("simulating disconnect/reconnect.\n"); US_DEBUGPX("simulating disconnect/reconnect.\n");
down(&intf->driver->serialize); down(&intf->driver->serialize);
intf->driver->disconnect(pusb_dev_save, intf->private_data); intf->driver->disconnect(pusb_dev_save, intf->private_data);
id = usb_match_id(pusb_dev_save, intf, intf->driver->id_table); id = usb_match_id(intf, intf->driver->id_table);
intf->driver->probe(pusb_dev_save, i, id); intf->driver->probe(pusb_dev_save, i, id);
up(&intf->driver->serialize); up(&intf->driver->serialize);
} }
......
...@@ -167,10 +167,6 @@ struct usb_device; ...@@ -167,10 +167,6 @@ struct usb_device;
#define USB_DT_OTHER_SPEED_CONFIG 0x07 #define USB_DT_OTHER_SPEED_CONFIG 0x07
#define USB_DT_INTERFACE_POWER 0x08 #define USB_DT_INTERFACE_POWER 0x08
// FIXME should be internal to hub driver
#define USB_DT_HUB (USB_TYPE_CLASS | 0x09)
#define USB_DT_HUB_NONVAR_SIZE 7
/* /*
* Descriptor sizes per descriptor type * Descriptor sizes per descriptor type
*/ */
...@@ -258,6 +254,8 @@ struct usb_interface { ...@@ -258,6 +254,8 @@ struct usb_interface {
void *private_data; void *private_data;
}; };
#define to_usb_interface(d) container_of(d, struct usb_interface, dev) #define to_usb_interface(d) container_of(d, struct usb_interface, dev)
#define interface_to_usbdev(intf) \
container_of(intf->dev.parent, struct usb_device, dev)
/* USB_DT_CONFIG: Configuration descriptor information. /* USB_DT_CONFIG: Configuration descriptor information.
* *
...@@ -303,10 +301,8 @@ struct usb_qualifier_descriptor { ...@@ -303,10 +301,8 @@ struct usb_qualifier_descriptor {
__u8 bRESERVED; __u8 bRESERVED;
} __attribute__ ((packed)); } __attribute__ ((packed));
/* helpers for driver access to descriptors */ // FIXME remove; exported only for drivers/usb/misc/auserwald.c
extern int usb_ifnum_to_ifpos(struct usb_device *dev, unsigned ifnum); // prefer usb_device->epnum[0..31]
extern struct usb_interface *
usb_ifnum_to_if(struct usb_device *dev, unsigned ifnum);
extern struct usb_endpoint_descriptor * extern struct usb_endpoint_descriptor *
usb_epnum_to_ep_desc(struct usb_device *dev, unsigned epnum); usb_epnum_to_ep_desc(struct usb_device *dev, unsigned epnum);
...@@ -435,10 +431,6 @@ extern void usb_free_dev(struct usb_device *); ...@@ -435,10 +431,6 @@ extern void usb_free_dev(struct usb_device *);
/* for when layers above USB add new non-USB drivers */ /* for when layers above USB add new non-USB drivers */
extern void usb_scan_devices(void); extern void usb_scan_devices(void);
/* for probe/disconnect with correct module usage counting */
void *usb_bind_driver(struct usb_driver *driver, struct usb_device *dev, unsigned int ifnum);
void usb_unbind_driver(struct usb_device *device, struct usb_interface *intf);
/* mostly for devices emulating SCSI over USB */ /* mostly for devices emulating SCSI over USB */
extern int usb_reset_device(struct usb_device *dev); extern int usb_reset_device(struct usb_device *dev);
...@@ -446,14 +438,12 @@ extern int usb_reset_device(struct usb_device *dev); ...@@ -446,14 +438,12 @@ extern int usb_reset_device(struct usb_device *dev);
extern int usb_get_current_frame_number (struct usb_device *usb_dev); extern int usb_get_current_frame_number (struct usb_device *usb_dev);
/* used these for multi-interface device registration */ /* used these for multi-interface device registration */
extern int usb_find_interface_driver_for_ifnum(struct usb_device *dev, unsigned int ifnum);
extern void usb_driver_claim_interface(struct usb_driver *driver, extern void usb_driver_claim_interface(struct usb_driver *driver,
struct usb_interface *iface, void* priv); struct usb_interface *iface, void* priv);
extern int usb_interface_claimed(struct usb_interface *iface); extern int usb_interface_claimed(struct usb_interface *iface);
extern void usb_driver_release_interface(struct usb_driver *driver, extern void usb_driver_release_interface(struct usb_driver *driver,
struct usb_interface *iface); struct usb_interface *iface);
const struct usb_device_id *usb_match_id(struct usb_device *dev, const struct usb_device_id *usb_match_id(struct usb_interface *interface,
struct usb_interface *interface,
const struct usb_device_id *id); const struct usb_device_id *id);
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment