--- include/linux/usb.h-dist	Fri Mar 15 17:10:23 2002
+++ include/linux/usb.h	Fri Mar 15 22:04:12 2002
@@ -588,7 +589,7 @@
 /**
  * struct urb - USB Request Block
  * @urb_list: For use by current owner of the URB.
- * @next: Used primarily to link ISO requests into rings.
+ * @next: Used to link ISO requests into rings.
  * @pipe: Holds endpoint number, direction, type, and max packet size.
  *	Create these values with the eight macros available;
  *	usb_{snd,rcv}TYPEpipe(dev,endpoint), where the type is "ctrl"
@@ -627,8 +628,9 @@
  * @start_frame: Returns the initial frame for interrupt or isochronous
  *	transfers.
  * @number_of_packets: Lists the number of ISO transfer buffers.
- * @interval: Specifies the polling interval for interrupt transfers, in
- *	milliseconds.
+ * @interval: Specifies the polling interval for interrupt or isochronous
+ *	transfers.  The units are frames (milliseconds) for for full and low
+ *	speed devices, and microframes (1/8 millisecond) for highspeed ones.
  * @error_count: Returns the number of ISO transfers that reported errors.
  * @context: For use in completion functions.  This normally points to
  *	request-specific driver context.
@@ -668,12 +671,16 @@
  *
  * Control URBs must provide a setup_packet.
  *
- * Interupt UBS must provide an interval, saying how often (in milliseconds)
+ * Interrupt UBS must provide an interval, saying how often (in milliseconds
+ * or, for highspeed devices, 125 microsecond units)
  * to poll for transfers.  After the URB has been submitted, the interval
  * and start_frame fields reflect how the transfer was actually scheduled.
  * The polling interval may be more frequent than requested.
  * For example, some controllers have a maximum interval of 32 microseconds,
  * while others support intervals of up to 1024 microseconds.
+ * Isochronous URBs also have transfer intervals.  (Note that for isochronous
+ * endpoints, as well as high speed interrupt endpoints, the encoding of
+ * the transfer interval in the endpoint descriptor is logarithmic.)
  *
  * Isochronous URBs normally use the USB_ISO_ASAP transfer flag, telling
  * the host controller to schedule the transfer as soon as bandwidth
@@ -682,8 +689,8 @@
  * and handle the case where the transfer can't begin then.  However, drivers
  * won't know how bandwidth is currently allocated, and while they can
  * find the current frame using usb_get_current_frame_number () they can't
- * know the range for that frame number.  (Common ranges for the frame
- * counter include 256, 512, and 1024 frames.)
+ * know the range for that frame number.  (Ranges for frame counter values
+ * are HC-specific, and can go from 256 to 65536 frames from "now".)
  *
  * Isochronous URBs have a different data transfer model, in part because
  * the quality of service is only "best effort".  Callers provide specially
@@ -734,7 +741,7 @@
 	unsigned char *setup_packet;	/* (in) setup packet (control only) */
 	int start_frame;		/* (modify) start frame (INT/ISO) */
 	int number_of_packets;		/* (in) number of ISO packets */
-	int interval;                   /* (in) polling interval (INT only) */
+	int interval;                   /* (in) transfer interval (INT/ISO) */
 	int error_count;		/* (return) number of ISO errors */
 	int timeout;			/* (in) timeout, in jiffies */
 	void *context;			/* (in) context for completion */
--- drivers/usb-dist/hcd.c	Fri Mar 15 17:10:12 2002
+++ drivers/usb/hcd.c	Sat Mar 16 12:12:44 2002
@@ -1374,7 +1373,7 @@
 	// hcd_monitor_hook(MONITOR_URB_SUBMIT, urb)
 	// It would catch submission paths for all urbs.
 
-	/* increment the reference count of the urb, as we now also control it. */
+	/* increment urb's reference count, we now control it. */
 	urb = usb_get_urb(urb);
 
 	/*
--- drivers/usb-dist/usb-ohci.h	Thu Jan 31 12:32:46 2002
+++ drivers/usb/usb-ohci.h	Sat Mar 16 10:38:32 2002
@@ -454,7 +454,7 @@
 
 
 /* Recover a TD/ED using its collision chain */
-static inline void *
+static void *
 dma_to_ed_td (struct hash_list_t * entry, dma_addr_t dma)
 {
 	struct hash_t * scan = entry->head;
@@ -465,14 +465,14 @@
 	return scan->virt;
 }
 
-static inline struct ed *
+static struct ed *
 dma_to_ed (struct ohci * hc, dma_addr_t ed_dma)
 {
 	return (struct ed *) dma_to_ed_td(&(hc->ed_hash[ED_HASH_FUNC(ed_dma)]),
 				      ed_dma);
 }
 
-static inline struct td *
+static struct td *
 dma_to_td (struct ohci * hc, dma_addr_t td_dma)
 {
 	return (struct td *) dma_to_ed_td(&(hc->td_hash[TD_HASH_FUNC(td_dma)]),
@@ -480,7 +480,7 @@
 }
 
 /* Add a hash entry for a TD/ED; return true on success */
-static inline int
+static int
 hash_add_ed_td(struct hash_list_t * entry, void * virt, dma_addr_t dma)
 {
 	struct hash_t * scan;
@@ -502,14 +502,14 @@
 	return 1;
 }
 
-static inline int
+static int
 hash_add_ed (struct ohci * hc, struct ed * ed)
 {
 	return hash_add_ed_td (&(hc->ed_hash[ED_HASH_FUNC(ed->dma)]),
 			ed, ed->dma);
 }
 
-static inline int
+static int
 hash_add_td (struct ohci * hc, struct td * td)
 {
 	return hash_add_ed_td (&(hc->td_hash[TD_HASH_FUNC(td->td_dma)]),
@@ -517,7 +517,7 @@
 }
 
 
-static inline void
+static void
 hash_free_ed_td (struct hash_list_t * entry, void * virt)
 {
 	struct hash_t *scan, *prev;
@@ -543,13 +543,13 @@
 	}
 }
 
-static inline void
+static void
 hash_free_ed (struct ohci * hc, struct ed * ed)
 {
 	hash_free_ed_td (&(hc->ed_hash[ED_HASH_FUNC(ed->dma)]), ed);
 }
 
-static inline void
+static void
 hash_free_td (struct ohci * hc, struct td * td)
 {
 	hash_free_ed_td (&(hc->td_hash[TD_HASH_FUNC(td->td_dma)]), td);
@@ -588,7 +588,7 @@
 }
 
 /* TDs ... */
-static inline struct td *
+static struct td *
 td_alloc (struct ohci *hc, int mem_flags)
 {
 	dma_addr_t	dma;
@@ -616,7 +616,7 @@
 
 
 /* DEV + EDs ... only the EDs need to be consistent */
-static inline struct ohci_device *
+static struct ohci_device *
 dev_alloc (struct ohci *hc, int mem_flags)
 {
 	dma_addr_t		dma;
