ar9170 works needs more compat work for 2.6.27
authorLuis R. Rodriguez <lrodriguez@atheros.com>
Tue, 21 Jul 2009 21:43:15 +0000 (14:43 -0700)
committerLuis R. Rodriguez <lrodriguez@atheros.com>
Tue, 21 Jul 2009 21:43:15 +0000 (14:43 -0700)
We leave it only enabled for >= 2.6.28,
usb_hcd_unlink_urb() is used within usb_poison_urb()
and although it is available on 2.6.27 its not exported
and cannot be re-implemented. If we figure out a way
to drop the urb from the hardware queue as usb_hcd_unlink_urb()
does then we can backport this.

Also I think we need to backport usb_kill_urb_queue().

Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com>
compat/compat-2.6.28.c
compat/compat-2.6.28.h
config.mk

index df06cbe089327a17e82d1c816d2c108b7c57ea78..33871a224b235881dc36fac396548ea579a24911 100644 (file)
@@ -34,6 +34,7 @@
  * (TX, and RX)
  */
 
+#if 0
 /**
  * usb_poison_urb - reliably kill a transfer and prevent further use of an URB
  * @urb: pointer to URB describing a previously submitted request,
@@ -69,15 +70,25 @@ void usb_poison_urb(struct urb *urb)
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28))
        spin_unlock_irq(&usb_reject_lock);
 #endif
+       /*
+        * XXX: usb_hcd_unlink_urb() needs backporting... this is defined
+        * on usb hcd.c but urb.c gets access to it. That is, older kernels
+        * have usb_hcd_unlink_urb() but its not exported, nor can we
+        * re-implement it exactly. This essentially dequeues the urb from
+        * hw, we need to figure out a way to backport this.
+        */
+       //usb_hcd_unlink_urb(urb, -ENOENT);
 
-       usb_hcd_unlink_urb(urb, -ENOENT);
        wait_event(usb_kill_urb_queue, atomic_read(&urb->use_count) == 0);
 }
 EXPORT_SYMBOL_GPL(usb_poison_urb);
+#endif
 
 void usb_unpoison_urb(struct urb *urb)
 {
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28))
        unsigned long flags;
+#endif
 
        if (!urb)
                return;
@@ -93,6 +104,7 @@ void usb_unpoison_urb(struct urb *urb)
 EXPORT_SYMBOL_GPL(usb_unpoison_urb);
 
 
+#if 0
 /**
  * usb_poison_anchored_urbs - cease all traffic from an anchor
  * @anchor: anchor the requests are bound to
@@ -124,6 +136,7 @@ void usb_poison_anchored_urbs(struct usb_anchor *anchor)
        spin_unlock_irq(&anchor->lock);
 }
 EXPORT_SYMBOL_GPL(usb_poison_anchored_urbs);
+#endif
 
 /**
  * usb_get_from_anchor - get an anchor's oldest urb
index 945e9f2a8da8b7cae0d9e8a80798824f36c343f0..9bc1231bf249daa5e168933e0b5794884b91ddaf 100644 (file)
 })
 #endif /* From include/asm-generic/bug.h */
 
+#if 0
 extern void usb_poison_urb(struct urb *urb);
+#endif
 extern void usb_unpoison_urb(struct urb *urb);
 
+#if 0
 extern void usb_poison_anchored_urbs(struct usb_anchor *anchor);
+#endif
 extern void usb_unpoison_anchored_urbs(struct usb_anchor *anchor);
 
 extern struct urb *usb_get_from_anchor(struct usb_anchor *anchor);
index 4e1c1a36168c74696df26813e089013c5d260f81..660d7949ef6dec87078873b7134b53d73cf10d31 100644 (file)
--- a/config.mk
+++ b/config.mk
@@ -273,7 +273,7 @@ CONFIG_RTL8187=m
 
 CONFIG_AT76C50X_USB=m
 
-ifeq ($(shell test $(KERNEL_SUBLEVEL) -ge 27 && echo yes),yes)
+ifeq ($(shell test $(KERNEL_SUBLEVEL) -ge 28 && echo yes),yes)
 CONFIG_AR9170_USB=m
 CONFIG_AR9170_LEDS=y
 endif