|
@@ -125,7 +125,7 @@ struct usb_hcd {
|
|
|
|
|
|
/* more shared queuing code would be good; it should support
|
|
/* more shared queuing code would be good; it should support
|
|
* smarter scheduling, handle transaction translators, etc;
|
|
* smarter scheduling, handle transaction translators, etc;
|
|
- * input size of periodic table to an interrupt scheduler.
|
|
|
|
|
|
+ * input size of periodic table to an interrupt scheduler.
|
|
* (ohci 32, uhci 1024, ehci 256/512/1024).
|
|
* (ohci 32, uhci 1024, ehci 256/512/1024).
|
|
*/
|
|
*/
|
|
|
|
|
|
@@ -133,16 +133,16 @@ struct usb_hcd {
|
|
* this structure.
|
|
* this structure.
|
|
*/
|
|
*/
|
|
unsigned long hcd_priv[0]
|
|
unsigned long hcd_priv[0]
|
|
- __attribute__ ((aligned (sizeof(unsigned long))));
|
|
|
|
|
|
+ __attribute__ ((aligned(sizeof(unsigned long))));
|
|
};
|
|
};
|
|
|
|
|
|
/* 2.4 does this a bit differently ... */
|
|
/* 2.4 does this a bit differently ... */
|
|
-static inline struct usb_bus *hcd_to_bus (struct usb_hcd *hcd)
|
|
|
|
|
|
+static inline struct usb_bus *hcd_to_bus(struct usb_hcd *hcd)
|
|
{
|
|
{
|
|
return &hcd->self;
|
|
return &hcd->self;
|
|
}
|
|
}
|
|
|
|
|
|
-static inline struct usb_hcd *bus_to_hcd (struct usb_bus *bus)
|
|
|
|
|
|
+static inline struct usb_hcd *bus_to_hcd(struct usb_bus *bus)
|
|
{
|
|
{
|
|
return container_of(bus, struct usb_hcd, self);
|
|
return container_of(bus, struct usb_hcd, self);
|
|
}
|
|
}
|
|
@@ -202,18 +202,18 @@ struct hc_driver {
|
|
struct usb_host_endpoint *ep);
|
|
struct usb_host_endpoint *ep);
|
|
|
|
|
|
/* root hub support */
|
|
/* root hub support */
|
|
- int (*hub_status_data) (struct usb_hcd *hcd, char *buf);
|
|
|
|
- int (*hub_control) (struct usb_hcd *hcd,
|
|
|
|
|
|
+ int (*hub_status_data) (struct usb_hcd *hcd, char *buf);
|
|
|
|
+ int (*hub_control) (struct usb_hcd *hcd,
|
|
u16 typeReq, u16 wValue, u16 wIndex,
|
|
u16 typeReq, u16 wValue, u16 wIndex,
|
|
char *buf, u16 wLength);
|
|
char *buf, u16 wLength);
|
|
- int (*bus_suspend)(struct usb_hcd *);
|
|
|
|
- int (*bus_resume)(struct usb_hcd *);
|
|
|
|
- int (*start_port_reset)(struct usb_hcd *, unsigned port_num);
|
|
|
|
- void (*hub_irq_enable)(struct usb_hcd *);
|
|
|
|
|
|
+ int (*bus_suspend)(struct usb_hcd *);
|
|
|
|
+ int (*bus_resume)(struct usb_hcd *);
|
|
|
|
+ int (*start_port_reset)(struct usb_hcd *, unsigned port_num);
|
|
|
|
+ void (*hub_irq_enable)(struct usb_hcd *);
|
|
/* Needed only if port-change IRQs are level-triggered */
|
|
/* Needed only if port-change IRQs are level-triggered */
|
|
|
|
|
|
/* force handover of high-speed port to full-speed companion */
|
|
/* force handover of high-speed port to full-speed companion */
|
|
- void (*relinquish_port)(struct usb_hcd *, int);
|
|
|
|
|
|
+ void (*relinquish_port)(struct usb_hcd *, int);
|
|
};
|
|
};
|
|
|
|
|
|
extern int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb);
|
|
extern int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb);
|
|
@@ -221,56 +221,56 @@ extern int usb_hcd_check_unlink_urb(struct usb_hcd *hcd, struct urb *urb,
|
|
int status);
|
|
int status);
|
|
extern void usb_hcd_unlink_urb_from_ep(struct usb_hcd *hcd, struct urb *urb);
|
|
extern void usb_hcd_unlink_urb_from_ep(struct usb_hcd *hcd, struct urb *urb);
|
|
|
|
|
|
-extern int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags);
|
|
|
|
-extern int usb_hcd_unlink_urb (struct urb *urb, int status);
|
|
|
|
|
|
+extern int usb_hcd_submit_urb(struct urb *urb, gfp_t mem_flags);
|
|
|
|
+extern int usb_hcd_unlink_urb(struct urb *urb, int status);
|
|
extern void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb,
|
|
extern void usb_hcd_giveback_urb(struct usb_hcd *hcd, struct urb *urb,
|
|
int status);
|
|
int status);
|
|
extern void usb_hcd_flush_endpoint(struct usb_device *udev,
|
|
extern void usb_hcd_flush_endpoint(struct usb_device *udev,
|
|
struct usb_host_endpoint *ep);
|
|
struct usb_host_endpoint *ep);
|
|
extern void usb_hcd_disable_endpoint(struct usb_device *udev,
|
|
extern void usb_hcd_disable_endpoint(struct usb_device *udev,
|
|
struct usb_host_endpoint *ep);
|
|
struct usb_host_endpoint *ep);
|
|
-extern int usb_hcd_get_frame_number (struct usb_device *udev);
|
|
|
|
|
|
+extern int usb_hcd_get_frame_number(struct usb_device *udev);
|
|
|
|
|
|
-extern struct usb_hcd *usb_create_hcd (const struct hc_driver *driver,
|
|
|
|
|
|
+extern struct usb_hcd *usb_create_hcd(const struct hc_driver *driver,
|
|
struct device *dev, char *bus_name);
|
|
struct device *dev, char *bus_name);
|
|
-extern struct usb_hcd *usb_get_hcd (struct usb_hcd *hcd);
|
|
|
|
-extern void usb_put_hcd (struct usb_hcd *hcd);
|
|
|
|
|
|
+extern struct usb_hcd *usb_get_hcd(struct usb_hcd *hcd);
|
|
|
|
+extern void usb_put_hcd(struct usb_hcd *hcd);
|
|
extern int usb_add_hcd(struct usb_hcd *hcd,
|
|
extern int usb_add_hcd(struct usb_hcd *hcd,
|
|
unsigned int irqnum, unsigned long irqflags);
|
|
unsigned int irqnum, unsigned long irqflags);
|
|
extern void usb_remove_hcd(struct usb_hcd *hcd);
|
|
extern void usb_remove_hcd(struct usb_hcd *hcd);
|
|
|
|
|
|
struct platform_device;
|
|
struct platform_device;
|
|
-extern void usb_hcd_platform_shutdown(struct platform_device* dev);
|
|
|
|
|
|
+extern void usb_hcd_platform_shutdown(struct platform_device *dev);
|
|
|
|
|
|
#ifdef CONFIG_PCI
|
|
#ifdef CONFIG_PCI
|
|
struct pci_dev;
|
|
struct pci_dev;
|
|
struct pci_device_id;
|
|
struct pci_device_id;
|
|
-extern int usb_hcd_pci_probe (struct pci_dev *dev,
|
|
|
|
|
|
+extern int usb_hcd_pci_probe(struct pci_dev *dev,
|
|
const struct pci_device_id *id);
|
|
const struct pci_device_id *id);
|
|
-extern void usb_hcd_pci_remove (struct pci_dev *dev);
|
|
|
|
|
|
+extern void usb_hcd_pci_remove(struct pci_dev *dev);
|
|
|
|
|
|
#ifdef CONFIG_PM
|
|
#ifdef CONFIG_PM
|
|
-extern int usb_hcd_pci_suspend (struct pci_dev *dev, pm_message_t state);
|
|
|
|
-extern int usb_hcd_pci_resume (struct pci_dev *dev);
|
|
|
|
|
|
+extern int usb_hcd_pci_suspend(struct pci_dev *dev, pm_message_t state);
|
|
|
|
+extern int usb_hcd_pci_resume(struct pci_dev *dev);
|
|
#endif /* CONFIG_PM */
|
|
#endif /* CONFIG_PM */
|
|
|
|
|
|
-extern void usb_hcd_pci_shutdown (struct pci_dev *dev);
|
|
|
|
|
|
+extern void usb_hcd_pci_shutdown(struct pci_dev *dev);
|
|
|
|
|
|
#endif /* CONFIG_PCI */
|
|
#endif /* CONFIG_PCI */
|
|
|
|
|
|
/* pci-ish (pdev null is ok) buffer alloc/mapping support */
|
|
/* pci-ish (pdev null is ok) buffer alloc/mapping support */
|
|
-int hcd_buffer_create (struct usb_hcd *hcd);
|
|
|
|
-void hcd_buffer_destroy (struct usb_hcd *hcd);
|
|
|
|
|
|
+int hcd_buffer_create(struct usb_hcd *hcd);
|
|
|
|
+void hcd_buffer_destroy(struct usb_hcd *hcd);
|
|
|
|
|
|
-void *hcd_buffer_alloc (struct usb_bus *bus, size_t size,
|
|
|
|
|
|
+void *hcd_buffer_alloc(struct usb_bus *bus, size_t size,
|
|
gfp_t mem_flags, dma_addr_t *dma);
|
|
gfp_t mem_flags, dma_addr_t *dma);
|
|
-void hcd_buffer_free (struct usb_bus *bus, size_t size,
|
|
|
|
|
|
+void hcd_buffer_free(struct usb_bus *bus, size_t size,
|
|
void *addr, dma_addr_t dma);
|
|
void *addr, dma_addr_t dma);
|
|
|
|
|
|
/* generic bus glue, needed for host controllers that don't use PCI */
|
|
/* generic bus glue, needed for host controllers that don't use PCI */
|
|
-extern irqreturn_t usb_hcd_irq (int irq, void *__hcd);
|
|
|
|
|
|
+extern irqreturn_t usb_hcd_irq(int irq, void *__hcd);
|
|
|
|
|
|
-extern void usb_hc_died (struct usb_hcd *hcd);
|
|
|
|
|
|
+extern void usb_hc_died(struct usb_hcd *hcd);
|
|
extern void usb_hcd_poll_rh_status(struct usb_hcd *hcd);
|
|
extern void usb_hcd_poll_rh_status(struct usb_hcd *hcd);
|
|
|
|
|
|
/* -------------------------------------------------------------------------- */
|
|
/* -------------------------------------------------------------------------- */
|
|
@@ -323,9 +323,9 @@ extern void usb_destroy_configuration(struct usb_device *dev);
|
|
* Generic bandwidth allocation constants/support
|
|
* Generic bandwidth allocation constants/support
|
|
*/
|
|
*/
|
|
#define FRAME_TIME_USECS 1000L
|
|
#define FRAME_TIME_USECS 1000L
|
|
-#define BitTime(bytecount) (7 * 8 * bytecount / 6) /* with integer truncation */
|
|
|
|
|
|
+#define BitTime(bytecount) (7 * 8 * bytecount / 6) /* with integer truncation */
|
|
/* Trying not to use worst-case bit-stuffing
|
|
/* Trying not to use worst-case bit-stuffing
|
|
- of (7/6 * 8 * bytecount) = 9.33 * bytecount */
|
|
|
|
|
|
+ * of (7/6 * 8 * bytecount) = 9.33 * bytecount */
|
|
/* bytecount = data payload byte count */
|
|
/* bytecount = data payload byte count */
|
|
|
|
|
|
#define NS_TO_US(ns) ((ns + 500L) / 1000L)
|
|
#define NS_TO_US(ns) ((ns + 500L) / 1000L)
|
|
@@ -337,9 +337,9 @@ extern void usb_destroy_configuration(struct usb_device *dev);
|
|
*/
|
|
*/
|
|
#define BW_HOST_DELAY 1000L /* nanoseconds */
|
|
#define BW_HOST_DELAY 1000L /* nanoseconds */
|
|
#define BW_HUB_LS_SETUP 333L /* nanoseconds */
|
|
#define BW_HUB_LS_SETUP 333L /* nanoseconds */
|
|
- /* 4 full-speed bit times (est.) */
|
|
|
|
|
|
+ /* 4 full-speed bit times (est.) */
|
|
|
|
|
|
-#define FRAME_TIME_BITS 12000L /* frame = 1 millisecond */
|
|
|
|
|
|
+#define FRAME_TIME_BITS 12000L /* frame = 1 millisecond */
|
|
#define FRAME_TIME_MAX_BITS_ALLOC (90L * FRAME_TIME_BITS / 100L)
|
|
#define FRAME_TIME_MAX_BITS_ALLOC (90L * FRAME_TIME_BITS / 100L)
|
|
#define FRAME_TIME_MAX_USECS_ALLOC (90L * FRAME_TIME_USECS / 100L)
|
|
#define FRAME_TIME_MAX_USECS_ALLOC (90L * FRAME_TIME_USECS / 100L)
|
|
|
|
|
|
@@ -349,16 +349,16 @@ extern void usb_destroy_configuration(struct usb_device *dev);
|
|
* to preallocate bandwidth)
|
|
* to preallocate bandwidth)
|
|
*/
|
|
*/
|
|
#define USB2_HOST_DELAY 5 /* nsec, guess */
|
|
#define USB2_HOST_DELAY 5 /* nsec, guess */
|
|
-#define HS_NSECS(bytes) ( ((55 * 8 * 2083) \
|
|
|
|
|
|
+#define HS_NSECS(bytes) (((55 * 8 * 2083) \
|
|
+ (2083UL * (3 + BitTime(bytes))))/1000 \
|
|
+ (2083UL * (3 + BitTime(bytes))))/1000 \
|
|
+ USB2_HOST_DELAY)
|
|
+ USB2_HOST_DELAY)
|
|
-#define HS_NSECS_ISO(bytes) ( ((38 * 8 * 2083) \
|
|
|
|
|
|
+#define HS_NSECS_ISO(bytes) (((38 * 8 * 2083) \
|
|
+ (2083UL * (3 + BitTime(bytes))))/1000 \
|
|
+ (2083UL * (3 + BitTime(bytes))))/1000 \
|
|
+ USB2_HOST_DELAY)
|
|
+ USB2_HOST_DELAY)
|
|
#define HS_USECS(bytes) NS_TO_US (HS_NSECS(bytes))
|
|
#define HS_USECS(bytes) NS_TO_US (HS_NSECS(bytes))
|
|
#define HS_USECS_ISO(bytes) NS_TO_US (HS_NSECS_ISO(bytes))
|
|
#define HS_USECS_ISO(bytes) NS_TO_US (HS_NSECS_ISO(bytes))
|
|
|
|
|
|
-extern long usb_calc_bus_time (int speed, int is_input,
|
|
|
|
|
|
+extern long usb_calc_bus_time(int speed, int is_input,
|
|
int isoc, int bytecount);
|
|
int isoc, int bytecount);
|
|
|
|
|
|
/*-------------------------------------------------------------------------*/
|
|
/*-------------------------------------------------------------------------*/
|
|
@@ -374,16 +374,16 @@ extern struct list_head usb_bus_list;
|
|
extern struct mutex usb_bus_list_lock;
|
|
extern struct mutex usb_bus_list_lock;
|
|
extern wait_queue_head_t usb_kill_urb_queue;
|
|
extern wait_queue_head_t usb_kill_urb_queue;
|
|
|
|
|
|
-extern void usb_enable_root_hub_irq (struct usb_bus *bus);
|
|
|
|
|
|
+extern void usb_enable_root_hub_irq(struct usb_bus *bus);
|
|
|
|
|
|
-extern int usb_find_interface_driver (struct usb_device *dev,
|
|
|
|
|
|
+extern int usb_find_interface_driver(struct usb_device *dev,
|
|
struct usb_interface *interface);
|
|
struct usb_interface *interface);
|
|
|
|
|
|
#define usb_endpoint_out(ep_dir) (!((ep_dir) & USB_DIR_IN))
|
|
#define usb_endpoint_out(ep_dir) (!((ep_dir) & USB_DIR_IN))
|
|
|
|
|
|
#ifdef CONFIG_PM
|
|
#ifdef CONFIG_PM
|
|
-extern void usb_hcd_resume_root_hub (struct usb_hcd *hcd);
|
|
|
|
-extern void usb_root_hub_lost_power (struct usb_device *rhdev);
|
|
|
|
|
|
+extern void usb_hcd_resume_root_hub(struct usb_hcd *hcd);
|
|
|
|
+extern void usb_root_hub_lost_power(struct usb_device *rhdev);
|
|
extern int hcd_bus_suspend(struct usb_device *rhdev);
|
|
extern int hcd_bus_suspend(struct usb_device *rhdev);
|
|
extern int hcd_bus_resume(struct usb_device *rhdev);
|
|
extern int hcd_bus_resume(struct usb_device *rhdev);
|
|
#else
|
|
#else
|
|
@@ -403,13 +403,13 @@ static inline void usb_hcd_resume_root_hub(struct usb_hcd *hcd)
|
|
* these are expected to be called from the USB core/hub thread
|
|
* these are expected to be called from the USB core/hub thread
|
|
* with the kernel lock held
|
|
* with the kernel lock held
|
|
*/
|
|
*/
|
|
-extern void usbfs_update_special (void);
|
|
|
|
|
|
+extern void usbfs_update_special(void);
|
|
extern int usbfs_init(void);
|
|
extern int usbfs_init(void);
|
|
extern void usbfs_cleanup(void);
|
|
extern void usbfs_cleanup(void);
|
|
|
|
|
|
#else /* CONFIG_USB_DEVICEFS */
|
|
#else /* CONFIG_USB_DEVICEFS */
|
|
|
|
|
|
-static inline void usbfs_update_special (void) {}
|
|
|
|
|
|
+static inline void usbfs_update_special(void) {}
|
|
static inline int usbfs_init(void) { return 0; }
|
|
static inline int usbfs_init(void) { return 0; }
|
|
static inline void usbfs_cleanup(void) { }
|
|
static inline void usbfs_cleanup(void) { }
|
|
|
|
|
|
@@ -464,7 +464,7 @@ static inline void usbmon_urb_complete(struct usb_bus *bus, struct urb *urb,
|
|
/*-------------------------------------------------------------------------*/
|
|
/*-------------------------------------------------------------------------*/
|
|
|
|
|
|
/* 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 */
|
|
-// bleech -- resurfaced in 2.4.11 or 2.4.12
|
|
|
|
|
|
+/* bleech -- resurfaced in 2.4.11 or 2.4.12 */
|
|
#define bitmap DeviceRemovable
|
|
#define bitmap DeviceRemovable
|
|
|
|
|
|
|
|
|
|
@@ -472,8 +472,8 @@ static inline void usbmon_urb_complete(struct usb_bus *bus, struct urb *urb,
|
|
|
|
|
|
/* random stuff */
|
|
/* random stuff */
|
|
|
|
|
|
-#define RUN_CONTEXT (in_irq () ? "in_irq" \
|
|
|
|
- : (in_interrupt () ? "in_interrupt" : "can sleep"))
|
|
|
|
|
|
+#define RUN_CONTEXT (in_irq() ? "in_irq" \
|
|
|
|
+ : (in_interrupt() ? "in_interrupt" : "can sleep"))
|
|
|
|
|
|
|
|
|
|
/* This rwsem is for use only by the hub driver and ehci-hcd.
|
|
/* This rwsem is for use only by the hub driver and ehci-hcd.
|