2 * usb-host.c: ETRAX 100LX USB Host Controller Driver (HCD)
4 * Copyright (c) 2002, 2003 Axis Communications AB.
7 #include <linux/config.h>
8 #include <linux/kernel.h>
9 #include <linux/delay.h>
10 #include <linux/ioport.h>
11 #include <linux/sched.h>
12 #include <linux/slab.h>
13 #include <linux/errno.h>
14 #include <linux/unistd.h>
15 #include <linux/interrupt.h>
16 #include <linux/init.h>
17 #include <linux/version.h>
18 #include <linux/list.h>
19 #include <linux/spinlock.h>
21 #include <asm/uaccess.h>
25 #include <asm/system.h>
26 #include <asm/arch/svinto.h>
28 #include <linux/usb.h>
29 /* Ugly include because we don't live with the other host drivers. */
30 #include <../drivers/usb/core/hcd.h>
31 #include <../drivers/usb/core/usb.h>
33 #include "hc_crisv10.h"
35 #define ETRAX_USB_HC_IRQ USB_HC_IRQ_NBR
36 #define ETRAX_USB_RX_IRQ USB_DMA_RX_IRQ_NBR
37 #define ETRAX_USB_TX_IRQ USB_DMA_TX_IRQ_NBR
39 static const char *usb_hcd_version
= "$Revision: 1.2 $";
50 #undef USB_DEBUG_TRACE
57 #define dbg_rh(format, arg...) printk(KERN_DEBUG __FILE__ ": (RH) " format "\n" , ## arg)
59 #define dbg_rh(format, arg...) do {} while (0)
63 #define dbg_epid(format, arg...) printk(KERN_DEBUG __FILE__ ": (EPID) " format "\n" , ## arg)
65 #define dbg_epid(format, arg...) do {} while (0)
69 #define dbg_sb(format, arg...) printk(KERN_DEBUG __FILE__ ": (SB) " format "\n" , ## arg)
71 #define dbg_sb(format, arg...) do {} while (0)
75 #define dbg_ctrl(format, arg...) printk(KERN_DEBUG __FILE__ ": (CTRL) " format "\n" , ## arg)
77 #define dbg_ctrl(format, arg...) do {} while (0)
81 #define dbg_bulk(format, arg...) printk(KERN_DEBUG __FILE__ ": (BULK) " format "\n" , ## arg)
83 #define dbg_bulk(format, arg...) do {} while (0)
87 #define dbg_intr(format, arg...) printk(KERN_DEBUG __FILE__ ": (INTR) " format "\n" , ## arg)
89 #define dbg_intr(format, arg...) do {} while (0)
93 #define dbg_isoc(format, arg...) printk(KERN_DEBUG __FILE__ ": (ISOC) " format "\n" , ## arg)
95 #define dbg_isoc(format, arg...) do {} while (0)
98 #ifdef USB_DEBUG_TRACE
99 #define DBFENTER (printk(": Entering: %s\n", __FUNCTION__))
100 #define DBFEXIT (printk(": Exiting: %s\n", __FUNCTION__))
102 #define DBFENTER do {} while (0)
103 #define DBFEXIT do {} while (0)
106 #define usb_pipeslow(pipe) (((pipe) >> 26) & 1)
108 /*-------------------------------------------------------------------
110 -------------------------------------------------------------------*/
112 static __u8 root_hub_dev_des
[] =
114 0x12, /* __u8 bLength; */
115 0x01, /* __u8 bDescriptorType; Device */
116 0x00, /* __le16 bcdUSB; v1.0 */
118 0x09, /* __u8 bDeviceClass; HUB_CLASSCODE */
119 0x00, /* __u8 bDeviceSubClass; */
120 0x00, /* __u8 bDeviceProtocol; */
121 0x08, /* __u8 bMaxPacketSize0; 8 Bytes */
122 0x00, /* __le16 idVendor; */
124 0x00, /* __le16 idProduct; */
126 0x00, /* __le16 bcdDevice; */
128 0x00, /* __u8 iManufacturer; */
129 0x02, /* __u8 iProduct; */
130 0x01, /* __u8 iSerialNumber; */
131 0x01 /* __u8 bNumConfigurations; */
134 /* Configuration descriptor */
135 static __u8 root_hub_config_des
[] =
137 0x09, /* __u8 bLength; */
138 0x02, /* __u8 bDescriptorType; Configuration */
139 0x19, /* __le16 wTotalLength; */
141 0x01, /* __u8 bNumInterfaces; */
142 0x01, /* __u8 bConfigurationValue; */
143 0x00, /* __u8 iConfiguration; */
144 0x40, /* __u8 bmAttributes; Bit 7: Bus-powered */
145 0x00, /* __u8 MaxPower; */
148 0x09, /* __u8 if_bLength; */
149 0x04, /* __u8 if_bDescriptorType; Interface */
150 0x00, /* __u8 if_bInterfaceNumber; */
151 0x00, /* __u8 if_bAlternateSetting; */
152 0x01, /* __u8 if_bNumEndpoints; */
153 0x09, /* __u8 if_bInterfaceClass; HUB_CLASSCODE */
154 0x00, /* __u8 if_bInterfaceSubClass; */
155 0x00, /* __u8 if_bInterfaceProtocol; */
156 0x00, /* __u8 if_iInterface; */
159 0x07, /* __u8 ep_bLength; */
160 0x05, /* __u8 ep_bDescriptorType; Endpoint */
161 0x81, /* __u8 ep_bEndpointAddress; IN Endpoint 1 */
162 0x03, /* __u8 ep_bmAttributes; Interrupt */
163 0x08, /* __le16 ep_wMaxPacketSize; 8 Bytes */
165 0xff /* __u8 ep_bInterval; 255 ms */
168 static __u8 root_hub_hub_des
[] =
170 0x09, /* __u8 bLength; */
171 0x29, /* __u8 bDescriptorType; Hub-descriptor */
172 0x02, /* __u8 bNbrPorts; */
173 0x00, /* __u16 wHubCharacteristics; */
175 0x01, /* __u8 bPwrOn2pwrGood; 2ms */
176 0x00, /* __u8 bHubContrCurrent; 0 mA */
177 0x00, /* __u8 DeviceRemovable; *** 7 Ports max *** */
178 0xff /* __u8 PortPwrCtrlMask; *** 7 ports max *** */
181 static struct timer_list bulk_start_timer
= TIMER_INITIALIZER(NULL
, 0, 0);
182 static struct timer_list bulk_eot_timer
= TIMER_INITIALIZER(NULL
, 0, 0);
184 /* We want the start timer to expire before the eot timer, because the former might start
185 traffic, thus making it unnecessary for the latter to time out. */
186 #define BULK_START_TIMER_INTERVAL (HZ/10) /* 100 ms */
187 #define BULK_EOT_TIMER_INTERVAL (HZ/10+2) /* 120 ms */
189 #define OK(x) len = (x); dbg_rh("OK(%d): line: %d", x, __LINE__); break
190 #define CHECK_ALIGN(x) if (((__u32)(x)) & 0x00000003) \
191 {panic("Alignment check (DWORD) failed at %s:%s:%d\n", __FILE__, __FUNCTION__, __LINE__);}
193 #define SLAB_FLAG (in_interrupt() ? SLAB_ATOMIC : SLAB_KERNEL)
194 #define KMALLOC_FLAG (in_interrupt() ? GFP_ATOMIC : GFP_KERNEL)
196 /* Most helpful debugging aid */
197 #define assert(expr) ((void) ((expr) ? 0 : (err("assert failed at line %d",__LINE__))))
199 /* Alternative assert define which stops after a failed assert. */
201 #define assert(expr) \
204 err("assert failed at line %d",__LINE__); \
211 /* FIXME: Should RX_BUF_SIZE be a config option, or maybe we should adjust it dynamically?
212 To adjust it dynamically we would have to get an interrupt when we reach the end
213 of the rx descriptor list, or when we get close to the end, and then allocate more
216 #define NBR_OF_RX_DESC 512
217 #define RX_DESC_BUF_SIZE 1024
218 #define RX_BUF_SIZE (NBR_OF_RX_DESC * RX_DESC_BUF_SIZE)
220 /* The number of epids is, among other things, used for pre-allocating
221 ctrl, bulk and isoc EP descriptors (one for each epid).
222 Assumed to be > 1 when initiating the DMA lists. */
223 #define NBR_OF_EPIDS 32
225 /* Support interrupt traffic intervals up to 128 ms. */
226 #define MAX_INTR_INTERVAL 128
228 /* If periodic traffic (intr or isoc) is to be used, then one entry in the EP table
229 must be "invalid". By this we mean that we shouldn't care about epid attentions
230 for this epid, or at least handle them differently from epid attentions for "valid"
231 epids. This define determines which one to use (don't change it). */
232 #define INVALID_EPID 31
233 /* A special epid for the bulk dummys. */
234 #define DUMMY_EPID 30
236 /* This is just a software cache for the valid entries in R_USB_EPT_DATA. */
237 static __u32 epid_usage_bitmask
;
239 /* A bitfield to keep information on in/out traffic is needed to uniquely identify
240 an endpoint on a device, since the most significant bit which indicates traffic
241 direction is lacking in the ep_id field (ETRAX epids can handle both in and
242 out traffic on endpoints that are otherwise identical). The USB framework, however,
243 relies on them to be handled separately. For example, bulk IN and OUT urbs cannot
244 be queued in the same list, since they would block each other. */
245 static __u32 epid_out_traffic
;
247 /* DMA IN cache bug. Align the DMA IN buffers to 32 bytes, i.e. a cache line.
248 Since RX_DESC_BUF_SIZE is 1024 is a multiple of 32, all rx buffers will be cache aligned. */
249 static volatile unsigned char RxBuf
[RX_BUF_SIZE
] __attribute__ ((aligned (32)));
250 static volatile USB_IN_Desc_t RxDescList
[NBR_OF_RX_DESC
] __attribute__ ((aligned (4)));
252 /* Pointers into RxDescList. */
253 static volatile USB_IN_Desc_t
*myNextRxDesc
;
254 static volatile USB_IN_Desc_t
*myLastRxDesc
;
255 static volatile USB_IN_Desc_t
*myPrevRxDesc
;
257 /* EP descriptors must be 32-bit aligned. */
258 static volatile USB_EP_Desc_t TxCtrlEPList
[NBR_OF_EPIDS
] __attribute__ ((aligned (4)));
259 static volatile USB_EP_Desc_t TxBulkEPList
[NBR_OF_EPIDS
] __attribute__ ((aligned (4)));
260 /* After each enabled bulk EP (IN or OUT) we put two disabled EP descriptors with the eol flag set,
261 causing the DMA to stop the DMA channel. The first of these two has the intr flag set, which
262 gives us a dma8_sub0_descr interrupt. When we receive this, we advance the DMA one step in the
263 EP list and then restart the bulk channel, thus forcing a switch between bulk EP descriptors
265 static volatile USB_EP_Desc_t TxBulkDummyEPList
[NBR_OF_EPIDS
][2] __attribute__ ((aligned (4)));
267 static volatile USB_EP_Desc_t TxIsocEPList
[NBR_OF_EPIDS
] __attribute__ ((aligned (4)));
268 static volatile USB_SB_Desc_t TxIsocSB_zout
__attribute__ ((aligned (4)));
270 static volatile USB_EP_Desc_t TxIntrEPList
[MAX_INTR_INTERVAL
] __attribute__ ((aligned (4)));
271 static volatile USB_SB_Desc_t TxIntrSB_zout
__attribute__ ((aligned (4)));
273 /* A zout transfer makes a memory access at the address of its buf pointer, which means that setting
274 this buf pointer to 0 will cause an access to the flash. In addition to this, setting sw_len to 0
275 results in a 16/32 bytes (depending on DMA burst size) transfer. Instead, we set it to 1, and point
276 it to this buffer. */
277 static int zout_buffer
[4] __attribute__ ((aligned (4)));
279 /* Cache for allocating new EP and SB descriptors. */
280 static kmem_cache_t
*usb_desc_cache
;
282 /* Cache for the registers allocated in the top half. */
283 static kmem_cache_t
*top_half_reg_cache
;
285 /* Cache for the data allocated in the isoc descr top half. */
286 static kmem_cache_t
*isoc_compl_cache
;
288 static struct usb_bus
*etrax_usb_bus
;
290 /* This is a circular (double-linked) list of the active urbs for each epid.
291 The head is never removed, and new urbs are linked onto the list as
292 urb_entry_t elements. Don't reference urb_list directly; use the wrapper
293 functions instead. Note that working with these lists might require spinlock
295 static struct list_head urb_list
[NBR_OF_EPIDS
];
297 /* Read about the need and usage of this lock in submit_ctrl_urb. */
298 static spinlock_t urb_list_lock
;
300 /* Used when unlinking asynchronously. */
301 static struct list_head urb_unlink_list
;
303 /* for returning string descriptors in UTF-16LE */
304 static int ascii2utf (char *ascii
, __u8
*utf
, int utfmax
)
308 for (retval
= 0; *ascii
&& utfmax
> 1; utfmax
-= 2, retval
+= 2) {
309 *utf
++ = *ascii
++ & 0x7f;
315 static int usb_root_hub_string (int id
, int serial
, char *type
, __u8
*data
, int len
)
319 // assert (len > (2 * (sizeof (buf) + 1)));
320 // assert (strlen (type) <= 8);
324 *data
++ = 4; *data
++ = 3; /* 4 bytes data */
325 *data
++ = 0; *data
++ = 0; /* some language id */
329 } else if (id
== 1) {
330 sprintf (buf
, "%x", serial
);
332 // product description
333 } else if (id
== 2) {
334 sprintf (buf
, "USB %s Root Hub", type
);
336 // id 3 == vendor description
338 // unsupported IDs --> "stall"
342 data
[0] = 2 + ascii2utf (buf
, data
+ 2, len
- 2);
347 /* Wrappers around the list functions (include/linux/list.h). */
349 static inline int urb_list_empty(int epid
)
351 return list_empty(&urb_list
[epid
]);
354 /* Returns first urb for this epid, or NULL if list is empty. */
355 static inline struct urb
*urb_list_first(int epid
)
357 struct urb
*first_urb
= 0;
359 if (!urb_list_empty(epid
)) {
360 /* Get the first urb (i.e. head->next). */
361 urb_entry_t
*urb_entry
= list_entry((&urb_list
[epid
])->next
, urb_entry_t
, list
);
362 first_urb
= urb_entry
->urb
;
367 /* Adds an urb_entry last in the list for this epid. */
368 static inline void urb_list_add(struct urb
*urb
, int epid
)
370 urb_entry_t
*urb_entry
= (urb_entry_t
*)kmalloc(sizeof(urb_entry_t
), KMALLOC_FLAG
);
373 urb_entry
->urb
= urb
;
374 list_add_tail(&urb_entry
->list
, &urb_list
[epid
]);
377 /* Search through the list for an element that contains this urb. (The list
378 is expected to be short and the one we are about to delete will often be
379 the first in the list.) */
380 static inline urb_entry_t
*__urb_list_entry(struct urb
*urb
, int epid
)
382 struct list_head
*entry
;
383 struct list_head
*tmp
;
384 urb_entry_t
*urb_entry
;
386 list_for_each_safe(entry
, tmp
, &urb_list
[epid
]) {
387 urb_entry
= list_entry(entry
, urb_entry_t
, list
);
389 assert(urb_entry
->urb
);
391 if (urb_entry
->urb
== urb
) {
398 /* Delete an urb from the list. */
399 static inline void urb_list_del(struct urb
*urb
, int epid
)
401 urb_entry_t
*urb_entry
= __urb_list_entry(urb
, epid
);
404 /* Delete entry and free. */
405 list_del(&urb_entry
->list
);
409 /* Move an urb to the end of the list. */
410 static inline void urb_list_move_last(struct urb
*urb
, int epid
)
412 urb_entry_t
*urb_entry
= __urb_list_entry(urb
, epid
);
415 list_del(&urb_entry
->list
);
416 list_add_tail(&urb_entry
->list
, &urb_list
[epid
]);
419 /* Get the next urb in the list. */
420 static inline struct urb
*urb_list_next(struct urb
*urb
, int epid
)
422 urb_entry_t
*urb_entry
= __urb_list_entry(urb
, epid
);
426 if (urb_entry
->list
.next
!= &urb_list
[epid
]) {
427 struct list_head
*elem
= urb_entry
->list
.next
;
428 urb_entry
= list_entry(elem
, urb_entry_t
, list
);
429 return urb_entry
->urb
;
437 /* For debug purposes only. */
438 static inline void urb_list_dump(int epid
)
440 struct list_head
*entry
;
441 struct list_head
*tmp
;
442 urb_entry_t
*urb_entry
;
445 info("Dumping urb list for epid %d", epid
);
447 list_for_each_safe(entry
, tmp
, &urb_list
[epid
]) {
448 urb_entry
= list_entry(entry
, urb_entry_t
, list
);
449 info(" entry %d, urb = 0x%lx", i
, (unsigned long)urb_entry
->urb
);
453 static void init_rx_buffers(void);
454 static int etrax_rh_unlink_urb(struct urb
*urb
);
455 static void etrax_rh_send_irq(struct urb
*urb
);
456 static void etrax_rh_init_int_timer(struct urb
*urb
);
457 static void etrax_rh_int_timer_do(unsigned long ptr
);
459 static int etrax_usb_setup_epid(struct urb
*urb
);
460 static int etrax_usb_lookup_epid(struct urb
*urb
);
461 static int etrax_usb_allocate_epid(void);
462 static void etrax_usb_free_epid(int epid
);
464 static int etrax_remove_from_sb_list(struct urb
*urb
);
466 static void* etrax_usb_buffer_alloc(struct usb_bus
* bus
, size_t size
, int mem_flags
, dma_addr_t
*dma
);
467 static void etrax_usb_buffer_free(struct usb_bus
*bus
, size_t size
, void *addr
, dma_addr_t dma
);
469 static void etrax_usb_add_to_bulk_sb_list(struct urb
*urb
, int epid
);
470 static void etrax_usb_add_to_ctrl_sb_list(struct urb
*urb
, int epid
);
471 static void etrax_usb_add_to_intr_sb_list(struct urb
*urb
, int epid
);
472 static void etrax_usb_add_to_isoc_sb_list(struct urb
*urb
, int epid
);
474 static int etrax_usb_submit_bulk_urb(struct urb
*urb
);
475 static int etrax_usb_submit_ctrl_urb(struct urb
*urb
);
476 static int etrax_usb_submit_intr_urb(struct urb
*urb
);
477 static int etrax_usb_submit_isoc_urb(struct urb
*urb
);
479 static int etrax_usb_submit_urb(struct urb
*urb
, int mem_flags
);
480 static int etrax_usb_unlink_urb(struct urb
*urb
, int status
);
481 static int etrax_usb_get_frame_number(struct usb_device
*usb_dev
);
483 static irqreturn_t
etrax_usb_tx_interrupt(int irq
, void *vhc
, struct pt_regs
*regs
);
484 static irqreturn_t
etrax_usb_rx_interrupt(int irq
, void *vhc
, struct pt_regs
*regs
);
485 static irqreturn_t
etrax_usb_hc_interrupt_top_half(int irq
, void *vhc
, struct pt_regs
*regs
);
486 static void etrax_usb_hc_interrupt_bottom_half(void *data
);
488 static void etrax_usb_isoc_descr_interrupt_bottom_half(void *data
);
491 /* The following is a list of interrupt handlers for the host controller interrupts we use.
492 They are called from etrax_usb_hc_interrupt_bottom_half. */
493 static void etrax_usb_hc_isoc_eof_interrupt(void);
494 static void etrax_usb_hc_bulk_eot_interrupt(int timer_induced
);
495 static void etrax_usb_hc_epid_attn_interrupt(usb_interrupt_registers_t
*reg
);
496 static void etrax_usb_hc_port_status_interrupt(usb_interrupt_registers_t
*reg
);
497 static void etrax_usb_hc_ctl_status_interrupt(usb_interrupt_registers_t
*reg
);
499 static int etrax_rh_submit_urb (struct urb
*urb
);
501 /* Forward declaration needed because they are used in the rx interrupt routine. */
502 static void etrax_usb_complete_urb(struct urb
*urb
, int status
);
503 static void etrax_usb_complete_bulk_urb(struct urb
*urb
, int status
);
504 static void etrax_usb_complete_ctrl_urb(struct urb
*urb
, int status
);
505 static void etrax_usb_complete_intr_urb(struct urb
*urb
, int status
);
506 static void etrax_usb_complete_isoc_urb(struct urb
*urb
, int status
);
508 static int etrax_usb_hc_init(void);
509 static void etrax_usb_hc_cleanup(void);
511 static struct usb_operations etrax_usb_device_operations
=
513 .get_frame_number
= etrax_usb_get_frame_number
,
514 .submit_urb
= etrax_usb_submit_urb
,
515 .unlink_urb
= etrax_usb_unlink_urb
,
516 .buffer_alloc
= etrax_usb_buffer_alloc
,
517 .buffer_free
= etrax_usb_buffer_free
520 /* Note that these functions are always available in their "__" variants, for use in
521 error situations. The "__" missing variants are controlled by the USB_DEBUG_DESC/
522 USB_DEBUG_URB macros. */
523 static void __dump_urb(struct urb
* purb
)
525 printk("\nurb :0x%08lx\n", (unsigned long)purb
);
526 printk("dev :0x%08lx\n", (unsigned long)purb
->dev
);
527 printk("pipe :0x%08x\n", purb
->pipe
);
528 printk("status :%d\n", purb
->status
);
529 printk("transfer_flags :0x%08x\n", purb
->transfer_flags
);
530 printk("transfer_buffer :0x%08lx\n", (unsigned long)purb
->transfer_buffer
);
531 printk("transfer_buffer_length:%d\n", purb
->transfer_buffer_length
);
532 printk("actual_length :%d\n", purb
->actual_length
);
533 printk("setup_packet :0x%08lx\n", (unsigned long)purb
->setup_packet
);
534 printk("start_frame :%d\n", purb
->start_frame
);
535 printk("number_of_packets :%d\n", purb
->number_of_packets
);
536 printk("interval :%d\n", purb
->interval
);
537 printk("error_count :%d\n", purb
->error_count
);
538 printk("context :0x%08lx\n", (unsigned long)purb
->context
);
539 printk("complete :0x%08lx\n\n", (unsigned long)purb
->complete
);
542 static void __dump_in_desc(volatile USB_IN_Desc_t
*in
)
544 printk("\nUSB_IN_Desc at 0x%08lx\n", (unsigned long)in
);
545 printk(" sw_len : 0x%04x (%d)\n", in
->sw_len
, in
->sw_len
);
546 printk(" command : 0x%04x\n", in
->command
);
547 printk(" next : 0x%08lx\n", in
->next
);
548 printk(" buf : 0x%08lx\n", in
->buf
);
549 printk(" hw_len : 0x%04x (%d)\n", in
->hw_len
, in
->hw_len
);
550 printk(" status : 0x%04x\n\n", in
->status
);
553 static void __dump_sb_desc(volatile USB_SB_Desc_t
*sb
)
555 char tt
= (sb
->command
& 0x30) >> 4;
572 tt_string
= "unknown (weird)";
575 printk("\n USB_SB_Desc at 0x%08lx\n", (unsigned long)sb
);
576 printk(" command : 0x%04x\n", sb
->command
);
577 printk(" rem : %d\n", (sb
->command
& 0x3f00) >> 8);
578 printk(" full : %d\n", (sb
->command
& 0x40) >> 6);
579 printk(" tt : %d (%s)\n", tt
, tt_string
);
580 printk(" intr : %d\n", (sb
->command
& 0x8) >> 3);
581 printk(" eot : %d\n", (sb
->command
& 0x2) >> 1);
582 printk(" eol : %d\n", sb
->command
& 0x1);
583 printk(" sw_len : 0x%04x (%d)\n", sb
->sw_len
, sb
->sw_len
);
584 printk(" next : 0x%08lx\n", sb
->next
);
585 printk(" buf : 0x%08lx\n\n", sb
->buf
);
589 static void __dump_ep_desc(volatile USB_EP_Desc_t
*ep
)
591 printk("\nUSB_EP_Desc at 0x%08lx\n", (unsigned long)ep
);
592 printk(" command : 0x%04x\n", ep
->command
);
593 printk(" ep_id : %d\n", (ep
->command
& 0x1f00) >> 8);
594 printk(" enable : %d\n", (ep
->command
& 0x10) >> 4);
595 printk(" intr : %d\n", (ep
->command
& 0x8) >> 3);
596 printk(" eof : %d\n", (ep
->command
& 0x2) >> 1);
597 printk(" eol : %d\n", ep
->command
& 0x1);
598 printk(" hw_len : 0x%04x (%d)\n", ep
->hw_len
, ep
->hw_len
);
599 printk(" next : 0x%08lx\n", ep
->next
);
600 printk(" sub : 0x%08lx\n\n", ep
->sub
);
603 static inline void __dump_ep_list(int pipe_type
)
605 volatile USB_EP_Desc_t
*ep
;
606 volatile USB_EP_Desc_t
*first_ep
;
607 volatile USB_SB_Desc_t
*sb
;
612 first_ep
= &TxBulkEPList
[0];
615 first_ep
= &TxCtrlEPList
[0];
618 first_ep
= &TxIntrEPList
[0];
620 case PIPE_ISOCHRONOUS
:
621 first_ep
= &TxIsocEPList
[0];
624 warn("Cannot dump unknown traffic type");
629 printk("\n\nDumping EP list...\n\n");
633 /* Cannot phys_to_virt on 0 as it turns into 80000000, which is != 0. */
634 sb
= ep
->sub
? phys_to_virt(ep
->sub
) : 0;
637 sb
= sb
->next
? phys_to_virt(sb
->next
) : 0;
639 ep
= (volatile USB_EP_Desc_t
*)(phys_to_virt(ep
->next
));
641 } while (ep
!= first_ep
);
644 static inline void __dump_ept_data(int epid
)
647 __u32 r_usb_ept_data
;
649 if (epid
< 0 || epid
> 31) {
650 printk("Cannot dump ept data for invalid epid %d\n", epid
);
656 *R_USB_EPT_INDEX
= IO_FIELD(R_USB_EPT_INDEX
, value
, epid
);
658 r_usb_ept_data
= *R_USB_EPT_DATA
;
659 restore_flags(flags
);
661 printk("\nR_USB_EPT_DATA = 0x%x for epid %d :\n", r_usb_ept_data
, epid
);
662 if (r_usb_ept_data
== 0) {
663 /* No need for more detailed printing. */
666 printk(" valid : %d\n", (r_usb_ept_data
& 0x80000000) >> 31);
667 printk(" hold : %d\n", (r_usb_ept_data
& 0x40000000) >> 30);
668 printk(" error_count_in : %d\n", (r_usb_ept_data
& 0x30000000) >> 28);
669 printk(" t_in : %d\n", (r_usb_ept_data
& 0x08000000) >> 27);
670 printk(" low_speed : %d\n", (r_usb_ept_data
& 0x04000000) >> 26);
671 printk(" port : %d\n", (r_usb_ept_data
& 0x03000000) >> 24);
672 printk(" error_code : %d\n", (r_usb_ept_data
& 0x00c00000) >> 22);
673 printk(" t_out : %d\n", (r_usb_ept_data
& 0x00200000) >> 21);
674 printk(" error_count_out : %d\n", (r_usb_ept_data
& 0x00180000) >> 19);
675 printk(" max_len : %d\n", (r_usb_ept_data
& 0x0003f800) >> 11);
676 printk(" ep : %d\n", (r_usb_ept_data
& 0x00000780) >> 7);
677 printk(" dev : %d\n", (r_usb_ept_data
& 0x0000003f));
680 static inline void __dump_ept_data_list(void)
684 printk("Dumping the whole R_USB_EPT_DATA list\n");
686 for (i
= 0; i
< 32; i
++) {
690 #ifdef USB_DEBUG_DESC
691 #define dump_in_desc(...) __dump_in_desc(...)
692 #define dump_sb_desc(...) __dump_sb_desc(...)
693 #define dump_ep_desc(...) __dump_ep_desc(...)
695 #define dump_in_desc(...) do {} while (0)
696 #define dump_sb_desc(...) do {} while (0)
697 #define dump_ep_desc(...) do {} while (0)
701 #define dump_urb(x) __dump_urb(x)
703 #define dump_urb(x) do {} while (0)
706 static void init_rx_buffers(void)
712 for (i
= 0; i
< (NBR_OF_RX_DESC
- 1); i
++) {
713 RxDescList
[i
].sw_len
= RX_DESC_BUF_SIZE
;
714 RxDescList
[i
].command
= 0;
715 RxDescList
[i
].next
= virt_to_phys(&RxDescList
[i
+ 1]);
716 RxDescList
[i
].buf
= virt_to_phys(RxBuf
+ (i
* RX_DESC_BUF_SIZE
));
717 RxDescList
[i
].hw_len
= 0;
718 RxDescList
[i
].status
= 0;
720 /* DMA IN cache bug. (struct etrax_dma_descr has the same layout as USB_IN_Desc
721 for the relevant fields.) */
722 prepare_rx_descriptor((struct etrax_dma_descr
*)&RxDescList
[i
]);
726 RxDescList
[i
].sw_len
= RX_DESC_BUF_SIZE
;
727 RxDescList
[i
].command
= IO_STATE(USB_IN_command
, eol
, yes
);
728 RxDescList
[i
].next
= virt_to_phys(&RxDescList
[0]);
729 RxDescList
[i
].buf
= virt_to_phys(RxBuf
+ (i
* RX_DESC_BUF_SIZE
));
730 RxDescList
[i
].hw_len
= 0;
731 RxDescList
[i
].status
= 0;
733 myNextRxDesc
= &RxDescList
[0];
734 myLastRxDesc
= &RxDescList
[NBR_OF_RX_DESC
- 1];
735 myPrevRxDesc
= &RxDescList
[NBR_OF_RX_DESC
- 1];
737 *R_DMA_CH9_FIRST
= virt_to_phys(myNextRxDesc
);
738 *R_DMA_CH9_CMD
= IO_STATE(R_DMA_CH9_CMD
, cmd
, start
);
743 static void init_tx_bulk_ep(void)
749 for (i
= 0; i
< (NBR_OF_EPIDS
- 1); i
++) {
750 CHECK_ALIGN(&TxBulkEPList
[i
]);
751 TxBulkEPList
[i
].hw_len
= 0;
752 TxBulkEPList
[i
].command
= IO_FIELD(USB_EP_command
, epid
, i
);
753 TxBulkEPList
[i
].sub
= 0;
754 TxBulkEPList
[i
].next
= virt_to_phys(&TxBulkEPList
[i
+ 1]);
756 /* Initiate two EPs, disabled and with the eol flag set. No need for any
759 /* The first one has the intr flag set so we get an interrupt when the DMA
760 channel is about to become disabled. */
761 CHECK_ALIGN(&TxBulkDummyEPList
[i
][0]);
762 TxBulkDummyEPList
[i
][0].hw_len
= 0;
763 TxBulkDummyEPList
[i
][0].command
= (IO_FIELD(USB_EP_command
, epid
, DUMMY_EPID
) |
764 IO_STATE(USB_EP_command
, eol
, yes
) |
765 IO_STATE(USB_EP_command
, intr
, yes
));
766 TxBulkDummyEPList
[i
][0].sub
= 0;
767 TxBulkDummyEPList
[i
][0].next
= virt_to_phys(&TxBulkDummyEPList
[i
][1]);
769 /* The second one. */
770 CHECK_ALIGN(&TxBulkDummyEPList
[i
][1]);
771 TxBulkDummyEPList
[i
][1].hw_len
= 0;
772 TxBulkDummyEPList
[i
][1].command
= (IO_FIELD(USB_EP_command
, epid
, DUMMY_EPID
) |
773 IO_STATE(USB_EP_command
, eol
, yes
));
774 TxBulkDummyEPList
[i
][1].sub
= 0;
775 /* The last dummy's next pointer is the same as the current EP's next pointer. */
776 TxBulkDummyEPList
[i
][1].next
= virt_to_phys(&TxBulkEPList
[i
+ 1]);
779 /* Configure the last one. */
780 CHECK_ALIGN(&TxBulkEPList
[i
]);
781 TxBulkEPList
[i
].hw_len
= 0;
782 TxBulkEPList
[i
].command
= (IO_STATE(USB_EP_command
, eol
, yes
) |
783 IO_FIELD(USB_EP_command
, epid
, i
));
784 TxBulkEPList
[i
].sub
= 0;
785 TxBulkEPList
[i
].next
= virt_to_phys(&TxBulkEPList
[0]);
787 /* No need configuring dummy EPs for the last one as it will never be used for
788 bulk traffic (i == INVALD_EPID at this point). */
790 /* Set up to start on the last EP so we will enable it when inserting traffic
791 for the first time (imitating the situation where the DMA has stopped
792 because there was no more traffic). */
793 *R_DMA_CH8_SUB0_EP
= virt_to_phys(&TxBulkEPList
[i
]);
794 /* No point in starting the bulk channel yet.
795 *R_DMA_CH8_SUB0_CMD = IO_STATE(R_DMA_CH8_SUB0_CMD, cmd, start); */
799 static void init_tx_ctrl_ep(void)
805 for (i
= 0; i
< (NBR_OF_EPIDS
- 1); i
++) {
806 CHECK_ALIGN(&TxCtrlEPList
[i
]);
807 TxCtrlEPList
[i
].hw_len
= 0;
808 TxCtrlEPList
[i
].command
= IO_FIELD(USB_EP_command
, epid
, i
);
809 TxCtrlEPList
[i
].sub
= 0;
810 TxCtrlEPList
[i
].next
= virt_to_phys(&TxCtrlEPList
[i
+ 1]);
813 CHECK_ALIGN(&TxCtrlEPList
[i
]);
814 TxCtrlEPList
[i
].hw_len
= 0;
815 TxCtrlEPList
[i
].command
= (IO_STATE(USB_EP_command
, eol
, yes
) |
816 IO_FIELD(USB_EP_command
, epid
, i
));
818 TxCtrlEPList
[i
].sub
= 0;
819 TxCtrlEPList
[i
].next
= virt_to_phys(&TxCtrlEPList
[0]);
821 *R_DMA_CH8_SUB1_EP
= virt_to_phys(&TxCtrlEPList
[0]);
822 *R_DMA_CH8_SUB1_CMD
= IO_STATE(R_DMA_CH8_SUB1_CMD
, cmd
, start
);
828 static void init_tx_intr_ep(void)
834 /* Read comment at zout_buffer declaration for an explanation to this. */
835 TxIntrSB_zout
.sw_len
= 1;
836 TxIntrSB_zout
.next
= 0;
837 TxIntrSB_zout
.buf
= virt_to_phys(&zout_buffer
[0]);
838 TxIntrSB_zout
.command
= (IO_FIELD(USB_SB_command
, rem
, 0) |
839 IO_STATE(USB_SB_command
, tt
, zout
) |
840 IO_STATE(USB_SB_command
, full
, yes
) |
841 IO_STATE(USB_SB_command
, eot
, yes
) |
842 IO_STATE(USB_SB_command
, eol
, yes
));
844 for (i
= 0; i
< (MAX_INTR_INTERVAL
- 1); i
++) {
845 CHECK_ALIGN(&TxIntrEPList
[i
]);
846 TxIntrEPList
[i
].hw_len
= 0;
847 TxIntrEPList
[i
].command
=
848 (IO_STATE(USB_EP_command
, eof
, yes
) |
849 IO_STATE(USB_EP_command
, enable
, yes
) |
850 IO_FIELD(USB_EP_command
, epid
, INVALID_EPID
));
851 TxIntrEPList
[i
].sub
= virt_to_phys(&TxIntrSB_zout
);
852 TxIntrEPList
[i
].next
= virt_to_phys(&TxIntrEPList
[i
+ 1]);
855 CHECK_ALIGN(&TxIntrEPList
[i
]);
856 TxIntrEPList
[i
].hw_len
= 0;
857 TxIntrEPList
[i
].command
=
858 (IO_STATE(USB_EP_command
, eof
, yes
) |
859 IO_STATE(USB_EP_command
, eol
, yes
) |
860 IO_STATE(USB_EP_command
, enable
, yes
) |
861 IO_FIELD(USB_EP_command
, epid
, INVALID_EPID
));
862 TxIntrEPList
[i
].sub
= virt_to_phys(&TxIntrSB_zout
);
863 TxIntrEPList
[i
].next
= virt_to_phys(&TxIntrEPList
[0]);
865 *R_DMA_CH8_SUB2_EP
= virt_to_phys(&TxIntrEPList
[0]);
866 *R_DMA_CH8_SUB2_CMD
= IO_STATE(R_DMA_CH8_SUB2_CMD
, cmd
, start
);
870 static void init_tx_isoc_ep(void)
876 /* Read comment at zout_buffer declaration for an explanation to this. */
877 TxIsocSB_zout
.sw_len
= 1;
878 TxIsocSB_zout
.next
= 0;
879 TxIsocSB_zout
.buf
= virt_to_phys(&zout_buffer
[0]);
880 TxIsocSB_zout
.command
= (IO_FIELD(USB_SB_command
, rem
, 0) |
881 IO_STATE(USB_SB_command
, tt
, zout
) |
882 IO_STATE(USB_SB_command
, full
, yes
) |
883 IO_STATE(USB_SB_command
, eot
, yes
) |
884 IO_STATE(USB_SB_command
, eol
, yes
));
886 /* The last isochronous EP descriptor is a dummy. */
888 for (i
= 0; i
< (NBR_OF_EPIDS
- 1); i
++) {
889 CHECK_ALIGN(&TxIsocEPList
[i
]);
890 TxIsocEPList
[i
].hw_len
= 0;
891 TxIsocEPList
[i
].command
= IO_FIELD(USB_EP_command
, epid
, i
);
892 TxIsocEPList
[i
].sub
= 0;
893 TxIsocEPList
[i
].next
= virt_to_phys(&TxIsocEPList
[i
+ 1]);
896 CHECK_ALIGN(&TxIsocEPList
[i
]);
897 TxIsocEPList
[i
].hw_len
= 0;
899 /* Must enable the last EP descr to get eof interrupt. */
900 TxIsocEPList
[i
].command
= (IO_STATE(USB_EP_command
, enable
, yes
) |
901 IO_STATE(USB_EP_command
, eof
, yes
) |
902 IO_STATE(USB_EP_command
, eol
, yes
) |
903 IO_FIELD(USB_EP_command
, epid
, INVALID_EPID
));
904 TxIsocEPList
[i
].sub
= virt_to_phys(&TxIsocSB_zout
);
905 TxIsocEPList
[i
].next
= virt_to_phys(&TxIsocEPList
[0]);
907 *R_DMA_CH8_SUB3_EP
= virt_to_phys(&TxIsocEPList
[0]);
908 *R_DMA_CH8_SUB3_CMD
= IO_STATE(R_DMA_CH8_SUB3_CMD
, cmd
, start
);
913 static void etrax_usb_unlink_intr_urb(struct urb
*urb
)
915 volatile USB_EP_Desc_t
*first_ep
; /* First EP in the list. */
916 volatile USB_EP_Desc_t
*curr_ep
; /* Current EP, the iterator. */
917 volatile USB_EP_Desc_t
*next_ep
; /* The EP after current. */
918 volatile USB_EP_Desc_t
*unlink_ep
; /* The one we should remove from the list. */
922 /* Read 8.8.4 in Designer's Reference, "Removing an EP Descriptor from the List". */
926 epid
= ((etrax_urb_priv_t
*)urb
->hcpriv
)->epid
;
928 first_ep
= &TxIntrEPList
[0];
932 /* Note that this loop removes all EP descriptors with this epid. This assumes
933 that all EP descriptors belong to the one and only urb for this epid. */
936 next_ep
= (USB_EP_Desc_t
*)phys_to_virt(curr_ep
->next
);
938 if (IO_EXTRACT(USB_EP_command
, epid
, next_ep
->command
) == epid
) {
940 dbg_intr("Found EP to unlink for epid %d", epid
);
942 /* This is the one we should unlink. */
945 /* Actually unlink the EP from the DMA list. */
946 curr_ep
->next
= unlink_ep
->next
;
948 /* Wait until the DMA is no longer at this descriptor. */
949 while (*R_DMA_CH8_SUB2_EP
== virt_to_phys(unlink_ep
));
951 /* Now we are free to remove it and its SB descriptor.
952 Note that it is assumed here that there is only one sb in the
953 sb list for this ep. */
954 kmem_cache_free(usb_desc_cache
, phys_to_virt(unlink_ep
->sub
));
955 kmem_cache_free(usb_desc_cache
, (USB_EP_Desc_t
*)unlink_ep
);
958 curr_ep
= phys_to_virt(curr_ep
->next
);
960 } while (curr_ep
!= first_ep
);
964 void etrax_usb_do_intr_recover(int epid
)
966 USB_EP_Desc_t
*first_ep
, *tmp_ep
;
970 first_ep
= (USB_EP_Desc_t
*)phys_to_virt(*R_DMA_CH8_SUB2_EP
);
973 /* What this does is simply to walk the list of interrupt
974 ep descriptors and enable those that are disabled. */
977 if (IO_EXTRACT(USB_EP_command
, epid
, tmp_ep
->command
) == epid
&&
978 !(tmp_ep
->command
& IO_MASK(USB_EP_command
, enable
))) {
979 tmp_ep
->command
|= IO_STATE(USB_EP_command
, enable
, yes
);
982 tmp_ep
= (USB_EP_Desc_t
*)phys_to_virt(tmp_ep
->next
);
984 } while (tmp_ep
!= first_ep
);
990 static int etrax_rh_unlink_urb (struct urb
*urb
)
996 hc
= urb
->dev
->bus
->hcpriv
;
998 if (hc
->rh
.urb
== urb
) {
1000 del_timer(&hc
->rh
.rh_int_timer
);
1007 static void etrax_rh_send_irq(struct urb
*urb
)
1010 etrax_hc_t
*hc
= urb
->dev
->bus
->hcpriv
;
1014 dbg_rh("R_USB_FM_NUMBER : 0x%08X", *R_USB_FM_NUMBER);
1015 dbg_rh("R_USB_FM_REMAINING: 0x%08X", *R_USB_FM_REMAINING);
1018 data
|= (hc
->rh
.wPortChange_1
) ? (1 << 1) : 0;
1019 data
|= (hc
->rh
.wPortChange_2
) ? (1 << 2) : 0;
1021 *((__u16
*)urb
->transfer_buffer
) = cpu_to_le16(data
);
1022 /* FIXME: Why is actual_length set to 1 when data is 2 bytes?
1023 Since only 1 byte is used, why not declare data as __u8? */
1024 urb
->actual_length
= 1;
1027 if (hc
->rh
.send
&& urb
->complete
) {
1028 dbg_rh("wPortChange_1: 0x%04X", hc
->rh
.wPortChange_1
);
1029 dbg_rh("wPortChange_2: 0x%04X", hc
->rh
.wPortChange_2
);
1031 urb
->complete(urb
, NULL
);
1037 static void etrax_rh_init_int_timer(struct urb
*urb
)
1043 hc
= urb
->dev
->bus
->hcpriv
;
1044 hc
->rh
.interval
= urb
->interval
;
1045 init_timer(&hc
->rh
.rh_int_timer
);
1046 hc
->rh
.rh_int_timer
.function
= etrax_rh_int_timer_do
;
1047 hc
->rh
.rh_int_timer
.data
= (unsigned long)urb
;
1048 /* FIXME: Is the jiffies resolution enough? All intervals < 10 ms will be mapped
1049 to 0, and the rest to the nearest lower 10 ms. */
1050 hc
->rh
.rh_int_timer
.expires
= jiffies
+ ((HZ
* hc
->rh
.interval
) / 1000);
1051 add_timer(&hc
->rh
.rh_int_timer
);
1056 static void etrax_rh_int_timer_do(unsigned long ptr
)
1063 urb
= (struct urb
*)ptr
;
1064 hc
= urb
->dev
->bus
->hcpriv
;
1067 etrax_rh_send_irq(urb
);
1073 static int etrax_usb_setup_epid(struct urb
*urb
)
1076 char devnum
, endpoint
, out_traffic
, slow
;
1078 unsigned long flags
;
1082 epid
= etrax_usb_lookup_epid(urb
);
1084 /* An epid that fits this urb has been found. */
1089 /* We must find and initiate a new epid for this urb. */
1090 epid
= etrax_usb_allocate_epid();
1093 /* Failed to allocate a new epid. */
1098 /* We now have a new epid to use. Initiate it. */
1099 set_bit(epid
, (void *)&epid_usage_bitmask
);
1101 devnum
= usb_pipedevice(urb
->pipe
);
1102 endpoint
= usb_pipeendpoint(urb
->pipe
);
1103 slow
= usb_pipeslow(urb
->pipe
);
1104 maxlen
= usb_maxpacket(urb
->dev
, urb
->pipe
, usb_pipeout(urb
->pipe
));
1105 if (usb_pipetype(urb
->pipe
) == PIPE_CONTROL
) {
1106 /* We want both IN and OUT control traffic to be put on the same EP/SB list. */
1109 out_traffic
= usb_pipeout(urb
->pipe
);
1115 *R_USB_EPT_INDEX
= IO_FIELD(R_USB_EPT_INDEX
, value
, epid
);
1118 if (usb_pipetype(urb
->pipe
) == PIPE_ISOCHRONOUS
) {
1119 *R_USB_EPT_DATA_ISO
= IO_STATE(R_USB_EPT_DATA_ISO
, valid
, yes
) |
1120 /* FIXME: Change any to the actual port? */
1121 IO_STATE(R_USB_EPT_DATA_ISO
, port
, any
) |
1122 IO_FIELD(R_USB_EPT_DATA_ISO
, max_len
, maxlen
) |
1123 IO_FIELD(R_USB_EPT_DATA_ISO
, ep
, endpoint
) |
1124 IO_FIELD(R_USB_EPT_DATA_ISO
, dev
, devnum
);
1126 *R_USB_EPT_DATA
= IO_STATE(R_USB_EPT_DATA
, valid
, yes
) |
1127 IO_FIELD(R_USB_EPT_DATA
, low_speed
, slow
) |
1128 /* FIXME: Change any to the actual port? */
1129 IO_STATE(R_USB_EPT_DATA
, port
, any
) |
1130 IO_FIELD(R_USB_EPT_DATA
, max_len
, maxlen
) |
1131 IO_FIELD(R_USB_EPT_DATA
, ep
, endpoint
) |
1132 IO_FIELD(R_USB_EPT_DATA
, dev
, devnum
);
1135 restore_flags(flags
);
1138 set_bit(epid
, (void *)&epid_out_traffic
);
1140 clear_bit(epid
, (void *)&epid_out_traffic
);
1143 dbg_epid("Setting up epid %d with devnum %d, endpoint %d and max_len %d (%s)",
1144 epid
, devnum
, endpoint
, maxlen
, out_traffic
? "OUT" : "IN");
1150 static void etrax_usb_free_epid(int epid
)
1152 unsigned long flags
;
1156 if (!test_bit(epid
, (void *)&epid_usage_bitmask
)) {
1157 warn("Trying to free unused epid %d", epid
);
1165 *R_USB_EPT_INDEX
= IO_FIELD(R_USB_EPT_INDEX
, value
, epid
);
1167 while (*R_USB_EPT_DATA
& IO_MASK(R_USB_EPT_DATA
, hold
));
1168 /* This will, among other things, set the valid field to 0. */
1169 *R_USB_EPT_DATA
= 0;
1170 restore_flags(flags
);
1172 clear_bit(epid
, (void *)&epid_usage_bitmask
);
1175 dbg_epid("Freed epid %d", epid
);
1180 static int etrax_usb_lookup_epid(struct urb
*urb
)
1184 char devnum
, endpoint
, slow
, out_traffic
;
1186 unsigned long flags
;
1190 devnum
= usb_pipedevice(urb
->pipe
);
1191 endpoint
= usb_pipeendpoint(urb
->pipe
);
1192 slow
= usb_pipeslow(urb
->pipe
);
1193 maxlen
= usb_maxpacket(urb
->dev
, urb
->pipe
, usb_pipeout(urb
->pipe
));
1194 if (usb_pipetype(urb
->pipe
) == PIPE_CONTROL
) {
1195 /* We want both IN and OUT control traffic to be put on the same EP/SB list. */
1198 out_traffic
= usb_pipeout(urb
->pipe
);
1201 /* Step through att epids. */
1202 for (i
= 0; i
< NBR_OF_EPIDS
; i
++) {
1203 if (test_bit(i
, (void *)&epid_usage_bitmask
) &&
1204 test_bit(i
, (void *)&epid_out_traffic
) == out_traffic
) {
1208 *R_USB_EPT_INDEX
= IO_FIELD(R_USB_EPT_INDEX
, value
, i
);
1211 if (usb_pipetype(urb
->pipe
) == PIPE_ISOCHRONOUS
) {
1212 data
= *R_USB_EPT_DATA_ISO
;
1213 restore_flags(flags
);
1215 if ((IO_MASK(R_USB_EPT_DATA_ISO
, valid
) & data
) &&
1216 (IO_EXTRACT(R_USB_EPT_DATA_ISO
, dev
, data
) == devnum
) &&
1217 (IO_EXTRACT(R_USB_EPT_DATA_ISO
, ep
, data
) == endpoint
) &&
1218 (IO_EXTRACT(R_USB_EPT_DATA_ISO
, max_len
, data
) == maxlen
)) {
1219 dbg_epid("Found epid %d for devnum %d, endpoint %d (%s)",
1220 i
, devnum
, endpoint
, out_traffic
? "OUT" : "IN");
1225 data
= *R_USB_EPT_DATA
;
1226 restore_flags(flags
);
1228 if ((IO_MASK(R_USB_EPT_DATA
, valid
) & data
) &&
1229 (IO_EXTRACT(R_USB_EPT_DATA
, dev
, data
) == devnum
) &&
1230 (IO_EXTRACT(R_USB_EPT_DATA
, ep
, data
) == endpoint
) &&
1231 (IO_EXTRACT(R_USB_EPT_DATA
, low_speed
, data
) == slow
) &&
1232 (IO_EXTRACT(R_USB_EPT_DATA
, max_len
, data
) == maxlen
)) {
1233 dbg_epid("Found epid %d for devnum %d, endpoint %d (%s)",
1234 i
, devnum
, endpoint
, out_traffic
? "OUT" : "IN");
1246 static int etrax_usb_allocate_epid(void)
1252 for (i
= 0; i
< NBR_OF_EPIDS
; i
++) {
1253 if (!test_bit(i
, (void *)&epid_usage_bitmask
)) {
1254 dbg_epid("Found free epid %d", i
);
1260 dbg_epid("Found no free epids");
1265 static int etrax_usb_submit_urb(struct urb
*urb
, int mem_flags
)
1272 if (!urb
->dev
|| !urb
->dev
->bus
) {
1275 if (usb_maxpacket(urb
->dev
, urb
->pipe
, usb_pipeout(urb
->pipe
)) <= 0) {
1276 info("Submit urb to pipe with maxpacketlen 0, pipe 0x%X\n", urb
->pipe
);
1282 warn("urb->timeout specified, ignoring.");
1285 hc
= (etrax_hc_t
*)urb
->dev
->bus
->hcpriv
;
1287 if (usb_pipedevice(urb
->pipe
) == hc
->rh
.devnum
) {
1288 /* This request is for the Virtual Root Hub. */
1289 ret
= etrax_rh_submit_urb(urb
);
1291 } else if (usb_pipetype(urb
->pipe
) == PIPE_BULK
) {
1293 ret
= etrax_usb_submit_bulk_urb(urb
);
1295 } else if (usb_pipetype(urb
->pipe
) == PIPE_CONTROL
) {
1297 ret
= etrax_usb_submit_ctrl_urb(urb
);
1299 } else if (usb_pipetype(urb
->pipe
) == PIPE_INTERRUPT
) {
1302 if (urb
->bandwidth
== 0) {
1303 bustime
= usb_check_bandwidth(urb
->dev
, urb
);
1307 ret
= etrax_usb_submit_intr_urb(urb
);
1309 usb_claim_bandwidth(urb
->dev
, urb
, bustime
, 0);
1312 /* Bandwidth already set. */
1313 ret
= etrax_usb_submit_intr_urb(urb
);
1316 } else if (usb_pipetype(urb
->pipe
) == PIPE_ISOCHRONOUS
) {
1319 if (urb
->bandwidth
== 0) {
1320 bustime
= usb_check_bandwidth(urb
->dev
, urb
);
1324 ret
= etrax_usb_submit_isoc_urb(urb
);
1326 usb_claim_bandwidth(urb
->dev
, urb
, bustime
, 0);
1329 /* Bandwidth already set. */
1330 ret
= etrax_usb_submit_isoc_urb(urb
);
1337 printk("Submit URB error %d\n", ret
);
1342 static int etrax_usb_unlink_urb(struct urb
*urb
, int status
)
1345 etrax_urb_priv_t
*urb_priv
;
1355 /* Disable interrupts here since a descriptor interrupt for the isoc epid
1356 will modify the sb list. This could possibly be done more granular, but
1357 unlink_urb should not be used frequently anyway.
1363 if (!urb
->dev
|| !urb
->dev
->bus
) {
1364 restore_flags(flags
);
1368 /* This happens if a device driver calls unlink on an urb that
1369 was never submitted (lazy driver) or if the urb was completed
1370 while unlink was being called. */
1371 restore_flags(flags
);
1374 if (urb
->transfer_flags
& URB_ASYNC_UNLINK
) {
1376 /* If URB_ASYNC_UNLINK is set:
1378 move to a separate urb list
1379 call complete at next sof with ECONNRESET
1384 call complete with ENOENT
1386 warn("URB_ASYNC_UNLINK set, ignoring.");
1389 /* One might think that urb->status = -EINPROGRESS would be a requirement for unlinking,
1390 but that doesn't work for interrupt and isochronous traffic since they are completed
1391 repeatedly, and urb->status is set then. That may in itself be a bug though. */
1393 hc
= urb
->dev
->bus
->hcpriv
;
1394 urb_priv
= (etrax_urb_priv_t
*)urb
->hcpriv
;
1395 epid
= urb_priv
->epid
;
1397 /* Set the urb status (synchronous unlink). */
1398 urb
->status
= -ENOENT
;
1399 urb_priv
->urb_state
= UNLINK
;
1401 if (usb_pipedevice(urb
->pipe
) == hc
->rh
.devnum
) {
1403 ret
= etrax_rh_unlink_urb(urb
);
1405 restore_flags(flags
);
1408 } else if (usb_pipetype(urb
->pipe
) == PIPE_BULK
) {
1410 dbg_bulk("Unlink of bulk urb (0x%lx)", (unsigned long)urb
);
1412 if (TxBulkEPList
[epid
].command
& IO_MASK(USB_EP_command
, enable
)) {
1413 /* The EP was enabled, disable it and wait. */
1414 TxBulkEPList
[epid
].command
&= ~IO_MASK(USB_EP_command
, enable
);
1416 /* Ah, the luxury of busy-wait. */
1417 while (*R_DMA_CH8_SUB0_EP
== virt_to_phys(&TxBulkEPList
[epid
]));
1419 /* Kicking dummy list out of the party. */
1420 TxBulkEPList
[epid
].next
= virt_to_phys(&TxBulkEPList
[(epid
+ 1) % NBR_OF_EPIDS
]);
1422 } else if (usb_pipetype(urb
->pipe
) == PIPE_CONTROL
) {
1424 dbg_ctrl("Unlink of ctrl urb (0x%lx)", (unsigned long)urb
);
1426 if (TxCtrlEPList
[epid
].command
& IO_MASK(USB_EP_command
, enable
)) {
1427 /* The EP was enabled, disable it and wait. */
1428 TxCtrlEPList
[epid
].command
&= ~IO_MASK(USB_EP_command
, enable
);
1430 /* Ah, the luxury of busy-wait. */
1431 while (*R_DMA_CH8_SUB1_EP
== virt_to_phys(&TxCtrlEPList
[epid
]));
1434 } else if (usb_pipetype(urb
->pipe
) == PIPE_INTERRUPT
) {
1436 dbg_intr("Unlink of intr urb (0x%lx)", (unsigned long)urb
);
1438 /* Separate function because it's a tad more complicated. */
1439 etrax_usb_unlink_intr_urb(urb
);
1441 } else if (usb_pipetype(urb
->pipe
) == PIPE_ISOCHRONOUS
) {
1443 dbg_isoc("Unlink of isoc urb (0x%lx)", (unsigned long)urb
);
1445 if (TxIsocEPList
[epid
].command
& IO_MASK(USB_EP_command
, enable
)) {
1446 /* The EP was enabled, disable it and wait. */
1447 TxIsocEPList
[epid
].command
&= ~IO_MASK(USB_EP_command
, enable
);
1449 /* Ah, the luxury of busy-wait. */
1450 while (*R_DMA_CH8_SUB3_EP
== virt_to_phys(&TxIsocEPList
[epid
]));
1454 /* Note that we need to remove the urb from the urb list *before* removing its SB
1455 descriptors. (This means that the isoc eof handler might get a null urb when we
1456 are unlinking the last urb.) */
1458 if (usb_pipetype(urb
->pipe
) == PIPE_BULK
) {
1460 urb_list_del(urb
, epid
);
1461 TxBulkEPList
[epid
].sub
= 0;
1462 etrax_remove_from_sb_list(urb
);
1464 } else if (usb_pipetype(urb
->pipe
) == PIPE_CONTROL
) {
1466 urb_list_del(urb
, epid
);
1467 TxCtrlEPList
[epid
].sub
= 0;
1468 etrax_remove_from_sb_list(urb
);
1470 } else if (usb_pipetype(urb
->pipe
) == PIPE_INTERRUPT
) {
1472 urb_list_del(urb
, epid
);
1473 /* Sanity check (should never happen). */
1474 assert(urb_list_empty(epid
));
1476 /* Release allocated bandwidth. */
1477 usb_release_bandwidth(urb
->dev
, urb
, 0);
1479 } else if (usb_pipetype(urb
->pipe
) == PIPE_ISOCHRONOUS
) {
1481 if (usb_pipeout(urb
->pipe
)) {
1483 USB_SB_Desc_t
*iter_sb
, *prev_sb
, *next_sb
;
1485 if (__urb_list_entry(urb
, epid
)) {
1487 urb_list_del(urb
, epid
);
1488 iter_sb
= TxIsocEPList
[epid
].sub
? phys_to_virt(TxIsocEPList
[epid
].sub
) : 0;
1490 while (iter_sb
&& (iter_sb
!= urb_priv
->first_sb
)) {
1492 iter_sb
= iter_sb
->next
? phys_to_virt(iter_sb
->next
) : 0;
1496 /* Unlink of the URB currently being transmitted. */
1498 iter_sb
= TxIsocEPList
[epid
].sub
? phys_to_virt(TxIsocEPList
[epid
].sub
) : 0;
1501 while (iter_sb
&& (iter_sb
!= urb_priv
->last_sb
)) {
1502 iter_sb
= iter_sb
->next
? phys_to_virt(iter_sb
->next
) : 0;
1505 next_sb
= iter_sb
->next
? phys_to_virt(iter_sb
->next
) : 0;
1507 /* This should only happen if the DMA has completed
1508 processing the SB list for this EP while interrupts
1510 dbg_isoc("Isoc urb not found, already sent?");
1514 prev_sb
->next
= next_sb
? virt_to_phys(next_sb
) : 0;
1516 TxIsocEPList
[epid
].sub
= next_sb
? virt_to_phys(next_sb
) : 0;
1519 etrax_remove_from_sb_list(urb
);
1520 if (urb_list_empty(epid
)) {
1521 TxIsocEPList
[epid
].sub
= 0;
1522 dbg_isoc("Last isoc out urb epid %d", epid
);
1523 } else if (next_sb
|| prev_sb
) {
1524 dbg_isoc("Re-enable isoc out epid %d", epid
);
1526 TxIsocEPList
[epid
].hw_len
= 0;
1527 TxIsocEPList
[epid
].command
|= IO_STATE(USB_EP_command
, enable
, yes
);
1529 TxIsocEPList
[epid
].sub
= 0;
1530 dbg_isoc("URB list non-empty and no SB list, EP disabled");
1533 dbg_isoc("Urb 0x%p not found, completed already?", urb
);
1537 urb_list_del(urb
, epid
);
1539 /* For in traffic there is only one SB descriptor for each EP even
1540 though there may be several urbs (all urbs point at the same SB). */
1541 if (urb_list_empty(epid
)) {
1542 /* No more urbs, remove the SB. */
1543 TxIsocEPList
[epid
].sub
= 0;
1544 etrax_remove_from_sb_list(urb
);
1546 TxIsocEPList
[epid
].hw_len
= 0;
1547 TxIsocEPList
[epid
].command
|= IO_STATE(USB_EP_command
, enable
, yes
);
1550 /* Release allocated bandwidth. */
1551 usb_release_bandwidth(urb
->dev
, urb
, 1);
1553 /* Free the epid if urb list is empty. */
1554 if (urb_list_empty(epid
)) {
1555 etrax_usb_free_epid(epid
);
1557 restore_flags(flags
);
1559 /* Must be done before calling completion handler. */
1563 if (urb
->complete
) {
1564 urb
->complete(urb
, NULL
);
1571 static int etrax_usb_get_frame_number(struct usb_device
*usb_dev
)
1575 return (*R_USB_FM_NUMBER
& 0x7ff);
1578 static irqreturn_t
etrax_usb_tx_interrupt(int irq
, void *vhc
, struct pt_regs
*regs
)
1582 /* This interrupt handler could be used when unlinking EP descriptors. */
1584 if (*R_IRQ_READ2
& IO_MASK(R_IRQ_READ2
, dma8_sub0_descr
)) {
1587 //dbg_bulk("dma8_sub0_descr (BULK) intr.");
1589 /* It should be safe clearing the interrupt here, since we don't expect to get a new
1590 one until we restart the bulk channel. */
1591 *R_DMA_CH8_SUB0_CLR_INTR
= IO_STATE(R_DMA_CH8_SUB0_CLR_INTR
, clr_descr
, do);
1593 /* Wait while the DMA is running (though we don't expect it to be). */
1594 while (*R_DMA_CH8_SUB0_CMD
& IO_MASK(R_DMA_CH8_SUB0_CMD
, cmd
));
1596 /* Advance the DMA to the next EP descriptor. */
1597 ep
= (USB_EP_Desc_t
*)phys_to_virt(*R_DMA_CH8_SUB0_EP
);
1599 //dbg_bulk("descr intr: DMA is at 0x%lx", (unsigned long)ep);
1601 /* ep->next is already a physical address; no need for a virt_to_phys. */
1602 *R_DMA_CH8_SUB0_EP
= ep
->next
;
1604 /* Start the DMA bulk channel again. */
1605 *R_DMA_CH8_SUB0_CMD
= IO_STATE(R_DMA_CH8_SUB0_CMD
, cmd
, start
);
1607 if (*R_IRQ_READ2
& IO_MASK(R_IRQ_READ2
, dma8_sub1_descr
)) {
1610 etrax_urb_priv_t
*urb_priv
;
1611 unsigned long int flags
;
1613 dbg_ctrl("dma8_sub1_descr (CTRL) intr.");
1614 *R_DMA_CH8_SUB1_CLR_INTR
= IO_STATE(R_DMA_CH8_SUB1_CLR_INTR
, clr_descr
, do);
1616 /* The complete callback gets called so we cli. */
1620 for (epid
= 0; epid
< NBR_OF_EPIDS
- 1; epid
++) {
1621 if ((TxCtrlEPList
[epid
].sub
== 0) ||
1622 (epid
== DUMMY_EPID
) ||
1623 (epid
== INVALID_EPID
)) {
1624 /* Nothing here to see. */
1628 /* Get the first urb (if any). */
1629 urb
= urb_list_first(epid
);
1634 assert(usb_pipetype(urb
->pipe
) == PIPE_CONTROL
);
1636 urb_priv
= (etrax_urb_priv_t
*)urb
->hcpriv
;
1639 if (urb_priv
->urb_state
== WAITING_FOR_DESCR_INTR
) {
1640 assert(!(TxCtrlEPList
[urb_priv
->epid
].command
& IO_MASK(USB_EP_command
, enable
)));
1642 etrax_usb_complete_urb(urb
, 0);
1646 restore_flags(flags
);
1648 if (*R_IRQ_READ2
& IO_MASK(R_IRQ_READ2
, dma8_sub2_descr
)) {
1649 dbg_intr("dma8_sub2_descr (INTR) intr.");
1650 *R_DMA_CH8_SUB2_CLR_INTR
= IO_STATE(R_DMA_CH8_SUB2_CLR_INTR
, clr_descr
, do);
1652 if (*R_IRQ_READ2
& IO_MASK(R_IRQ_READ2
, dma8_sub3_descr
)) {
1656 etrax_urb_priv_t
*urb_priv
;
1657 USB_SB_Desc_t
*sb_desc
;
1659 usb_isoc_complete_data_t
*comp_data
= NULL
;
1661 /* One or more isoc out transfers are done. */
1662 dbg_isoc("dma8_sub3_descr (ISOC) intr.");
1664 /* For each isoc out EP search for the first sb_desc with the intr flag
1665 set. This descriptor must be the last packet from an URB. Then
1666 traverse the URB list for the EP until the URB with urb_priv->last_sb
1667 matching the intr-marked sb_desc is found. All URBs before this have
1671 for (epid
= 0; epid
< NBR_OF_EPIDS
- 1; epid
++) {
1672 /* Skip past epids with no SB lists, epids used for in traffic,
1673 and special (dummy, invalid) epids. */
1674 if ((TxIsocEPList
[epid
].sub
== 0) ||
1675 (test_bit(epid
, (void *)&epid_out_traffic
) == 0) ||
1676 (epid
== DUMMY_EPID
) ||
1677 (epid
== INVALID_EPID
)) {
1678 /* Nothing here to see. */
1681 sb_desc
= phys_to_virt(TxIsocEPList
[epid
].sub
);
1683 /* Find the last descriptor of the currently active URB for this ep.
1684 This is the first descriptor in the sub list marked for a descriptor
1686 while (sb_desc
&& !IO_EXTRACT(USB_SB_command
, intr
, sb_desc
->command
)) {
1687 sb_desc
= sb_desc
->next
? phys_to_virt(sb_desc
->next
) : 0;
1691 dbg_isoc("Check epid %d, sub 0x%p, SB 0x%p",
1693 phys_to_virt(TxIsocEPList
[epid
].sub
),
1698 /* Get the first urb (if any). */
1699 urb
= urb_list_first(epid
);
1702 while (urb
&& !epid_done
) {
1705 assert(usb_pipetype(urb
->pipe
) == PIPE_ISOCHRONOUS
);
1707 if (!usb_pipeout(urb
->pipe
)) {
1708 /* descr interrupts are generated only for out pipes. */
1713 urb_priv
= (etrax_urb_priv_t
*)urb
->hcpriv
;
1716 if (sb_desc
!= urb_priv
->last_sb
) {
1718 /* This urb has been sent. */
1719 dbg_isoc("out URB 0x%p sent", urb
);
1721 urb_priv
->urb_state
= TRANSFER_DONE
;
1723 } else if ((sb_desc
== urb_priv
->last_sb
) &&
1724 !(TxIsocEPList
[epid
].command
& IO_MASK(USB_EP_command
, enable
))) {
1726 assert((sb_desc
->command
& IO_MASK(USB_SB_command
, eol
)) == IO_STATE(USB_SB_command
, eol
, yes
));
1727 assert(sb_desc
->next
== 0);
1729 dbg_isoc("out URB 0x%p last in list, epid disabled", urb
);
1730 TxIsocEPList
[epid
].sub
= 0;
1731 TxIsocEPList
[epid
].hw_len
= 0;
1732 urb_priv
->urb_state
= TRANSFER_DONE
;
1740 urb
= urb_list_next(urb
, epid
);
1746 *R_DMA_CH8_SUB3_CLR_INTR
= IO_STATE(R_DMA_CH8_SUB3_CLR_INTR
, clr_descr
, do);
1748 comp_data
= (usb_isoc_complete_data_t
*)kmem_cache_alloc(isoc_compl_cache
, SLAB_ATOMIC
);
1749 assert(comp_data
!= NULL
);
1751 INIT_WORK(&comp_data
->usb_bh
, etrax_usb_isoc_descr_interrupt_bottom_half
, comp_data
);
1752 schedule_work(&comp_data
->usb_bh
);
1759 static void etrax_usb_isoc_descr_interrupt_bottom_half(void *data
)
1761 usb_isoc_complete_data_t
*comp_data
= (usb_isoc_complete_data_t
*)data
;
1766 etrax_urb_priv_t
*urb_priv
;
1770 dbg_isoc("dma8_sub3_descr (ISOC) bottom half.");
1772 for (epid
= 0; epid
< NBR_OF_EPIDS
- 1; epid
++) {
1773 unsigned long flags
;
1780 /* The descriptor interrupt handler has marked all transmitted isoch. out
1781 URBs with TRANSFER_DONE. Now we traverse all epids and for all that
1782 have isoch. out traffic traverse its URB list and complete the
1786 while (!epid_done
) {
1788 /* Get the first urb (if any). */
1789 urb
= urb_list_first(epid
);
1795 if (usb_pipetype(urb
->pipe
) != PIPE_ISOCHRONOUS
) {
1800 if (!usb_pipeout(urb
->pipe
)) {
1801 /* descr interrupts are generated only for out pipes. */
1806 dbg_isoc("Check epid %d, SB 0x%p", epid
, (char*)TxIsocEPList
[epid
].sub
);
1808 urb_priv
= (etrax_urb_priv_t
*)urb
->hcpriv
;
1811 if (urb_priv
->urb_state
== TRANSFER_DONE
) {
1813 struct usb_iso_packet_descriptor
*packet
;
1815 /* This urb has been sent. */
1816 dbg_isoc("Completing isoc out URB 0x%p", urb
);
1818 for (i
= 0; i
< urb
->number_of_packets
; i
++) {
1819 packet
= &urb
->iso_frame_desc
[i
];
1821 packet
->actual_length
= packet
->length
;
1824 etrax_usb_complete_isoc_urb(urb
, 0);
1826 if (urb_list_empty(epid
)) {
1827 etrax_usb_free_epid(epid
);
1834 restore_flags(flags
);
1837 kmem_cache_free(isoc_compl_cache
, comp_data
);
1844 static irqreturn_t
etrax_usb_rx_interrupt(int irq
, void *vhc
, struct pt_regs
*regs
)
1847 etrax_urb_priv_t
*urb_priv
;
1849 unsigned long flags
;
1851 /* Isoc diagnostics. */
1852 static int curr_fm
= 0;
1853 static int prev_fm
= 0;
1857 /* Clear this interrupt. */
1858 *R_DMA_CH9_CLR_INTR
= IO_STATE(R_DMA_CH9_CLR_INTR
, clr_eop
, do);
1860 /* Note that this while loop assumes that all packets span only
1861 one rx descriptor. */
1863 /* The reason we cli here is that we call the driver's callback functions. */
1867 while (myNextRxDesc
->status
& IO_MASK(USB_IN_status
, eop
)) {
1869 epid
= IO_EXTRACT(USB_IN_status
, epid
, myNextRxDesc
->status
);
1870 urb
= urb_list_first(epid
);
1872 //printk("eop for epid %d, first urb 0x%lx\n", epid, (unsigned long)urb);
1875 err("No urb for epid %d in rx interrupt", epid
);
1876 __dump_ept_data(epid
);
1880 /* Note that we cannot indescriminately assert(usb_pipein(urb->pipe)) since
1881 ctrl pipes are not. */
1883 if (myNextRxDesc
->status
& IO_MASK(USB_IN_status
, error
)) {
1884 __u32 r_usb_ept_data
;
1887 assert(test_bit(epid
, (void *)&epid_usage_bitmask
));
1889 *R_USB_EPT_INDEX
= IO_FIELD(R_USB_EPT_INDEX
, value
, epid
);
1891 if (usb_pipetype(urb
->pipe
) == PIPE_ISOCHRONOUS
) {
1892 r_usb_ept_data
= *R_USB_EPT_DATA_ISO
;
1894 if ((r_usb_ept_data
& IO_MASK(R_USB_EPT_DATA_ISO
, valid
)) &&
1895 (IO_EXTRACT(R_USB_EPT_DATA_ISO
, error_code
, r_usb_ept_data
) == 0) &&
1896 (myNextRxDesc
->status
& IO_MASK(USB_IN_status
, nodata
))) {
1897 /* Not an error, just a failure to receive an expected iso
1898 in packet in this frame. This is not documented
1899 in the designers reference.
1903 warn("R_USB_EPT_DATA_ISO for epid %d = 0x%x", epid
, r_usb_ept_data
);
1906 r_usb_ept_data
= *R_USB_EPT_DATA
;
1907 warn("R_USB_EPT_DATA for epid %d = 0x%x", epid
, r_usb_ept_data
);
1911 warn("error in rx desc->status, epid %d, first urb = 0x%lx",
1912 epid
, (unsigned long)urb
);
1913 __dump_in_desc(myNextRxDesc
);
1915 warn("R_USB_STATUS = 0x%x", *R_USB_STATUS
);
1917 /* Check that ept was disabled when error occurred. */
1918 switch (usb_pipetype(urb
->pipe
)) {
1920 assert(!(TxBulkEPList
[epid
].command
& IO_MASK(USB_EP_command
, enable
)));
1923 assert(!(TxCtrlEPList
[epid
].command
& IO_MASK(USB_EP_command
, enable
)));
1925 case PIPE_INTERRUPT
:
1926 assert(!(TxIntrEPList
[epid
].command
& IO_MASK(USB_EP_command
, enable
)));
1928 case PIPE_ISOCHRONOUS
:
1929 assert(!(TxIsocEPList
[epid
].command
& IO_MASK(USB_EP_command
, enable
)));
1932 warn("etrax_usb_rx_interrupt: bad pipetype %d in urb 0x%p",
1933 usb_pipetype(urb
->pipe
),
1936 etrax_usb_complete_urb(urb
, -EPROTO
);
1941 urb_priv
= (etrax_urb_priv_t
*)urb
->hcpriv
;
1944 if ((usb_pipetype(urb
->pipe
) == PIPE_BULK
) ||
1945 (usb_pipetype(urb
->pipe
) == PIPE_CONTROL
) ||
1946 (usb_pipetype(urb
->pipe
) == PIPE_INTERRUPT
)) {
1948 if (myNextRxDesc
->status
& IO_MASK(USB_IN_status
, nodata
)) {
1949 /* We get nodata for empty data transactions, and the rx descriptor's
1950 hw_len field is not valid in that case. No data to copy in other
1953 /* Make sure the data fits in the buffer. */
1954 assert(urb_priv
->rx_offset
+ myNextRxDesc
->hw_len
1955 <= urb
->transfer_buffer_length
);
1957 memcpy(urb
->transfer_buffer
+ urb_priv
->rx_offset
,
1958 phys_to_virt(myNextRxDesc
->buf
), myNextRxDesc
->hw_len
);
1959 urb_priv
->rx_offset
+= myNextRxDesc
->hw_len
;
1962 if (myNextRxDesc
->status
& IO_MASK(USB_IN_status
, eot
)) {
1963 if ((usb_pipetype(urb
->pipe
) == PIPE_CONTROL
) &&
1964 ((TxCtrlEPList
[urb_priv
->epid
].command
& IO_MASK(USB_EP_command
, enable
)) ==
1965 IO_STATE(USB_EP_command
, enable
, yes
))) {
1966 /* The EP is still enabled, so the OUT packet used to ack
1967 the in data is probably not processed yet. If the EP
1968 sub pointer has not moved beyond urb_priv->last_sb mark
1969 it for a descriptor interrupt and complete the urb in
1970 the descriptor interrupt handler.
1972 USB_SB_Desc_t
*sub
= TxCtrlEPList
[urb_priv
->epid
].sub
? phys_to_virt(TxCtrlEPList
[urb_priv
->epid
].sub
) : 0;
1974 while ((sub
!= NULL
) && (sub
!= urb_priv
->last_sb
)) {
1975 sub
= sub
->next
? phys_to_virt(sub
->next
) : 0;
1978 /* The urb has not been fully processed. */
1979 urb_priv
->urb_state
= WAITING_FOR_DESCR_INTR
;
1981 warn("(CTRL) epid enabled and urb (0x%p) processed, ep->sub=0x%p", urb
, (char*)TxCtrlEPList
[urb_priv
->epid
].sub
);
1982 etrax_usb_complete_urb(urb
, 0);
1985 etrax_usb_complete_urb(urb
, 0);
1989 } else if (usb_pipetype(urb
->pipe
) == PIPE_ISOCHRONOUS
) {
1991 struct usb_iso_packet_descriptor
*packet
;
1993 if (urb_priv
->urb_state
== UNLINK
) {
1994 info("Ignoring rx data for urb being unlinked.");
1996 } else if (urb_priv
->urb_state
== NOT_STARTED
) {
1997 info("What? Got rx data for urb that isn't started?");
2001 packet
= &urb
->iso_frame_desc
[urb_priv
->isoc_packet_counter
];
2004 if (myNextRxDesc
->status
& IO_MASK(USB_IN_status
, nodata
)) {
2005 /* We get nodata for empty data transactions, and the rx descriptor's
2006 hw_len field is not valid in that case. We copy 0 bytes however to
2008 packet
->actual_length
= 0;
2010 packet
->actual_length
= myNextRxDesc
->hw_len
;
2011 /* Make sure the data fits in the buffer. */
2012 assert(packet
->actual_length
<= packet
->length
);
2013 memcpy(urb
->transfer_buffer
+ packet
->offset
,
2014 phys_to_virt(myNextRxDesc
->buf
), packet
->actual_length
);
2017 /* Increment the packet counter. */
2018 urb_priv
->isoc_packet_counter
++;
2020 /* Note that we don't care about the eot field in the rx descriptor's status.
2021 It will always be set for isoc traffic. */
2022 if (urb
->number_of_packets
== urb_priv
->isoc_packet_counter
) {
2024 /* Out-of-synch diagnostics. */
2025 curr_fm
= (*R_USB_FM_NUMBER
& 0x7ff);
2026 if (((prev_fm
+ urb_priv
->isoc_packet_counter
) % (0x7ff + 1)) != curr_fm
) {
2027 /* This test is wrong, if there is more than one isoc
2028 in endpoint active it will always calculate wrong
2029 since prev_fm is shared by all endpoints.
2031 FIXME Make this check per URB using urb->start_frame.
2033 dbg_isoc("Out of synch? Previous frame = %d, current frame = %d",
2039 /* Complete the urb with status OK. */
2040 etrax_usb_complete_isoc_urb(urb
, 0);
2046 /* DMA IN cache bug. Flush the DMA IN buffer from the cache. (struct etrax_dma_descr
2047 has the same layout as USB_IN_Desc for the relevant fields.) */
2048 prepare_rx_descriptor((struct etrax_dma_descr
*)myNextRxDesc
);
2050 myPrevRxDesc
= myNextRxDesc
;
2051 myPrevRxDesc
->command
|= IO_MASK(USB_IN_command
, eol
);
2052 myLastRxDesc
->command
&= ~IO_MASK(USB_IN_command
, eol
);
2053 myLastRxDesc
= myPrevRxDesc
;
2055 myNextRxDesc
->status
= 0;
2056 myNextRxDesc
= phys_to_virt(myNextRxDesc
->next
);
2059 restore_flags(flags
);
2067 /* This function will unlink the SB descriptors associated with this urb. */
2068 static int etrax_remove_from_sb_list(struct urb
*urb
)
2070 USB_SB_Desc_t
*next_sb
, *first_sb
, *last_sb
;
2071 etrax_urb_priv_t
*urb_priv
;
2076 urb_priv
= (etrax_urb_priv_t
*)urb
->hcpriv
;
2079 /* Just a sanity check. Since we don't fiddle with the DMA list the EP descriptor
2080 doesn't really need to be disabled, it's just that we expect it to be. */
2081 if (usb_pipetype(urb
->pipe
) == PIPE_BULK
) {
2082 assert(!(TxBulkEPList
[urb_priv
->epid
].command
& IO_MASK(USB_EP_command
, enable
)));
2083 } else if (usb_pipetype(urb
->pipe
) == PIPE_CONTROL
) {
2084 assert(!(TxCtrlEPList
[urb_priv
->epid
].command
& IO_MASK(USB_EP_command
, enable
)));
2087 first_sb
= urb_priv
->first_sb
;
2088 last_sb
= urb_priv
->last_sb
;
2093 while (first_sb
!= last_sb
) {
2094 next_sb
= (USB_SB_Desc_t
*)phys_to_virt(first_sb
->next
);
2095 kmem_cache_free(usb_desc_cache
, first_sb
);
2099 kmem_cache_free(usb_desc_cache
, last_sb
);
2101 dbg_sb("%d SB descriptors freed", i
);
2102 /* Compare i with urb->number_of_packets for Isoc traffic.
2103 Should be same when calling unlink_urb */
2110 static int etrax_usb_submit_bulk_urb(struct urb
*urb
)
2114 unsigned long flags
;
2115 etrax_urb_priv_t
*urb_priv
;
2119 /* Epid allocation, empty check and list add must be protected.
2120 Read about this in etrax_usb_submit_ctrl_urb. */
2122 spin_lock_irqsave(&urb_list_lock
, flags
);
2123 epid
= etrax_usb_setup_epid(urb
);
2126 spin_unlock_irqrestore(&urb_list_lock
, flags
);
2129 empty
= urb_list_empty(epid
);
2130 urb_list_add(urb
, epid
);
2131 spin_unlock_irqrestore(&urb_list_lock
, flags
);
2133 dbg_bulk("Adding bulk %s urb 0x%lx to %s list, epid %d",
2134 usb_pipein(urb
->pipe
) ? "IN" : "OUT", (unsigned long)urb
, empty
? "empty" : "", epid
);
2136 /* Mark the urb as being in progress. */
2137 urb
->status
= -EINPROGRESS
;
2139 /* Setup the hcpriv data. */
2140 urb_priv
= kmalloc(sizeof(etrax_urb_priv_t
), KMALLOC_FLAG
);
2141 assert(urb_priv
!= NULL
);
2142 /* This sets rx_offset to 0. */
2143 memset(urb_priv
, 0, sizeof(etrax_urb_priv_t
));
2144 urb_priv
->urb_state
= NOT_STARTED
;
2145 urb
->hcpriv
= urb_priv
;
2148 etrax_usb_add_to_bulk_sb_list(urb
, epid
);
2156 static void etrax_usb_add_to_bulk_sb_list(struct urb
*urb
, int epid
)
2158 USB_SB_Desc_t
*sb_desc
;
2159 etrax_urb_priv_t
*urb_priv
= (etrax_urb_priv_t
*)urb
->hcpriv
;
2160 unsigned long flags
;
2165 dbg_bulk("etrax_usb_add_to_bulk_sb_list, urb 0x%lx", (unsigned long)urb
);
2167 maxlen
= usb_maxpacket(urb
->dev
, urb
->pipe
, usb_pipeout(urb
->pipe
));
2169 sb_desc
= (USB_SB_Desc_t
*)kmem_cache_alloc(usb_desc_cache
, SLAB_FLAG
);
2170 assert(sb_desc
!= NULL
);
2171 memset(sb_desc
, 0, sizeof(USB_SB_Desc_t
));
2174 if (usb_pipeout(urb
->pipe
)) {
2176 dbg_bulk("Grabbing bulk OUT, urb 0x%lx, epid %d", (unsigned long)urb
, epid
);
2178 /* This is probably a sanity check of the bulk transaction length
2179 not being larger than 64 kB. */
2180 if (urb
->transfer_buffer_length
> 0xffff) {
2181 panic("urb->transfer_buffer_length > 0xffff");
2184 sb_desc
->sw_len
= urb
->transfer_buffer_length
;
2186 /* The rem field is don't care if it's not a full-length transfer, so setting
2187 it shouldn't hurt. Also, rem isn't used for OUT traffic. */
2188 sb_desc
->command
= (IO_FIELD(USB_SB_command
, rem
, 0) |
2189 IO_STATE(USB_SB_command
, tt
, out
) |
2190 IO_STATE(USB_SB_command
, eot
, yes
) |
2191 IO_STATE(USB_SB_command
, eol
, yes
));
2193 /* The full field is set to yes, even if we don't actually check that this is
2194 a full-length transfer (i.e., that transfer_buffer_length % maxlen = 0).
2195 Setting full prevents the USB controller from sending an empty packet in
2196 that case. However, if URB_ZERO_PACKET was set we want that. */
2197 if (!(urb
->transfer_flags
& URB_ZERO_PACKET
)) {
2198 sb_desc
->command
|= IO_STATE(USB_SB_command
, full
, yes
);
2201 sb_desc
->buf
= virt_to_phys(urb
->transfer_buffer
);
2204 } else if (usb_pipein(urb
->pipe
)) {
2206 dbg_bulk("Grabbing bulk IN, urb 0x%lx, epid %d", (unsigned long)urb
, epid
);
2208 sb_desc
->sw_len
= urb
->transfer_buffer_length
?
2209 (urb
->transfer_buffer_length
- 1) / maxlen
+ 1 : 0;
2211 /* The rem field is don't care if it's not a full-length transfer, so setting
2212 it shouldn't hurt. */
2214 (IO_FIELD(USB_SB_command
, rem
,
2215 urb
->transfer_buffer_length
% maxlen
) |
2216 IO_STATE(USB_SB_command
, tt
, in
) |
2217 IO_STATE(USB_SB_command
, eot
, yes
) |
2218 IO_STATE(USB_SB_command
, eol
, yes
));
2224 urb_priv
->first_sb
= sb_desc
;
2225 urb_priv
->last_sb
= sb_desc
;
2226 urb_priv
->epid
= epid
;
2228 urb
->hcpriv
= urb_priv
;
2230 /* Reset toggle bits and reset error count. */
2234 *R_USB_EPT_INDEX
= IO_FIELD(R_USB_EPT_INDEX
, value
, epid
);
2237 /* FIXME: Is this a special case since the hold field is checked,
2238 or should we check hold in a lot of other cases as well? */
2239 if (*R_USB_EPT_DATA
& IO_MASK(R_USB_EPT_DATA
, hold
)) {
2240 panic("Hold was set in %s", __FUNCTION__
);
2243 /* Reset error counters (regardless of which direction this traffic is). */
2245 ~(IO_MASK(R_USB_EPT_DATA
, error_count_in
) |
2246 IO_MASK(R_USB_EPT_DATA
, error_count_out
));
2248 /* Software must preset the toggle bits. */
2249 if (usb_pipeout(urb
->pipe
)) {
2251 usb_gettoggle(urb
->dev
, usb_pipeendpoint(urb
->pipe
), usb_pipeout(urb
->pipe
));
2252 *R_USB_EPT_DATA
&= ~IO_MASK(R_USB_EPT_DATA
, t_out
);
2253 *R_USB_EPT_DATA
|= IO_FIELD(R_USB_EPT_DATA
, t_out
, toggle
);
2256 usb_gettoggle(urb
->dev
, usb_pipeendpoint(urb
->pipe
), usb_pipeout(urb
->pipe
));
2257 *R_USB_EPT_DATA
&= ~IO_MASK(R_USB_EPT_DATA
, t_in
);
2258 *R_USB_EPT_DATA
|= IO_FIELD(R_USB_EPT_DATA
, t_in
, toggle
);
2261 /* Assert that the EP descriptor is disabled. */
2262 assert(!(TxBulkEPList
[epid
].command
& IO_MASK(USB_EP_command
, enable
)));
2264 /* The reason we set the EP's sub pointer directly instead of
2265 walking the SB list and linking it last in the list is that we only
2266 have one active urb at a time (the rest are queued). */
2268 /* Note that we cannot have interrupts running when we have set the SB descriptor
2269 but the EP is not yet enabled. If a bulk eot happens for another EP, we will
2270 find this EP disabled and with a SB != 0, which will make us think that it's done. */
2271 TxBulkEPList
[epid
].sub
= virt_to_phys(sb_desc
);
2272 TxBulkEPList
[epid
].hw_len
= 0;
2273 /* Note that we don't have to fill in the ep_id field since this
2274 was done when we allocated the EP descriptors in init_tx_bulk_ep. */
2276 /* Check if the dummy list is already with us (if several urbs were queued). */
2277 if (TxBulkEPList
[epid
].next
!= virt_to_phys(&TxBulkDummyEPList
[epid
][0])) {
2279 dbg_bulk("Inviting dummy list to the party for urb 0x%lx, epid %d",
2280 (unsigned long)urb
, epid
);
2282 /* The last EP in the dummy list already has its next pointer set to
2283 TxBulkEPList[epid].next. */
2285 /* We don't need to check if the DMA is at this EP or not before changing the
2286 next pointer, since we will do it in one 32-bit write (EP descriptors are
2288 TxBulkEPList
[epid
].next
= virt_to_phys(&TxBulkDummyEPList
[epid
][0]);
2290 /* Enable the EP descr. */
2291 dbg_bulk("Enabling bulk EP for urb 0x%lx, epid %d", (unsigned long)urb
, epid
);
2292 TxBulkEPList
[epid
].command
|= IO_STATE(USB_EP_command
, enable
, yes
);
2294 /* Everything is set up, safe to enable interrupts again. */
2295 restore_flags(flags
);
2297 /* If the DMA bulk channel isn't running, we need to restart it if it
2298 has stopped at the last EP descriptor (DMA stopped because there was
2299 no more traffic) or if it has stopped at a dummy EP with the intr flag
2300 set (DMA stopped because we were too slow in inserting new traffic). */
2301 if (!(*R_DMA_CH8_SUB0_CMD
& IO_MASK(R_DMA_CH8_SUB0_CMD
, cmd
))) {
2304 ep
= (USB_EP_Desc_t
*)phys_to_virt(*R_DMA_CH8_SUB0_EP
);
2305 dbg_bulk("DMA channel not running in add");
2306 dbg_bulk("DMA is at 0x%lx", (unsigned long)ep
);
2308 if (*R_DMA_CH8_SUB0_EP
== virt_to_phys(&TxBulkEPList
[NBR_OF_EPIDS
- 1]) ||
2309 (ep
->command
& 0x8) >> 3) {
2310 *R_DMA_CH8_SUB0_CMD
= IO_STATE(R_DMA_CH8_SUB0_CMD
, cmd
, start
);
2311 /* Update/restart the bulk start timer since we just started the channel. */
2312 mod_timer(&bulk_start_timer
, jiffies
+ BULK_START_TIMER_INTERVAL
);
2313 /* Update/restart the bulk eot timer since we just inserted traffic. */
2314 mod_timer(&bulk_eot_timer
, jiffies
+ BULK_EOT_TIMER_INTERVAL
);
2321 static void etrax_usb_complete_bulk_urb(struct urb
*urb
, int status
)
2323 etrax_urb_priv_t
*urb_priv
= (etrax_urb_priv_t
*)urb
->hcpriv
;
2324 int epid
= urb_priv
->epid
;
2325 unsigned long flags
;
2330 warn("Completing bulk urb with status %d.", status
);
2332 dbg_bulk("Completing bulk urb 0x%lx for epid %d", (unsigned long)urb
, epid
);
2334 /* Update the urb list. */
2335 urb_list_del(urb
, epid
);
2337 /* For an IN pipe, we always set the actual length, regardless of whether there was
2338 an error or not (which means the device driver can use the data if it wants to). */
2339 if (usb_pipein(urb
->pipe
)) {
2340 urb
->actual_length
= urb_priv
->rx_offset
;
2342 /* Set actual_length for OUT urbs also; the USB mass storage driver seems
2343 to want that. We wouldn't know of any partial writes if there was an error. */
2345 urb
->actual_length
= urb
->transfer_buffer_length
;
2347 urb
->actual_length
= 0;
2351 /* FIXME: Is there something of the things below we shouldn't do if there was an error?
2352 Like, maybe we shouldn't toggle the toggle bits, or maybe we shouldn't insert more traffic. */
2357 *R_USB_EPT_INDEX
= IO_FIELD(R_USB_EPT_INDEX
, value
, epid
);
2360 /* We need to fiddle with the toggle bits because the hardware doesn't do it for us. */
2361 if (usb_pipeout(urb
->pipe
)) {
2363 IO_EXTRACT(R_USB_EPT_DATA
, t_out
, *R_USB_EPT_DATA
);
2364 usb_settoggle(urb
->dev
, usb_pipeendpoint(urb
->pipe
),
2365 usb_pipeout(urb
->pipe
), toggle
);
2368 IO_EXTRACT(R_USB_EPT_DATA
, t_in
, *R_USB_EPT_DATA
);
2369 usb_settoggle(urb
->dev
, usb_pipeendpoint(urb
->pipe
),
2370 usb_pipeout(urb
->pipe
), toggle
);
2372 restore_flags(flags
);
2374 /* Remember to free the SBs. */
2375 etrax_remove_from_sb_list(urb
);
2379 /* If there are any more urb's in the list we'd better start sending */
2380 if (!urb_list_empty(epid
)) {
2382 struct urb
*new_urb
;
2384 /* Get the first urb. */
2385 new_urb
= urb_list_first(epid
);
2388 dbg_bulk("More bulk for epid %d", epid
);
2390 etrax_usb_add_to_bulk_sb_list(new_urb
, epid
);
2393 urb
->status
= status
;
2395 /* We let any non-zero status from the layer above have precedence. */
2397 /* URB_SHORT_NOT_OK means that short reads (shorter than the endpoint's max length)
2398 is to be treated as an error. */
2399 if (urb
->transfer_flags
& URB_SHORT_NOT_OK
) {
2400 if (usb_pipein(urb
->pipe
) &&
2401 (urb
->actual_length
!=
2402 usb_maxpacket(urb
->dev
, urb
->pipe
, usb_pipeout(urb
->pipe
)))) {
2403 urb
->status
= -EREMOTEIO
;
2408 if (urb
->complete
) {
2409 urb
->complete(urb
, NULL
);
2412 if (urb_list_empty(epid
)) {
2413 /* This means that this EP is now free, deconfigure it. */
2414 etrax_usb_free_epid(epid
);
2416 /* No more traffic; time to clean up.
2417 Must set sub pointer to 0, since we look at the sub pointer when handling
2418 the bulk eot interrupt. */
2420 dbg_bulk("No bulk for epid %d", epid
);
2422 TxBulkEPList
[epid
].sub
= 0;
2424 /* Unlink the dummy list. */
2426 dbg_bulk("Kicking dummy list out of party for urb 0x%lx, epid %d",
2427 (unsigned long)urb
, epid
);
2429 /* No need to wait for the DMA before changing the next pointer.
2430 The modulo NBR_OF_EPIDS isn't actually necessary, since we will never use
2431 the last one (INVALID_EPID) for actual traffic. */
2432 TxBulkEPList
[epid
].next
=
2433 virt_to_phys(&TxBulkEPList
[(epid
+ 1) % NBR_OF_EPIDS
]);
2439 static int etrax_usb_submit_ctrl_urb(struct urb
*urb
)
2443 unsigned long flags
;
2444 etrax_urb_priv_t
*urb_priv
;
2448 /* FIXME: Return -ENXIO if there is already a queued urb for this endpoint? */
2450 /* Epid allocation, empty check and list add must be protected.
2452 Epid allocation because if we find an existing epid for this endpoint an urb might be
2453 completed (emptying the list) before we add the new urb to the list, causing the epid
2454 to be de-allocated. We would then start the transfer with an invalid epid -> epid attn.
2456 Empty check and add because otherwise we might conclude that the list is not empty,
2457 after which it becomes empty before we add the new urb to the list, causing us not to
2458 insert the new traffic into the SB list. */
2460 spin_lock_irqsave(&urb_list_lock
, flags
);
2461 epid
= etrax_usb_setup_epid(urb
);
2463 spin_unlock_irqrestore(&urb_list_lock
, flags
);
2467 empty
= urb_list_empty(epid
);
2468 urb_list_add(urb
, epid
);
2469 spin_unlock_irqrestore(&urb_list_lock
, flags
);
2471 dbg_ctrl("Adding ctrl urb 0x%lx to %s list, epid %d",
2472 (unsigned long)urb
, empty
? "empty" : "", epid
);
2474 /* Mark the urb as being in progress. */
2475 urb
->status
= -EINPROGRESS
;
2477 /* Setup the hcpriv data. */
2478 urb_priv
= kmalloc(sizeof(etrax_urb_priv_t
), KMALLOC_FLAG
);
2479 assert(urb_priv
!= NULL
);
2480 /* This sets rx_offset to 0. */
2481 memset(urb_priv
, 0, sizeof(etrax_urb_priv_t
));
2482 urb_priv
->urb_state
= NOT_STARTED
;
2483 urb
->hcpriv
= urb_priv
;
2486 etrax_usb_add_to_ctrl_sb_list(urb
, epid
);
2494 static void etrax_usb_add_to_ctrl_sb_list(struct urb
*urb
, int epid
)
2496 USB_SB_Desc_t
*sb_desc_setup
;
2497 USB_SB_Desc_t
*sb_desc_data
;
2498 USB_SB_Desc_t
*sb_desc_status
;
2500 etrax_urb_priv_t
*urb_priv
= (etrax_urb_priv_t
*)urb
->hcpriv
;
2502 unsigned long flags
;
2507 maxlen
= usb_maxpacket(urb
->dev
, urb
->pipe
, usb_pipeout(urb
->pipe
));
2509 sb_desc_setup
= (USB_SB_Desc_t
*)kmem_cache_alloc(usb_desc_cache
, SLAB_FLAG
);
2510 assert(sb_desc_setup
!= NULL
);
2511 sb_desc_status
= (USB_SB_Desc_t
*)kmem_cache_alloc(usb_desc_cache
, SLAB_FLAG
);
2512 assert(sb_desc_status
!= NULL
);
2514 /* Initialize the mandatory setup SB descriptor (used only in control transfers) */
2515 sb_desc_setup
->sw_len
= 8;
2516 sb_desc_setup
->command
= (IO_FIELD(USB_SB_command
, rem
, 0) |
2517 IO_STATE(USB_SB_command
, tt
, setup
) |
2518 IO_STATE(USB_SB_command
, full
, yes
) |
2519 IO_STATE(USB_SB_command
, eot
, yes
));
2521 sb_desc_setup
->buf
= virt_to_phys(urb
->setup_packet
);
2523 if (usb_pipeout(urb
->pipe
)) {
2524 dbg_ctrl("Transfer for epid %d is OUT", epid
);
2526 /* If this Control OUT transfer has an optional data stage we add an OUT token
2527 before the mandatory IN (status) token, hence the reordered SB list */
2529 sb_desc_setup
->next
= virt_to_phys(sb_desc_status
);
2530 if (urb
->transfer_buffer
) {
2532 dbg_ctrl("This OUT transfer has an extra data stage");
2534 sb_desc_data
= (USB_SB_Desc_t
*)kmem_cache_alloc(usb_desc_cache
, SLAB_FLAG
);
2535 assert(sb_desc_data
!= NULL
);
2537 sb_desc_setup
->next
= virt_to_phys(sb_desc_data
);
2539 sb_desc_data
->sw_len
= urb
->transfer_buffer_length
;
2540 sb_desc_data
->command
= (IO_STATE(USB_SB_command
, tt
, out
) |
2541 IO_STATE(USB_SB_command
, full
, yes
) |
2542 IO_STATE(USB_SB_command
, eot
, yes
));
2543 sb_desc_data
->buf
= virt_to_phys(urb
->transfer_buffer
);
2544 sb_desc_data
->next
= virt_to_phys(sb_desc_status
);
2547 sb_desc_status
->sw_len
= 1;
2548 sb_desc_status
->command
= (IO_FIELD(USB_SB_command
, rem
, 0) |
2549 IO_STATE(USB_SB_command
, tt
, in
) |
2550 IO_STATE(USB_SB_command
, eot
, yes
) |
2551 IO_STATE(USB_SB_command
, intr
, yes
) |
2552 IO_STATE(USB_SB_command
, eol
, yes
));
2554 sb_desc_status
->buf
= 0;
2555 sb_desc_status
->next
= 0;
2557 } else if (usb_pipein(urb
->pipe
)) {
2559 dbg_ctrl("Transfer for epid %d is IN", epid
);
2560 dbg_ctrl("transfer_buffer_length = %d", urb
->transfer_buffer_length
);
2561 dbg_ctrl("rem is calculated to %d", urb
->transfer_buffer_length
% maxlen
);
2563 sb_desc_data
= (USB_SB_Desc_t
*)kmem_cache_alloc(usb_desc_cache
, SLAB_FLAG
);
2564 assert(sb_desc_data
!= NULL
);
2566 sb_desc_setup
->next
= virt_to_phys(sb_desc_data
);
2568 sb_desc_data
->sw_len
= urb
->transfer_buffer_length
?
2569 (urb
->transfer_buffer_length
- 1) / maxlen
+ 1 : 0;
2570 dbg_ctrl("sw_len got %d", sb_desc_data
->sw_len
);
2572 sb_desc_data
->command
=
2573 (IO_FIELD(USB_SB_command
, rem
,
2574 urb
->transfer_buffer_length
% maxlen
) |
2575 IO_STATE(USB_SB_command
, tt
, in
) |
2576 IO_STATE(USB_SB_command
, eot
, yes
));
2578 sb_desc_data
->buf
= 0;
2579 sb_desc_data
->next
= virt_to_phys(sb_desc_status
);
2581 /* Read comment at zout_buffer declaration for an explanation to this. */
2582 sb_desc_status
->sw_len
= 1;
2583 sb_desc_status
->command
= (IO_FIELD(USB_SB_command
, rem
, 0) |
2584 IO_STATE(USB_SB_command
, tt
, zout
) |
2585 IO_STATE(USB_SB_command
, full
, yes
) |
2586 IO_STATE(USB_SB_command
, eot
, yes
) |
2587 IO_STATE(USB_SB_command
, intr
, yes
) |
2588 IO_STATE(USB_SB_command
, eol
, yes
));
2590 sb_desc_status
->buf
= virt_to_phys(&zout_buffer
[0]);
2591 sb_desc_status
->next
= 0;
2594 urb_priv
->first_sb
= sb_desc_setup
;
2595 urb_priv
->last_sb
= sb_desc_status
;
2596 urb_priv
->epid
= epid
;
2598 urb_priv
->urb_state
= STARTED
;
2600 /* Reset toggle bits and reset error count, remember to di and ei */
2601 /* Warning: it is possible that this locking doesn't work with bottom-halves */
2606 *R_USB_EPT_INDEX
= IO_FIELD(R_USB_EPT_INDEX
, value
, epid
);
2608 if (*R_USB_EPT_DATA
& IO_MASK(R_USB_EPT_DATA
, hold
)) {
2609 panic("Hold was set in %s", __FUNCTION__
);
2613 /* FIXME: Compare with etrax_usb_add_to_bulk_sb_list where the toggle bits
2614 are set to a specific value. Why the difference? Read "Transfer and Toggle Bits
2615 in Designer's Reference, p. 8 - 11. */
2617 ~(IO_MASK(R_USB_EPT_DATA
, error_count_in
) |
2618 IO_MASK(R_USB_EPT_DATA
, error_count_out
) |
2619 IO_MASK(R_USB_EPT_DATA
, t_in
) |
2620 IO_MASK(R_USB_EPT_DATA
, t_out
));
2622 /* Since we use the rx interrupt to complete ctrl urbs, we can enable interrupts now
2623 (i.e. we don't check the sub pointer on an eot interrupt like we do for bulk traffic). */
2624 restore_flags(flags
);
2626 /* Assert that the EP descriptor is disabled. */
2627 assert(!(TxCtrlEPList
[epid
].command
& IO_MASK(USB_EP_command
, enable
)));
2629 /* Set up and enable the EP descriptor. */
2630 TxCtrlEPList
[epid
].sub
= virt_to_phys(sb_desc_setup
);
2631 TxCtrlEPList
[epid
].hw_len
= 0;
2632 TxCtrlEPList
[epid
].command
|= IO_STATE(USB_EP_command
, enable
, yes
);
2634 /* We start the DMA sub channel without checking if it's running or not, because:
2635 1) If it's already running, issuing the start command is a nop.
2636 2) We avoid a test-and-set race condition. */
2637 *R_DMA_CH8_SUB1_CMD
= IO_STATE(R_DMA_CH8_SUB1_CMD
, cmd
, start
);
2642 static void etrax_usb_complete_ctrl_urb(struct urb
*urb
, int status
)
2644 etrax_urb_priv_t
*urb_priv
= (etrax_urb_priv_t
*)urb
->hcpriv
;
2645 int epid
= urb_priv
->epid
;
2650 warn("Completing ctrl urb with status %d.", status
);
2652 dbg_ctrl("Completing ctrl epid %d, urb 0x%lx", epid
, (unsigned long)urb
);
2654 /* Remove this urb from the list. */
2655 urb_list_del(urb
, epid
);
2657 /* For an IN pipe, we always set the actual length, regardless of whether there was
2658 an error or not (which means the device driver can use the data if it wants to). */
2659 if (usb_pipein(urb
->pipe
)) {
2660 urb
->actual_length
= urb_priv
->rx_offset
;
2663 /* FIXME: Is there something of the things below we shouldn't do if there was an error?
2664 Like, maybe we shouldn't insert more traffic. */
2666 /* Remember to free the SBs. */
2667 etrax_remove_from_sb_list(urb
);
2671 /* If there are any more urbs in the list we'd better start sending. */
2672 if (!urb_list_empty(epid
)) {
2673 struct urb
*new_urb
;
2675 /* Get the first urb. */
2676 new_urb
= urb_list_first(epid
);
2679 dbg_ctrl("More ctrl for epid %d, first urb = 0x%lx", epid
, (unsigned long)new_urb
);
2681 etrax_usb_add_to_ctrl_sb_list(new_urb
, epid
);
2684 urb
->status
= status
;
2686 /* We let any non-zero status from the layer above have precedence. */
2688 /* URB_SHORT_NOT_OK means that short reads (shorter than the endpoint's max length)
2689 is to be treated as an error. */
2690 if (urb
->transfer_flags
& URB_SHORT_NOT_OK
) {
2691 if (usb_pipein(urb
->pipe
) &&
2692 (urb
->actual_length
!=
2693 usb_maxpacket(urb
->dev
, urb
->pipe
, usb_pipeout(urb
->pipe
)))) {
2694 urb
->status
= -EREMOTEIO
;
2699 if (urb
->complete
) {
2700 urb
->complete(urb
, NULL
);
2703 if (urb_list_empty(epid
)) {
2704 /* No more traffic. Time to clean up. */
2705 etrax_usb_free_epid(epid
);
2706 /* Must set sub pointer to 0. */
2707 dbg_ctrl("No ctrl for epid %d", epid
);
2708 TxCtrlEPList
[epid
].sub
= 0;
2714 static int etrax_usb_submit_intr_urb(struct urb
*urb
)
2721 if (usb_pipeout(urb
->pipe
)) {
2722 /* Unsupported transfer type.
2723 We don't support interrupt out traffic. (If we do, we can't support
2724 intervals for neither in or out traffic, but are forced to schedule all
2725 interrupt traffic in one frame.) */
2729 epid
= etrax_usb_setup_epid(urb
);
2735 if (!urb_list_empty(epid
)) {
2736 /* There is already a queued urb for this endpoint. */
2737 etrax_usb_free_epid(epid
);
2741 urb
->status
= -EINPROGRESS
;
2743 dbg_intr("Add intr urb 0x%lx, to list, epid %d", (unsigned long)urb
, epid
);
2745 urb_list_add(urb
, epid
);
2746 etrax_usb_add_to_intr_sb_list(urb
, epid
);
2753 static void etrax_usb_add_to_intr_sb_list(struct urb
*urb
, int epid
)
2756 volatile USB_EP_Desc_t
*tmp_ep
;
2757 volatile USB_EP_Desc_t
*first_ep
;
2763 etrax_urb_priv_t
*urb_priv
;
2767 maxlen
= usb_maxpacket(urb
->dev
, urb
->pipe
, usb_pipeout(urb
->pipe
));
2768 interval
= urb
->interval
;
2770 urb_priv
= kmalloc(sizeof(etrax_urb_priv_t
), KMALLOC_FLAG
);
2771 assert(urb_priv
!= NULL
);
2772 memset(urb_priv
, 0, sizeof(etrax_urb_priv_t
));
2773 urb
->hcpriv
= urb_priv
;
2775 first_ep
= &TxIntrEPList
[0];
2777 /* Round of the interval to 2^n, it is obvious that this code favours
2778 smaller numbers, but that is actually a good thing */
2779 /* FIXME: The "rounding error" for larger intervals will be quite
2780 large. For in traffic this shouldn't be a problem since it will only
2781 mean that we "poll" more often. */
2782 for (i
= 0; interval
; i
++) {
2783 interval
= interval
>> 1;
2785 interval
= 1 << (i
- 1);
2787 dbg_intr("Interval rounded to %d", interval
);
2792 if (tmp_ep
->command
& IO_MASK(USB_EP_command
, eof
)) {
2793 if ((i
% interval
) == 0) {
2794 /* Insert the traffic ep after tmp_ep */
2795 USB_EP_Desc_t
*ep_desc
;
2796 USB_SB_Desc_t
*sb_desc
;
2798 dbg_intr("Inserting EP for epid %d", epid
);
2800 ep_desc
= (USB_EP_Desc_t
*)
2801 kmem_cache_alloc(usb_desc_cache
, SLAB_FLAG
);
2802 sb_desc
= (USB_SB_Desc_t
*)
2803 kmem_cache_alloc(usb_desc_cache
, SLAB_FLAG
);
2804 assert(ep_desc
!= NULL
);
2805 CHECK_ALIGN(ep_desc
);
2806 assert(sb_desc
!= NULL
);
2808 ep_desc
->sub
= virt_to_phys(sb_desc
);
2809 ep_desc
->hw_len
= 0;
2810 ep_desc
->command
= (IO_FIELD(USB_EP_command
, epid
, epid
) |
2811 IO_STATE(USB_EP_command
, enable
, yes
));
2814 /* Round upwards the number of packets of size maxlen
2815 that this SB descriptor should receive. */
2816 sb_desc
->sw_len
= urb
->transfer_buffer_length
?
2817 (urb
->transfer_buffer_length
- 1) / maxlen
+ 1 : 0;
2821 (IO_FIELD(USB_SB_command
, rem
, urb
->transfer_buffer_length
% maxlen
) |
2822 IO_STATE(USB_SB_command
, tt
, in
) |
2823 IO_STATE(USB_SB_command
, eot
, yes
) |
2824 IO_STATE(USB_SB_command
, eol
, yes
));
2826 ep_desc
->next
= tmp_ep
->next
;
2827 tmp_ep
->next
= virt_to_phys(ep_desc
);
2831 tmp_ep
= (USB_EP_Desc_t
*)phys_to_virt(tmp_ep
->next
);
2832 } while (tmp_ep
!= first_ep
);
2835 /* Note that first_sb/last_sb doesn't apply to interrupt traffic. */
2836 urb_priv
->epid
= epid
;
2838 /* We start the DMA sub channel without checking if it's running or not, because:
2839 1) If it's already running, issuing the start command is a nop.
2840 2) We avoid a test-and-set race condition. */
2841 *R_DMA_CH8_SUB2_CMD
= IO_STATE(R_DMA_CH8_SUB2_CMD
, cmd
, start
);
2848 static void etrax_usb_complete_intr_urb(struct urb
*urb
, int status
)
2850 etrax_urb_priv_t
*urb_priv
= (etrax_urb_priv_t
*)urb
->hcpriv
;
2851 int epid
= urb_priv
->epid
;
2856 warn("Completing intr urb with status %d.", status
);
2858 dbg_intr("Completing intr epid %d, urb 0x%lx", epid
, (unsigned long)urb
);
2860 urb
->status
= status
;
2861 urb
->actual_length
= urb_priv
->rx_offset
;
2863 dbg_intr("interrupt urb->actual_length = %d", urb
->actual_length
);
2865 /* We let any non-zero status from the layer above have precedence. */
2867 /* URB_SHORT_NOT_OK means that short reads (shorter than the endpoint's max length)
2868 is to be treated as an error. */
2869 if (urb
->transfer_flags
& URB_SHORT_NOT_OK
) {
2870 if (urb
->actual_length
!=
2871 usb_maxpacket(urb
->dev
, urb
->pipe
, usb_pipeout(urb
->pipe
))) {
2872 urb
->status
= -EREMOTEIO
;
2877 /* The driver will resubmit the URB so we need to remove it first */
2878 etrax_usb_unlink_urb(urb
, 0);
2879 if (urb
->complete
) {
2880 urb
->complete(urb
, NULL
);
2887 static int etrax_usb_submit_isoc_urb(struct urb
*urb
)
2890 unsigned long flags
;
2894 dbg_isoc("Submitting isoc urb = 0x%lx", (unsigned long)urb
);
2896 /* Epid allocation, empty check and list add must be protected.
2897 Read about this in etrax_usb_submit_ctrl_urb. */
2899 spin_lock_irqsave(&urb_list_lock
, flags
);
2900 /* Is there an active epid for this urb ? */
2901 epid
= etrax_usb_setup_epid(urb
);
2904 spin_unlock_irqrestore(&urb_list_lock
, flags
);
2908 /* Ok, now we got valid endpoint, lets insert some traffic */
2910 urb
->status
= -EINPROGRESS
;
2912 /* Find the last urb in the URB_List and add this urb after that one.
2913 Also add the traffic, that is do an etrax_usb_add_to_isoc_sb_list. This
2914 is important to make this in "real time" since isochronous traffic is
2917 dbg_isoc("Adding isoc urb to (possibly empty) list");
2918 urb_list_add(urb
, epid
);
2919 etrax_usb_add_to_isoc_sb_list(urb
, epid
);
2920 spin_unlock_irqrestore(&urb_list_lock
, flags
);
2927 static void etrax_usb_check_error_isoc_ep(const int epid
)
2929 unsigned long int flags
;
2931 __u32 r_usb_ept_data
;
2933 /* We can't read R_USB_EPID_ATTN here since it would clear the iso_eof,
2934 bulk_eot and epid_attn interrupts. So we just check the status of
2935 the epid without testing if for it in R_USB_EPID_ATTN. */
2940 *R_USB_EPT_INDEX
= IO_FIELD(R_USB_EPT_INDEX
, value
, epid
);
2942 /* Note that although there are separate R_USB_EPT_DATA and R_USB_EPT_DATA_ISO
2943 registers, they are located at the same address and are of the same size.
2944 In other words, this read should be ok for isoc also. */
2945 r_usb_ept_data
= *R_USB_EPT_DATA
;
2946 restore_flags(flags
);
2948 error_code
= IO_EXTRACT(R_USB_EPT_DATA_ISO
, error_code
, r_usb_ept_data
);
2950 if (r_usb_ept_data
& IO_MASK(R_USB_EPT_DATA
, hold
)) {
2951 warn("Hold was set for epid %d.", epid
);
2955 if (error_code
== IO_STATE_VALUE(R_USB_EPT_DATA_ISO
, error_code
, no_error
)) {
2957 /* This indicates that the SB list of the ept was completed before
2958 new data was appended to it. This is not an error, but indicates
2959 large system or USB load and could possibly cause trouble for
2960 very timing sensitive USB device drivers so we log it.
2962 info("Isoc. epid %d disabled with no error", epid
);
2965 } else if (error_code
== IO_STATE_VALUE(R_USB_EPT_DATA_ISO
, error_code
, stall
)) {
2966 /* Not really a protocol error, just says that the endpoint gave
2967 a stall response. Note that error_code cannot be stall for isoc. */
2968 panic("Isoc traffic cannot stall");
2970 } else if (error_code
== IO_STATE_VALUE(R_USB_EPT_DATA_ISO
, error_code
, bus_error
)) {
2971 /* Two devices responded to a transaction request. Must be resolved
2972 by software. FIXME: Reset ports? */
2973 panic("Bus error for epid %d."
2974 " Two devices responded to transaction request",
2977 } else if (error_code
== IO_STATE_VALUE(R_USB_EPT_DATA
, error_code
, buffer_error
)) {
2978 /* DMA overrun or underrun. */
2979 warn("Buffer overrun/underrun for epid %d. DMA too busy?", epid
);
2981 /* It seems that error_code = buffer_error in
2982 R_USB_EPT_DATA/R_USB_EPT_DATA_ISO and ourun = yes in R_USB_STATUS
2983 are the same error. */
2988 static void etrax_usb_add_to_isoc_sb_list(struct urb
*urb
, int epid
)
2993 etrax_urb_priv_t
*urb_priv
;
2994 USB_SB_Desc_t
*prev_sb_desc
, *next_sb_desc
, *temp_sb_desc
;
2998 prev_sb_desc
= next_sb_desc
= temp_sb_desc
= NULL
;
3000 urb_priv
= kmalloc(sizeof(etrax_urb_priv_t
), GFP_ATOMIC
);
3001 assert(urb_priv
!= NULL
);
3002 memset(urb_priv
, 0, sizeof(etrax_urb_priv_t
));
3004 urb
->hcpriv
= urb_priv
;
3005 urb_priv
->epid
= epid
;
3007 if (usb_pipeout(urb
->pipe
)) {
3009 if (urb
->number_of_packets
== 0) panic("etrax_usb_add_to_isoc_sb_list 0 packets\n");
3011 dbg_isoc("Transfer for epid %d is OUT", epid
);
3012 dbg_isoc("%d packets in URB", urb
->number_of_packets
);
3014 /* Create one SB descriptor for each packet and link them together. */
3015 for (i
= 0; i
< urb
->number_of_packets
; i
++) {
3016 if (!urb
->iso_frame_desc
[i
].length
)
3019 next_sb_desc
= (USB_SB_Desc_t
*)kmem_cache_alloc(usb_desc_cache
, SLAB_ATOMIC
);
3020 assert(next_sb_desc
!= NULL
);
3022 if (urb
->iso_frame_desc
[i
].length
> 0) {
3024 next_sb_desc
->command
= (IO_STATE(USB_SB_command
, tt
, out
) |
3025 IO_STATE(USB_SB_command
, eot
, yes
));
3027 next_sb_desc
->sw_len
= urb
->iso_frame_desc
[i
].length
;
3028 next_sb_desc
->buf
= virt_to_phys((char*)urb
->transfer_buffer
+ urb
->iso_frame_desc
[i
].offset
);
3030 /* Check if full length transfer. */
3031 if (urb
->iso_frame_desc
[i
].length
==
3032 usb_maxpacket(urb
->dev
, urb
->pipe
, usb_pipeout(urb
->pipe
))) {
3033 next_sb_desc
->command
|= IO_STATE(USB_SB_command
, full
, yes
);
3036 dbg_isoc("zero len packet");
3037 next_sb_desc
->command
= (IO_FIELD(USB_SB_command
, rem
, 0) |
3038 IO_STATE(USB_SB_command
, tt
, zout
) |
3039 IO_STATE(USB_SB_command
, eot
, yes
) |
3040 IO_STATE(USB_SB_command
, full
, yes
));
3042 next_sb_desc
->sw_len
= 1;
3043 next_sb_desc
->buf
= virt_to_phys(&zout_buffer
[0]);
3046 /* First SB descriptor that belongs to this urb */
3048 urb_priv
->first_sb
= next_sb_desc
;
3050 prev_sb_desc
->next
= virt_to_phys(next_sb_desc
);
3052 prev_sb_desc
= next_sb_desc
;
3055 next_sb_desc
->command
|= (IO_STATE(USB_SB_command
, intr
, yes
) |
3056 IO_STATE(USB_SB_command
, eol
, yes
));
3057 next_sb_desc
->next
= 0;
3058 urb_priv
->last_sb
= next_sb_desc
;
3060 } else if (usb_pipein(urb
->pipe
)) {
3062 dbg_isoc("Transfer for epid %d is IN", epid
);
3063 dbg_isoc("transfer_buffer_length = %d", urb
->transfer_buffer_length
);
3064 dbg_isoc("rem is calculated to %d", urb
->iso_frame_desc
[urb
->number_of_packets
- 1].length
);
3066 /* Note that in descriptors for periodic traffic are not consumed. This means that
3067 the USB controller never propagates in the SB list. In other words, if there already
3068 is an SB descriptor in the list for this EP we don't have to do anything. */
3069 if (TxIsocEPList
[epid
].sub
== 0) {
3070 dbg_isoc("Isoc traffic not already running, allocating SB");
3072 next_sb_desc
= (USB_SB_Desc_t
*)kmem_cache_alloc(usb_desc_cache
, SLAB_ATOMIC
);
3073 assert(next_sb_desc
!= NULL
);
3075 next_sb_desc
->command
= (IO_STATE(USB_SB_command
, tt
, in
) |
3076 IO_STATE(USB_SB_command
, eot
, yes
) |
3077 IO_STATE(USB_SB_command
, eol
, yes
));
3079 next_sb_desc
->next
= 0;
3080 next_sb_desc
->sw_len
= 1; /* Actual number of packets is not relevant
3081 for periodic in traffic as long as it is more
3082 than zero. Set to 1 always. */
3083 next_sb_desc
->buf
= 0;
3085 /* The rem field is don't care for isoc traffic, so we don't set it. */
3087 /* Only one SB descriptor that belongs to this urb. */
3088 urb_priv
->first_sb
= next_sb_desc
;
3089 urb_priv
->last_sb
= next_sb_desc
;
3093 dbg_isoc("Isoc traffic already running, just setting first/last_sb");
3095 /* Each EP for isoc in will have only one SB descriptor, setup when submitting the
3096 already active urb. Note that even though we may have several first_sb/last_sb
3097 pointing at the same SB descriptor, they are freed only once (when the list has
3099 urb_priv
->first_sb
= phys_to_virt(TxIsocEPList
[epid
].sub
);
3100 urb_priv
->last_sb
= phys_to_virt(TxIsocEPList
[epid
].sub
);
3106 /* Find the spot to insert this urb and add it. */
3107 if (TxIsocEPList
[epid
].sub
== 0) {
3108 /* First SB descriptor inserted in this list (in or out). */
3109 dbg_isoc("Inserting SB desc first in list");
3110 TxIsocEPList
[epid
].hw_len
= 0;
3111 TxIsocEPList
[epid
].sub
= virt_to_phys(urb_priv
->first_sb
);
3114 /* Isochronous traffic is already running, insert new traffic last (only out). */
3115 dbg_isoc("Inserting SB desc last in list");
3116 temp_sb_desc
= phys_to_virt(TxIsocEPList
[epid
].sub
);
3117 while ((temp_sb_desc
->command
& IO_MASK(USB_SB_command
, eol
)) !=
3118 IO_STATE(USB_SB_command
, eol
, yes
)) {
3119 assert(temp_sb_desc
->next
);
3120 temp_sb_desc
= phys_to_virt(temp_sb_desc
->next
);
3122 dbg_isoc("Appending list on desc 0x%p", temp_sb_desc
);
3124 /* Next pointer must be set before eol is removed. */
3125 temp_sb_desc
->next
= virt_to_phys(urb_priv
->first_sb
);
3126 /* Clear the previous end of list flag since there is a new in the
3127 added SB descriptor list. */
3128 temp_sb_desc
->command
&= ~IO_MASK(USB_SB_command
, eol
);
3130 if (!(TxIsocEPList
[epid
].command
& IO_MASK(USB_EP_command
, enable
))) {
3131 /* 8.8.5 in Designer's Reference says we should check for and correct
3132 any errors in the EP here. That should not be necessary if epid_attn
3133 is handled correctly, so we assume all is ok. */
3134 dbg_isoc("EP disabled");
3135 etrax_usb_check_error_isoc_ep(epid
);
3137 /* The SB list was exhausted. */
3138 if (virt_to_phys(urb_priv
->last_sb
) != TxIsocEPList
[epid
].sub
) {
3139 /* The new sublist did not get processed before the EP was
3140 disabled. Setup the EP again. */
3141 dbg_isoc("Set EP sub to new list");
3142 TxIsocEPList
[epid
].hw_len
= 0;
3143 TxIsocEPList
[epid
].sub
= virt_to_phys(urb_priv
->first_sb
);
3148 if (urb
->transfer_flags
& URB_ISO_ASAP
) {
3149 /* The isoc transfer should be started as soon as possible. The start_frame
3150 field is a return value if URB_ISO_ASAP was set. Comparing R_USB_FM_NUMBER
3151 with a USB Chief trace shows that the first isoc IN token is sent 2 frames
3152 later. I'm not sure how this affects usage of the start_frame field by the
3153 device driver, or how it affects things when USB_ISO_ASAP is not set, so
3154 therefore there's no compensation for the 2 frame "lag" here. */
3155 urb
->start_frame
= (*R_USB_FM_NUMBER
& 0x7ff);
3156 TxIsocEPList
[epid
].command
|= IO_STATE(USB_EP_command
, enable
, yes
);
3157 urb_priv
->urb_state
= STARTED
;
3158 dbg_isoc("URB_ISO_ASAP set, urb->start_frame set to %d", urb
->start_frame
);
3160 /* Not started yet. */
3161 urb_priv
->urb_state
= NOT_STARTED
;
3162 dbg_isoc("urb_priv->urb_state set to NOT_STARTED");
3165 /* We start the DMA sub channel without checking if it's running or not, because:
3166 1) If it's already running, issuing the start command is a nop.
3167 2) We avoid a test-and-set race condition. */
3168 *R_DMA_CH8_SUB3_CMD
= IO_STATE(R_DMA_CH8_SUB3_CMD
, cmd
, start
);
3173 static void etrax_usb_complete_isoc_urb(struct urb
*urb
, int status
)
3175 etrax_urb_priv_t
*urb_priv
= (etrax_urb_priv_t
*)urb
->hcpriv
;
3176 int epid
= urb_priv
->epid
;
3177 int auto_resubmit
= 0;
3180 dbg_isoc("complete urb 0x%p, status %d", urb
, status
);
3183 warn("Completing isoc urb with status %d.", status
);
3185 if (usb_pipein(urb
->pipe
)) {
3188 /* Make that all isoc packets have status and length set before
3189 completing the urb. */
3190 for (i
= urb_priv
->isoc_packet_counter
; i
< urb
->number_of_packets
; i
++) {
3191 urb
->iso_frame_desc
[i
].actual_length
= 0;
3192 urb
->iso_frame_desc
[i
].status
= -EPROTO
;
3195 urb_list_del(urb
, epid
);
3197 if (!list_empty(&urb_list
[epid
])) {
3198 ((etrax_urb_priv_t
*)(urb_list_first(epid
)->hcpriv
))->urb_state
= STARTED
;
3200 unsigned long int flags
;
3201 if (TxIsocEPList
[epid
].command
& IO_MASK(USB_EP_command
, enable
)) {
3202 /* The EP was enabled, disable it and wait. */
3203 TxIsocEPList
[epid
].command
&= ~IO_MASK(USB_EP_command
, enable
);
3205 /* Ah, the luxury of busy-wait. */
3206 while (*R_DMA_CH8_SUB3_EP
== virt_to_phys(&TxIsocEPList
[epid
]));
3209 etrax_remove_from_sb_list(urb
);
3210 TxIsocEPList
[epid
].sub
= 0;
3211 TxIsocEPList
[epid
].hw_len
= 0;
3215 etrax_usb_free_epid(epid
);
3216 restore_flags(flags
);
3222 /* Release allocated bandwidth. */
3223 usb_release_bandwidth(urb
->dev
, urb
, 0);
3224 } else if (usb_pipeout(urb
->pipe
)) {
3227 dbg_isoc("Isoc out urb complete 0x%p", urb
);
3229 /* Update the urb list. */
3230 urb_list_del(urb
, epid
);
3232 freed_descr
= etrax_remove_from_sb_list(urb
);
3233 dbg_isoc("freed %d descriptors of %d packets", freed_descr
, urb
->number_of_packets
);
3234 assert(freed_descr
== urb
->number_of_packets
);
3238 /* Release allocated bandwidth. */
3239 usb_release_bandwidth(urb
->dev
, urb
, 0);
3242 urb
->status
= status
;
3243 if (urb
->complete
) {
3244 urb
->complete(urb
, NULL
);
3247 if (auto_resubmit
) {
3248 /* Check that urb was not unlinked by the complete callback. */
3249 if (__urb_list_entry(urb
, epid
)) {
3250 /* Move this one down the list. */
3251 urb_list_move_last(urb
, epid
);
3253 /* Mark the now first urb as started (may already be). */
3254 ((etrax_urb_priv_t
*)(urb_list_first(epid
)->hcpriv
))->urb_state
= STARTED
;
3256 /* Must set this to 0 since this urb is still active after
3258 urb_priv
->isoc_packet_counter
= 0;
3260 warn("(ISOC) automatic resubmit urb 0x%p removed by complete.", urb
);
3267 static void etrax_usb_complete_urb(struct urb
*urb
, int status
)
3269 switch (usb_pipetype(urb
->pipe
)) {
3271 etrax_usb_complete_bulk_urb(urb
, status
);
3274 etrax_usb_complete_ctrl_urb(urb
, status
);
3276 case PIPE_INTERRUPT
:
3277 etrax_usb_complete_intr_urb(urb
, status
);
3279 case PIPE_ISOCHRONOUS
:
3280 etrax_usb_complete_isoc_urb(urb
, status
);
3283 err("Unknown pipetype");
3289 static irqreturn_t
etrax_usb_hc_interrupt_top_half(int irq
, void *vhc
, struct pt_regs
*regs
)
3291 usb_interrupt_registers_t
*reg
;
3292 unsigned long flags
;
3296 __u16 port_status_1
;
3297 __u16 port_status_2
;
3302 /* Read critical registers into local variables, do kmalloc afterwards. */
3306 irq_mask
= *R_USB_IRQ_MASK_READ
;
3307 /* Reading R_USB_STATUS clears the ctl_status interrupt. Note that R_USB_STATUS
3308 must be read before R_USB_EPID_ATTN since reading the latter clears the
3309 ourun and perror fields of R_USB_STATUS. */
3310 status
= *R_USB_STATUS
;
3312 /* Reading R_USB_EPID_ATTN clears the iso_eof, bulk_eot and epid_attn interrupts. */
3313 epid_attn
= *R_USB_EPID_ATTN
;
3315 /* Reading R_USB_RH_PORT_STATUS_1 and R_USB_RH_PORT_STATUS_2 clears the
3316 port_status interrupt. */
3317 port_status_1
= *R_USB_RH_PORT_STATUS_1
;
3318 port_status_2
= *R_USB_RH_PORT_STATUS_2
;
3320 /* Reading R_USB_FM_NUMBER clears the sof interrupt. */
3321 /* Note: the lower 11 bits contain the actual frame number, sent with each sof. */
3322 fm_number
= *R_USB_FM_NUMBER
;
3324 restore_flags(flags
);
3326 reg
= (usb_interrupt_registers_t
*)kmem_cache_alloc(top_half_reg_cache
, SLAB_ATOMIC
);
3328 assert(reg
!= NULL
);
3330 reg
->hc
= (etrax_hc_t
*)vhc
;
3332 /* Now put register values into kmalloc'd area. */
3333 reg
->r_usb_irq_mask_read
= irq_mask
;
3334 reg
->r_usb_status
= status
;
3335 reg
->r_usb_epid_attn
= epid_attn
;
3336 reg
->r_usb_rh_port_status_1
= port_status_1
;
3337 reg
->r_usb_rh_port_status_2
= port_status_2
;
3338 reg
->r_usb_fm_number
= fm_number
;
3340 INIT_WORK(®
->usb_bh
, etrax_usb_hc_interrupt_bottom_half
, reg
);
3341 schedule_work(®
->usb_bh
);
3348 static void etrax_usb_hc_interrupt_bottom_half(void *data
)
3350 usb_interrupt_registers_t
*reg
= (usb_interrupt_registers_t
*)data
;
3351 __u32 irq_mask
= reg
->r_usb_irq_mask_read
;
3355 /* Interrupts are handled in order of priority. */
3356 if (irq_mask
& IO_MASK(R_USB_IRQ_MASK_READ
, epid_attn
)) {
3357 etrax_usb_hc_epid_attn_interrupt(reg
);
3359 if (irq_mask
& IO_MASK(R_USB_IRQ_MASK_READ
, port_status
)) {
3360 etrax_usb_hc_port_status_interrupt(reg
);
3362 if (irq_mask
& IO_MASK(R_USB_IRQ_MASK_READ
, ctl_status
)) {
3363 etrax_usb_hc_ctl_status_interrupt(reg
);
3365 if (irq_mask
& IO_MASK(R_USB_IRQ_MASK_READ
, iso_eof
)) {
3366 etrax_usb_hc_isoc_eof_interrupt();
3368 if (irq_mask
& IO_MASK(R_USB_IRQ_MASK_READ
, bulk_eot
)) {
3369 /* Update/restart the bulk start timer since obviously the channel is running. */
3370 mod_timer(&bulk_start_timer
, jiffies
+ BULK_START_TIMER_INTERVAL
);
3371 /* Update/restart the bulk eot timer since we just received an bulk eot interrupt. */
3372 mod_timer(&bulk_eot_timer
, jiffies
+ BULK_EOT_TIMER_INTERVAL
);
3374 etrax_usb_hc_bulk_eot_interrupt(0);
3377 kmem_cache_free(top_half_reg_cache
, reg
);
3383 void etrax_usb_hc_isoc_eof_interrupt(void)
3386 etrax_urb_priv_t
*urb_priv
;
3388 unsigned long flags
;
3392 /* Do not check the invalid epid (it has a valid sub pointer). */
3393 for (epid
= 0; epid
< NBR_OF_EPIDS
- 1; epid
++) {
3395 /* Do not check the invalid epid (it has a valid sub pointer). */
3396 if ((epid
== DUMMY_EPID
) || (epid
== INVALID_EPID
))
3399 /* Disable interrupts to block the isoc out descriptor interrupt handler
3400 from being called while the isoc EPID list is being checked.
3405 if (TxIsocEPList
[epid
].sub
== 0) {
3406 /* Nothing here to see. */
3407 restore_flags(flags
);
3411 /* Get the first urb (if any). */
3412 urb
= urb_list_first(epid
);
3414 warn("Ignoring NULL urb");
3415 restore_flags(flags
);
3418 if (usb_pipein(urb
->pipe
)) {
3421 assert(usb_pipetype(urb
->pipe
) == PIPE_ISOCHRONOUS
);
3423 urb_priv
= (etrax_urb_priv_t
*)urb
->hcpriv
;
3426 if (urb_priv
->urb_state
== NOT_STARTED
) {
3428 /* If ASAP is not set and urb->start_frame is the current frame,
3429 start the transfer. */
3430 if (!(urb
->transfer_flags
& URB_ISO_ASAP
) &&
3431 (urb
->start_frame
== (*R_USB_FM_NUMBER
& 0x7ff))) {
3433 dbg_isoc("Enabling isoc IN EP descr for epid %d", epid
);
3434 TxIsocEPList
[epid
].command
|= IO_STATE(USB_EP_command
, enable
, yes
);
3436 /* This urb is now active. */
3437 urb_priv
->urb_state
= STARTED
;
3442 restore_flags(flags
);
3449 void etrax_usb_hc_bulk_eot_interrupt(int timer_induced
)
3453 /* The technique is to run one urb at a time, wait for the eot interrupt at which
3454 point the EP descriptor has been disabled. */
3457 dbg_bulk("bulk eot%s", timer_induced
? ", called by timer" : "");
3459 for (epid
= 0; epid
< NBR_OF_EPIDS
; epid
++) {
3461 if (!(TxBulkEPList
[epid
].command
& IO_MASK(USB_EP_command
, enable
)) &&
3462 (TxBulkEPList
[epid
].sub
!= 0)) {
3465 etrax_urb_priv_t
*urb_priv
;
3466 unsigned long flags
;
3467 __u32 r_usb_ept_data
;
3469 /* Found a disabled EP descriptor which has a non-null sub pointer.
3470 Verify that this ctrl EP descriptor got disabled no errors.
3471 FIXME: Necessary to check error_code? */
3472 dbg_bulk("for epid %d?", epid
);
3474 /* Get the first urb. */
3475 urb
= urb_list_first(epid
);
3477 /* FIXME: Could this happen for valid reasons? Why did it disappear? Because of
3480 warn("NULL urb for epid %d", epid
);
3485 urb_priv
= (etrax_urb_priv_t
*)urb
->hcpriv
;
3488 /* Sanity checks. */
3489 assert(usb_pipetype(urb
->pipe
) == PIPE_BULK
);
3490 if (phys_to_virt(TxBulkEPList
[epid
].sub
) != urb_priv
->last_sb
) {
3491 err("bulk endpoint got disabled before reaching last sb");
3494 /* For bulk IN traffic, there seems to be a race condition between
3495 between the bulk eot and eop interrupts, or rather an uncertainty regarding
3496 the order in which they happen. Normally we expect the eop interrupt from
3497 DMA channel 9 to happen before the eot interrupt.
3499 Therefore, we complete the bulk IN urb in the rx interrupt handler instead. */
3501 if (usb_pipein(urb
->pipe
)) {
3502 dbg_bulk("in urb, continuing");
3508 *R_USB_EPT_INDEX
= IO_FIELD(R_USB_EPT_INDEX
, value
, epid
);
3510 r_usb_ept_data
= *R_USB_EPT_DATA
;
3511 restore_flags(flags
);
3513 if (IO_EXTRACT(R_USB_EPT_DATA
, error_code
, r_usb_ept_data
) ==
3514 IO_STATE_VALUE(R_USB_EPT_DATA
, error_code
, no_error
)) {
3515 /* This means that the endpoint has no error, is disabled
3516 and had inserted traffic, i.e. transfer successfully completed. */
3517 etrax_usb_complete_bulk_urb(urb
, 0);
3519 /* Shouldn't happen. We expect errors to be caught by epid attention. */
3520 err("Found disabled bulk EP desc, error_code != no_error");
3525 /* Normally, we should find (at least) one disabled EP descriptor with a valid sub pointer.
3526 However, because of the uncertainty in the deliverance of the eop/eot interrupts, we may
3527 not. Also, we might find two disabled EPs when handling an eot interrupt, and then find
3528 none the next time. */
3534 void etrax_usb_hc_epid_attn_interrupt(usb_interrupt_registers_t
*reg
)
3536 /* This function handles the epid attention interrupt. There are a variety of reasons
3537 for this interrupt to happen (Designer's Reference, p. 8 - 22 for the details):
3539 invalid ep_id - Invalid epid in an EP (EP disabled).
3540 stall - Not strictly an error condition (EP disabled).
3541 3rd error - Three successive transaction errors (EP disabled).
3542 buffer ourun - Buffer overrun or underrun (EP disabled).
3543 past eof1 - Intr or isoc transaction proceeds past EOF1.
3544 near eof - Intr or isoc transaction would not fit inside the frame.
3545 zout transfer - If zout transfer for a bulk endpoint (EP disabled).
3546 setup transfer - If setup transfer for a non-ctrl endpoint (EP disabled). */
3553 assert(reg
!= NULL
);
3555 /* Note that we loop through all epids. We still want to catch errors for
3556 the invalid one, even though we might handle them differently. */
3557 for (epid
= 0; epid
< NBR_OF_EPIDS
; epid
++) {
3559 if (test_bit(epid
, (void *)®
->r_usb_epid_attn
)) {
3562 __u32 r_usb_ept_data
;
3563 unsigned long flags
;
3568 *R_USB_EPT_INDEX
= IO_FIELD(R_USB_EPT_INDEX
, value
, epid
);
3570 /* Note that although there are separate R_USB_EPT_DATA and R_USB_EPT_DATA_ISO
3571 registers, they are located at the same address and are of the same size.
3572 In other words, this read should be ok for isoc also. */
3573 r_usb_ept_data
= *R_USB_EPT_DATA
;
3574 restore_flags(flags
);
3576 /* First some sanity checks. */
3577 if (epid
== INVALID_EPID
) {
3578 /* FIXME: What if it became disabled? Could seriously hurt interrupt
3579 traffic. (Use do_intr_recover.) */
3580 warn("Got epid_attn for INVALID_EPID (%d).", epid
);
3581 err("R_USB_EPT_DATA = 0x%x", r_usb_ept_data
);
3582 err("R_USB_STATUS = 0x%x", reg
->r_usb_status
);
3584 } else if (epid
== DUMMY_EPID
) {
3585 /* We definitely don't care about these ones. Besides, they are
3586 always disabled, so any possible disabling caused by the
3587 epid attention interrupt is irrelevant. */
3588 warn("Got epid_attn for DUMMY_EPID (%d).", epid
);
3592 /* Get the first urb in the urb list for this epid. We blatantly assume
3593 that only the first urb could have caused the epid attention.
3594 (For bulk and ctrl, only one urb is active at any one time. For intr
3595 and isoc we remove them once they are completed.) */
3596 urb
= urb_list_first(epid
);
3599 err("Got epid_attn for epid %i with no urb.", epid
);
3600 err("R_USB_EPT_DATA = 0x%x", r_usb_ept_data
);
3601 err("R_USB_STATUS = 0x%x", reg
->r_usb_status
);
3605 switch (usb_pipetype(urb
->pipe
)) {
3607 warn("Got epid attn for bulk endpoint, epid %d", epid
);
3610 warn("Got epid attn for control endpoint, epid %d", epid
);
3612 case PIPE_INTERRUPT
:
3613 warn("Got epid attn for interrupt endpoint, epid %d", epid
);
3615 case PIPE_ISOCHRONOUS
:
3616 warn("Got epid attn for isochronous endpoint, epid %d", epid
);
3620 if (usb_pipetype(urb
->pipe
) != PIPE_ISOCHRONOUS
) {
3621 if (r_usb_ept_data
& IO_MASK(R_USB_EPT_DATA
, hold
)) {
3622 warn("Hold was set for epid %d.", epid
);
3627 /* Even though error_code occupies bits 22 - 23 in both R_USB_EPT_DATA and
3628 R_USB_EPT_DATA_ISOC, we separate them here so we don't forget in other places. */
3629 if (usb_pipetype(urb
->pipe
) == PIPE_ISOCHRONOUS
) {
3630 error_code
= IO_EXTRACT(R_USB_EPT_DATA_ISO
, error_code
, r_usb_ept_data
);
3632 error_code
= IO_EXTRACT(R_USB_EPT_DATA
, error_code
, r_usb_ept_data
);
3635 /* Using IO_STATE_VALUE on R_USB_EPT_DATA should be ok for isoc also. */
3636 if (error_code
== IO_STATE_VALUE(R_USB_EPT_DATA
, error_code
, no_error
)) {
3638 /* Isoc traffic doesn't have error_count_in/error_count_out. */
3639 if ((usb_pipetype(urb
->pipe
) != PIPE_ISOCHRONOUS
) &&
3640 (IO_EXTRACT(R_USB_EPT_DATA
, error_count_in
, r_usb_ept_data
) == 3 ||
3641 IO_EXTRACT(R_USB_EPT_DATA
, error_count_out
, r_usb_ept_data
) == 3)) {
3643 warn("3rd error for epid %i", epid
);
3644 etrax_usb_complete_urb(urb
, -EPROTO
);
3646 } else if (reg
->r_usb_status
& IO_MASK(R_USB_STATUS
, perror
)) {
3648 warn("Perror for epid %d", epid
);
3650 if (!(r_usb_ept_data
& IO_MASK(R_USB_EPT_DATA
, valid
))) {
3652 panic("Perror because of invalid epid."
3653 " Deconfigured too early?");
3655 /* past eof1, near eof, zout transfer, setup transfer */
3657 /* Dump the urb and the relevant EP descriptor list. */
3660 __dump_ept_data(epid
);
3661 __dump_ep_list(usb_pipetype(urb
->pipe
));
3663 panic("Something wrong with DMA descriptor contents."
3664 " Too much traffic inserted?");
3666 } else if (reg
->r_usb_status
& IO_MASK(R_USB_STATUS
, ourun
)) {
3668 panic("Buffer overrun/underrun for epid %d. DMA too busy?", epid
);
3671 } else if (error_code
== IO_STATE_VALUE(R_USB_EPT_DATA
, error_code
, stall
)) {
3672 /* Not really a protocol error, just says that the endpoint gave
3673 a stall response. Note that error_code cannot be stall for isoc. */
3674 if (usb_pipetype(urb
->pipe
) == PIPE_ISOCHRONOUS
) {
3675 panic("Isoc traffic cannot stall");
3678 warn("Stall for epid %d", epid
);
3679 etrax_usb_complete_urb(urb
, -EPIPE
);
3681 } else if (error_code
== IO_STATE_VALUE(R_USB_EPT_DATA
, error_code
, bus_error
)) {
3682 /* Two devices responded to a transaction request. Must be resolved
3683 by software. FIXME: Reset ports? */
3684 panic("Bus error for epid %d."
3685 " Two devices responded to transaction request",
3688 } else if (error_code
== IO_STATE_VALUE(R_USB_EPT_DATA
, error_code
, buffer_error
)) {
3689 /* DMA overrun or underrun. */
3690 warn("Buffer overrun/underrun for epid %d. DMA too busy?", epid
);
3692 /* It seems that error_code = buffer_error in
3693 R_USB_EPT_DATA/R_USB_EPT_DATA_ISO and ourun = yes in R_USB_STATUS
3694 are the same error. */
3695 etrax_usb_complete_urb(urb
, -EPROTO
);
3704 void etrax_usb_bulk_start_timer_func(unsigned long dummy
)
3707 /* We might enable an EP descriptor behind the current DMA position when it's about
3708 to decide that there are no more bulk traffic and it should stop the bulk channel.
3709 Therefore we periodically check if the bulk channel is stopped and there is an
3710 enabled bulk EP descriptor, in which case we start the bulk channel. */
3711 dbg_bulk("bulk_start_timer timed out.");
3713 if (!(*R_DMA_CH8_SUB0_CMD
& IO_MASK(R_DMA_CH8_SUB0_CMD
, cmd
))) {
3716 dbg_bulk("Bulk DMA channel not running.");
3718 for (epid
= 0; epid
< NBR_OF_EPIDS
; epid
++) {
3719 if (TxBulkEPList
[epid
].command
& IO_MASK(USB_EP_command
, enable
)) {
3720 dbg_bulk("Found enabled EP for epid %d, starting bulk channel.\n",
3722 *R_DMA_CH8_SUB0_CMD
= IO_STATE(R_DMA_CH8_SUB0_CMD
, cmd
, start
);
3724 /* Restart the bulk eot timer since we just started the bulk channel. */
3725 mod_timer(&bulk_eot_timer
, jiffies
+ BULK_EOT_TIMER_INTERVAL
);
3727 /* No need to search any further. */
3732 dbg_bulk("Bulk DMA channel running.");
3736 void etrax_usb_hc_port_status_interrupt(usb_interrupt_registers_t
*reg
)
3738 etrax_hc_t
*hc
= reg
->hc
;
3739 __u16 r_usb_rh_port_status_1
= reg
->r_usb_rh_port_status_1
;
3740 __u16 r_usb_rh_port_status_2
= reg
->r_usb_rh_port_status_2
;
3744 /* The Etrax RH does not include a wPortChange register, so this has to be handled in software
3745 (by saving the old port status value for comparison when the port status interrupt happens).
3746 See section 11.16.2.6.2 in the USB 1.1 spec for details. */
3748 dbg_rh("hc->rh.prev_wPortStatus_1 = 0x%x", hc
->rh
.prev_wPortStatus_1
);
3749 dbg_rh("hc->rh.prev_wPortStatus_2 = 0x%x", hc
->rh
.prev_wPortStatus_2
);
3750 dbg_rh("r_usb_rh_port_status_1 = 0x%x", r_usb_rh_port_status_1
);
3751 dbg_rh("r_usb_rh_port_status_2 = 0x%x", r_usb_rh_port_status_2
);
3753 /* C_PORT_CONNECTION is set on any transition. */
3754 hc
->rh
.wPortChange_1
|=
3755 ((r_usb_rh_port_status_1
& (1 << RH_PORT_CONNECTION
)) !=
3756 (hc
->rh
.prev_wPortStatus_1
& (1 << RH_PORT_CONNECTION
))) ?
3757 (1 << RH_PORT_CONNECTION
) : 0;
3759 hc
->rh
.wPortChange_2
|=
3760 ((r_usb_rh_port_status_2
& (1 << RH_PORT_CONNECTION
)) !=
3761 (hc
->rh
.prev_wPortStatus_2
& (1 << RH_PORT_CONNECTION
))) ?
3762 (1 << RH_PORT_CONNECTION
) : 0;
3764 /* C_PORT_ENABLE is _only_ set on a one to zero transition, i.e. when
3765 the port is disabled, not when it's enabled. */
3766 hc
->rh
.wPortChange_1
|=
3767 ((hc
->rh
.prev_wPortStatus_1
& (1 << RH_PORT_ENABLE
))
3768 && !(r_usb_rh_port_status_1
& (1 << RH_PORT_ENABLE
))) ?
3769 (1 << RH_PORT_ENABLE
) : 0;
3771 hc
->rh
.wPortChange_2
|=
3772 ((hc
->rh
.prev_wPortStatus_2
& (1 << RH_PORT_ENABLE
))
3773 && !(r_usb_rh_port_status_2
& (1 << RH_PORT_ENABLE
))) ?
3774 (1 << RH_PORT_ENABLE
) : 0;
3776 /* C_PORT_SUSPEND is set to one when the device has transitioned out
3777 of the suspended state, i.e. when suspend goes from one to zero. */
3778 hc
->rh
.wPortChange_1
|=
3779 ((hc
->rh
.prev_wPortStatus_1
& (1 << RH_PORT_SUSPEND
))
3780 && !(r_usb_rh_port_status_1
& (1 << RH_PORT_SUSPEND
))) ?
3781 (1 << RH_PORT_SUSPEND
) : 0;
3783 hc
->rh
.wPortChange_2
|=
3784 ((hc
->rh
.prev_wPortStatus_2
& (1 << RH_PORT_SUSPEND
))
3785 && !(r_usb_rh_port_status_2
& (1 << RH_PORT_SUSPEND
))) ?
3786 (1 << RH_PORT_SUSPEND
) : 0;
3789 /* C_PORT_RESET is set when reset processing on this port is complete. */
3790 hc
->rh
.wPortChange_1
|=
3791 ((hc
->rh
.prev_wPortStatus_1
& (1 << RH_PORT_RESET
))
3792 && !(r_usb_rh_port_status_1
& (1 << RH_PORT_RESET
))) ?
3793 (1 << RH_PORT_RESET
) : 0;
3795 hc
->rh
.wPortChange_2
|=
3796 ((hc
->rh
.prev_wPortStatus_2
& (1 << RH_PORT_RESET
))
3797 && !(r_usb_rh_port_status_2
& (1 << RH_PORT_RESET
))) ?
3798 (1 << RH_PORT_RESET
) : 0;
3800 /* Save the new values for next port status change. */
3801 hc
->rh
.prev_wPortStatus_1
= r_usb_rh_port_status_1
;
3802 hc
->rh
.prev_wPortStatus_2
= r_usb_rh_port_status_2
;
3804 dbg_rh("hc->rh.wPortChange_1 set to 0x%x", hc
->rh
.wPortChange_1
);
3805 dbg_rh("hc->rh.wPortChange_2 set to 0x%x", hc
->rh
.wPortChange_2
);
3811 void etrax_usb_hc_ctl_status_interrupt(usb_interrupt_registers_t
*reg
)
3815 /* FIXME: What should we do if we get ourun or perror? Dump the EP and SB
3816 list for the corresponding epid? */
3817 if (reg
->r_usb_status
& IO_MASK(R_USB_STATUS
, ourun
)) {
3818 panic("USB controller got ourun.");
3820 if (reg
->r_usb_status
& IO_MASK(R_USB_STATUS
, perror
)) {
3822 /* Before, etrax_usb_do_intr_recover was called on this epid if it was
3823 an interrupt pipe. I don't see how re-enabling all EP descriptors
3824 will help if there was a programming error. */
3825 panic("USB controller got perror.");
3828 if (reg
->r_usb_status
& IO_MASK(R_USB_STATUS
, device_mode
)) {
3829 /* We should never operate in device mode. */
3830 panic("USB controller in device mode.");
3833 /* These if-statements could probably be nested. */
3834 if (reg
->r_usb_status
& IO_MASK(R_USB_STATUS
, host_mode
)) {
3835 info("USB controller in host mode.");
3837 if (reg
->r_usb_status
& IO_MASK(R_USB_STATUS
, started
)) {
3838 info("USB controller started.");
3840 if (reg
->r_usb_status
& IO_MASK(R_USB_STATUS
, running
)) {
3841 info("USB controller running.");
3849 static int etrax_rh_submit_urb(struct urb
*urb
)
3851 struct usb_device
*usb_dev
= urb
->dev
;
3852 etrax_hc_t
*hc
= usb_dev
->bus
->hcpriv
;
3853 unsigned int pipe
= urb
->pipe
;
3854 struct usb_ctrlrequest
*cmd
= (struct usb_ctrlrequest
*) urb
->setup_packet
;
3855 void *data
= urb
->transfer_buffer
;
3856 int leni
= urb
->transfer_buffer_length
;
3867 /* FIXME: What is this interrupt urb that is sent to the root hub? */
3868 if (usb_pipetype (pipe
) == PIPE_INTERRUPT
) {
3869 dbg_rh("Root-Hub submit IRQ: every %d ms", urb
->interval
);
3872 /* FIXME: We could probably remove this line since it's done
3873 in etrax_rh_init_int_timer. (Don't remove it from
3874 etrax_rh_init_int_timer though.) */
3875 hc
->rh
.interval
= urb
->interval
;
3876 etrax_rh_init_int_timer(urb
);
3882 bmRType_bReq
= cmd
->bRequestType
| (cmd
->bRequest
<< 8);
3883 wValue
= le16_to_cpu(cmd
->wValue
);
3884 wIndex
= le16_to_cpu(cmd
->wIndex
);
3885 wLength
= le16_to_cpu(cmd
->wLength
);
3887 dbg_rh("bmRType_bReq : 0x%04x (%d)", bmRType_bReq
, bmRType_bReq
);
3888 dbg_rh("wValue : 0x%04x (%d)", wValue
, wValue
);
3889 dbg_rh("wIndex : 0x%04x (%d)", wIndex
, wIndex
);
3890 dbg_rh("wLength : 0x%04x (%d)", wLength
, wLength
);
3892 switch (bmRType_bReq
) {
3894 /* Request Destination:
3895 without flags: Device,
3896 RH_INTERFACE: interface,
3897 RH_ENDPOINT: endpoint,
3898 RH_CLASS means HUB here,
3899 RH_OTHER | RH_CLASS almost ever means HUB_PORT here
3903 *(__u16
*) data
= cpu_to_le16 (1);
3906 case RH_GET_STATUS
| RH_INTERFACE
:
3907 *(__u16
*) data
= cpu_to_le16 (0);
3910 case RH_GET_STATUS
| RH_ENDPOINT
:
3911 *(__u16
*) data
= cpu_to_le16 (0);
3914 case RH_GET_STATUS
| RH_CLASS
:
3915 *(__u32
*) data
= cpu_to_le32 (0);
3916 OK (4); /* hub power ** */
3918 case RH_GET_STATUS
| RH_OTHER
| RH_CLASS
:
3920 *((__u16
*)data
) = cpu_to_le16(hc
->rh
.prev_wPortStatus_1
);
3921 *((__u16
*)data
+ 1) = cpu_to_le16(hc
->rh
.wPortChange_1
);
3922 } else if (wIndex
== 2) {
3923 *((__u16
*)data
) = cpu_to_le16(hc
->rh
.prev_wPortStatus_2
);
3924 *((__u16
*)data
+ 1) = cpu_to_le16(hc
->rh
.wPortChange_2
);
3926 dbg_rh("RH_GET_STATUS whith invalid wIndex!");
3932 case RH_CLEAR_FEATURE
| RH_ENDPOINT
:
3934 case (RH_ENDPOINT_STALL
):
3939 case RH_CLEAR_FEATURE
| RH_CLASS
:
3941 case (RH_C_HUB_OVER_CURRENT
):
3942 OK (0); /* hub power over current ** */
3946 case RH_CLEAR_FEATURE
| RH_OTHER
| RH_CLASS
:
3948 case (RH_PORT_ENABLE
):
3951 dbg_rh("trying to do disable port 1");
3953 *R_USB_PORT1_DISABLE
= IO_STATE(R_USB_PORT1_DISABLE
, disable
, yes
);
3955 while (hc
->rh
.prev_wPortStatus_1
&
3956 IO_STATE(R_USB_RH_PORT_STATUS_1
, enabled
, yes
));
3957 *R_USB_PORT1_DISABLE
= IO_STATE(R_USB_PORT1_DISABLE
, disable
, no
);
3958 dbg_rh("Port 1 is disabled");
3960 } else if (wIndex
== 2) {
3962 dbg_rh("trying to do disable port 2");
3964 *R_USB_PORT2_DISABLE
= IO_STATE(R_USB_PORT2_DISABLE
, disable
, yes
);
3966 while (hc
->rh
.prev_wPortStatus_2
&
3967 IO_STATE(R_USB_RH_PORT_STATUS_2
, enabled
, yes
));
3968 *R_USB_PORT2_DISABLE
= IO_STATE(R_USB_PORT2_DISABLE
, disable
, no
);
3969 dbg_rh("Port 2 is disabled");
3972 dbg_rh("RH_CLEAR_FEATURE->RH_PORT_ENABLE "
3973 "with invalid wIndex == %d!", wIndex
);
3977 case (RH_PORT_SUSPEND
):
3978 /* Opposite to suspend should be resume, so we'll do a resume. */
3979 /* FIXME: USB 1.1, 11.16.2.2 says:
3980 "Clearing the PORT_SUSPEND feature causes a host-initiated resume
3981 on the specified port. If the port is not in the Suspended state,
3982 the hub should treat this request as a functional no-operation."
3983 Shouldn't we check if the port is in a suspended state before
3986 /* Make sure the controller isn't busy. */
3987 while (*R_USB_COMMAND
& IO_MASK(R_USB_COMMAND
, busy
));
3991 IO_STATE(R_USB_COMMAND
, port_sel
, port1
) |
3992 IO_STATE(R_USB_COMMAND
, port_cmd
, resume
) |
3993 IO_STATE(R_USB_COMMAND
, ctrl_cmd
, nop
);
3994 } else if (wIndex
== 2) {
3996 IO_STATE(R_USB_COMMAND
, port_sel
, port2
) |
3997 IO_STATE(R_USB_COMMAND
, port_cmd
, resume
) |
3998 IO_STATE(R_USB_COMMAND
, ctrl_cmd
, nop
);
4000 dbg_rh("RH_CLEAR_FEATURE->RH_PORT_SUSPEND "
4001 "with invalid wIndex == %d!", wIndex
);
4005 case (RH_PORT_POWER
):
4006 OK (0); /* port power ** */
4007 case (RH_C_PORT_CONNECTION
):
4009 hc
->rh
.wPortChange_1
&= ~(1 << RH_PORT_CONNECTION
);
4010 } else if (wIndex
== 2) {
4011 hc
->rh
.wPortChange_2
&= ~(1 << RH_PORT_CONNECTION
);
4013 dbg_rh("RH_CLEAR_FEATURE->RH_C_PORT_CONNECTION "
4014 "with invalid wIndex == %d!", wIndex
);
4018 case (RH_C_PORT_ENABLE
):
4020 hc
->rh
.wPortChange_1
&= ~(1 << RH_PORT_ENABLE
);
4021 } else if (wIndex
== 2) {
4022 hc
->rh
.wPortChange_2
&= ~(1 << RH_PORT_ENABLE
);
4024 dbg_rh("RH_CLEAR_FEATURE->RH_C_PORT_ENABLE "
4025 "with invalid wIndex == %d!", wIndex
);
4028 case (RH_C_PORT_SUSPEND
):
4029 /*** WR_RH_PORTSTAT(RH_PS_PSSC); */
4031 case (RH_C_PORT_OVER_CURRENT
):
4032 OK (0); /* port power over current ** */
4033 case (RH_C_PORT_RESET
):
4035 hc
->rh
.wPortChange_1
&= ~(1 << RH_PORT_RESET
);
4036 } else if (wIndex
== 2) {
4037 hc
->rh
.wPortChange_2
&= ~(1 << RH_PORT_RESET
);
4039 dbg_rh("RH_CLEAR_FEATURE->RH_C_PORT_RESET "
4040 "with invalid index == %d!", wIndex
);
4048 case RH_SET_FEATURE
| RH_OTHER
| RH_CLASS
:
4050 case (RH_PORT_SUSPEND
):
4052 /* Make sure the controller isn't busy. */
4053 while (*R_USB_COMMAND
& IO_MASK(R_USB_COMMAND
, busy
));
4057 IO_STATE(R_USB_COMMAND
, port_sel
, port1
) |
4058 IO_STATE(R_USB_COMMAND
, port_cmd
, suspend
) |
4059 IO_STATE(R_USB_COMMAND
, ctrl_cmd
, nop
);
4060 } else if (wIndex
== 2) {
4062 IO_STATE(R_USB_COMMAND
, port_sel
, port2
) |
4063 IO_STATE(R_USB_COMMAND
, port_cmd
, suspend
) |
4064 IO_STATE(R_USB_COMMAND
, ctrl_cmd
, nop
);
4066 dbg_rh("RH_SET_FEATURE->RH_PORT_SUSPEND "
4067 "with invalid wIndex == %d!", wIndex
);
4071 case (RH_PORT_RESET
):
4075 dbg_rh("Doing reset of port 1");
4077 /* Make sure the controller isn't busy. */
4078 while (*R_USB_COMMAND
& IO_MASK(R_USB_COMMAND
, busy
));
4081 IO_STATE(R_USB_COMMAND
, port_sel
, port1
) |
4082 IO_STATE(R_USB_COMMAND
, port_cmd
, reset
) |
4083 IO_STATE(R_USB_COMMAND
, ctrl_cmd
, nop
);
4085 /* We must wait at least 10 ms for the device to recover.
4086 15 ms should be enough. */
4089 /* Wait for reset bit to go low (should be done by now). */
4090 while (hc
->rh
.prev_wPortStatus_1
&
4091 IO_STATE(R_USB_RH_PORT_STATUS_1
, reset
, yes
));
4093 /* If the port status is
4094 1) connected and enabled then there is a device and everything is fine
4095 2) neither connected nor enabled then there is no device, also fine
4096 3) connected and not enabled then we try again
4097 (Yes, there are other port status combinations besides these.) */
4099 if ((hc
->rh
.prev_wPortStatus_1
&
4100 IO_STATE(R_USB_RH_PORT_STATUS_1
, connected
, yes
)) &&
4101 (hc
->rh
.prev_wPortStatus_1
&
4102 IO_STATE(R_USB_RH_PORT_STATUS_1
, enabled
, no
))) {
4103 dbg_rh("Connected device on port 1, but port not enabled?"
4104 " Trying reset again.");
4108 /* Diagnostic printouts. */
4109 if ((hc
->rh
.prev_wPortStatus_1
&
4110 IO_STATE(R_USB_RH_PORT_STATUS_1
, connected
, no
)) &&
4111 (hc
->rh
.prev_wPortStatus_1
&
4112 IO_STATE(R_USB_RH_PORT_STATUS_1
, enabled
, no
))) {
4113 dbg_rh("No connected device on port 1");
4114 } else if ((hc
->rh
.prev_wPortStatus_1
&
4115 IO_STATE(R_USB_RH_PORT_STATUS_1
, connected
, yes
)) &&
4116 (hc
->rh
.prev_wPortStatus_1
&
4117 IO_STATE(R_USB_RH_PORT_STATUS_1
, enabled
, yes
))) {
4118 dbg_rh("Connected device on port 1, port 1 enabled");
4121 } else if (wIndex
== 2) {
4124 dbg_rh("Doing reset of port 2");
4126 /* Make sure the controller isn't busy. */
4127 while (*R_USB_COMMAND
& IO_MASK(R_USB_COMMAND
, busy
));
4129 /* Issue the reset command. */
4131 IO_STATE(R_USB_COMMAND
, port_sel
, port2
) |
4132 IO_STATE(R_USB_COMMAND
, port_cmd
, reset
) |
4133 IO_STATE(R_USB_COMMAND
, ctrl_cmd
, nop
);
4135 /* We must wait at least 10 ms for the device to recover.
4136 15 ms should be enough. */
4139 /* Wait for reset bit to go low (should be done by now). */
4140 while (hc
->rh
.prev_wPortStatus_2
&
4141 IO_STATE(R_USB_RH_PORT_STATUS_2
, reset
, yes
));
4143 /* If the port status is
4144 1) connected and enabled then there is a device and everything is fine
4145 2) neither connected nor enabled then there is no device, also fine
4146 3) connected and not enabled then we try again
4147 (Yes, there are other port status combinations besides these.) */
4149 if ((hc
->rh
.prev_wPortStatus_2
&
4150 IO_STATE(R_USB_RH_PORT_STATUS_2
, connected
, yes
)) &&
4151 (hc
->rh
.prev_wPortStatus_2
&
4152 IO_STATE(R_USB_RH_PORT_STATUS_2
, enabled
, no
))) {
4153 dbg_rh("Connected device on port 2, but port not enabled?"
4154 " Trying reset again.");
4158 /* Diagnostic printouts. */
4159 if ((hc
->rh
.prev_wPortStatus_2
&
4160 IO_STATE(R_USB_RH_PORT_STATUS_2
, connected
, no
)) &&
4161 (hc
->rh
.prev_wPortStatus_2
&
4162 IO_STATE(R_USB_RH_PORT_STATUS_2
, enabled
, no
))) {
4163 dbg_rh("No connected device on port 2");
4164 } else if ((hc
->rh
.prev_wPortStatus_2
&
4165 IO_STATE(R_USB_RH_PORT_STATUS_2
, connected
, yes
)) &&
4166 (hc
->rh
.prev_wPortStatus_2
&
4167 IO_STATE(R_USB_RH_PORT_STATUS_2
, enabled
, yes
))) {
4168 dbg_rh("Connected device on port 2, port 2 enabled");
4172 dbg_rh("RH_SET_FEATURE->RH_PORT_RESET with invalid wIndex = %d", wIndex
);
4175 /* Make sure the controller isn't busy. */
4176 while (*R_USB_COMMAND
& IO_MASK(R_USB_COMMAND
, busy
));
4178 /* If all enabled ports were disabled the host controller goes down into
4179 started mode, so we need to bring it back into the running state.
4180 (This is safe even if it's already in the running state.) */
4182 IO_STATE(R_USB_COMMAND
, port_sel
, nop
) |
4183 IO_STATE(R_USB_COMMAND
, port_cmd
, reset
) |
4184 IO_STATE(R_USB_COMMAND
, ctrl_cmd
, host_run
);
4189 case (RH_PORT_POWER
):
4190 OK (0); /* port power ** */
4191 case (RH_PORT_ENABLE
):
4192 /* There is no port enable command in the host controller, so if the
4193 port is already enabled, we do nothing. If not, we reset the port
4194 (with an ugly goto). */
4197 if (hc
->rh
.prev_wPortStatus_1
&
4198 IO_STATE(R_USB_RH_PORT_STATUS_1
, enabled
, no
)) {
4201 } else if (wIndex
== 2) {
4202 if (hc
->rh
.prev_wPortStatus_2
&
4203 IO_STATE(R_USB_RH_PORT_STATUS_2
, enabled
, no
)) {
4207 dbg_rh("RH_SET_FEATURE->RH_GET_STATUS with invalid wIndex = %d", wIndex
);
4213 case RH_SET_ADDRESS
:
4214 hc
->rh
.devnum
= wValue
;
4215 dbg_rh("RH address set to: %d", hc
->rh
.devnum
);
4218 case RH_GET_DESCRIPTOR
:
4219 switch ((wValue
& 0xff00) >> 8) {
4220 case (0x01): /* device descriptor */
4221 len
= min_t(unsigned int, leni
, min_t(unsigned int, sizeof (root_hub_dev_des
), wLength
));
4222 memcpy (data
, root_hub_dev_des
, len
);
4224 case (0x02): /* configuration descriptor */
4225 len
= min_t(unsigned int, leni
, min_t(unsigned int, sizeof (root_hub_config_des
), wLength
));
4226 memcpy (data
, root_hub_config_des
, len
);
4228 case (0x03): /* string descriptors */
4229 len
= usb_root_hub_string (wValue
& 0xff,
4230 0xff, "ETRAX 100LX",
4241 case RH_GET_DESCRIPTOR
| RH_CLASS
:
4242 root_hub_hub_des
[2] = hc
->rh
.numports
;
4243 len
= min_t(unsigned int, leni
, min_t(unsigned int, sizeof (root_hub_hub_des
), wLength
));
4244 memcpy (data
, root_hub_hub_des
, len
);
4247 case RH_GET_CONFIGURATION
:
4248 *(__u8
*) data
= 0x01;
4251 case RH_SET_CONFIGURATION
:
4258 urb
->actual_length
= len
;
4261 if (urb
->complete
) {
4262 urb
->complete(urb
, NULL
);
4270 etrax_usb_bulk_eot_timer_func(unsigned long dummy
)
4272 /* Because of a race condition in the top half, we might miss a bulk eot.
4273 This timer "simulates" a bulk eot if we don't get one for a while, hopefully
4274 correcting the situation. */
4275 dbg_bulk("bulk_eot_timer timed out.");
4276 etrax_usb_hc_bulk_eot_interrupt(1);
4280 etrax_usb_buffer_alloc(struct usb_bus
* bus
, size_t size
, int mem_flags
, dma_addr_t
*dma
)
4282 return kmalloc(size
, mem_flags
);
4286 etrax_usb_buffer_free(struct usb_bus
*bus
, size_t size
, void *addr
, dma_addr_t dma
)
4292 static struct device fake_device
;
4294 static int __init
etrax_usb_hc_init(void)
4296 static etrax_hc_t
*hc
;
4297 struct usb_bus
*bus
;
4298 struct usb_device
*usb_rh
;
4303 info("ETRAX 100LX USB-HCD %s (c) 2001-2003 Axis Communications AB\n", usb_hcd_version
);
4305 hc
= kmalloc(sizeof(etrax_hc_t
), GFP_KERNEL
);
4308 /* We use kmem_cache_* to make sure that all DMA desc. are dword aligned */
4309 /* Note that we specify sizeof(USB_EP_Desc_t) as the size, but also allocate
4310 SB descriptors from this cache. This is ok since sizeof(USB_EP_Desc_t) ==
4311 sizeof(USB_SB_Desc_t). */
4313 usb_desc_cache
= kmem_cache_create("usb_desc_cache", sizeof(USB_EP_Desc_t
), 0,
4314 SLAB_HWCACHE_ALIGN
, 0, 0);
4315 assert(usb_desc_cache
!= NULL
);
4317 top_half_reg_cache
= kmem_cache_create("top_half_reg_cache",
4318 sizeof(usb_interrupt_registers_t
),
4319 0, SLAB_HWCACHE_ALIGN
, 0, 0);
4320 assert(top_half_reg_cache
!= NULL
);
4322 isoc_compl_cache
= kmem_cache_create("isoc_compl_cache",
4323 sizeof(usb_isoc_complete_data_t
),
4324 0, SLAB_HWCACHE_ALIGN
, 0, 0);
4325 assert(isoc_compl_cache
!= NULL
);
4327 etrax_usb_bus
= bus
= usb_alloc_bus(&etrax_usb_device_operations
);
4329 bus
->bus_name
="ETRAX 100LX";
4332 /* Initalize RH to the default address.
4333 And make sure that we have no status change indication */
4334 hc
->rh
.numports
= 2; /* The RH has two ports */
4336 hc
->rh
.wPortChange_1
= 0;
4337 hc
->rh
.wPortChange_2
= 0;
4339 /* Also initate the previous values to zero */
4340 hc
->rh
.prev_wPortStatus_1
= 0;
4341 hc
->rh
.prev_wPortStatus_2
= 0;
4343 /* Initialize the intr-traffic flags */
4344 /* FIXME: This isn't used. (Besides, the error field isn't initialized.) */
4345 hc
->intr
.sleeping
= 0;
4348 epid_usage_bitmask
= 0;
4349 epid_out_traffic
= 0;
4351 /* Mark the invalid epid as being used. */
4352 set_bit(INVALID_EPID
, (void *)&epid_usage_bitmask
);
4353 *R_USB_EPT_INDEX
= IO_FIELD(R_USB_EPT_INDEX
, value
, INVALID_EPID
);
4355 /* The valid bit should still be set ('invalid' is in our world; not the hardware's). */
4356 *R_USB_EPT_DATA
= (IO_STATE(R_USB_EPT_DATA
, valid
, yes
) |
4357 IO_FIELD(R_USB_EPT_DATA
, max_len
, 1));
4359 /* Mark the dummy epid as being used. */
4360 set_bit(DUMMY_EPID
, (void *)&epid_usage_bitmask
);
4361 *R_USB_EPT_INDEX
= IO_FIELD(R_USB_EPT_INDEX
, value
, DUMMY_EPID
);
4363 *R_USB_EPT_DATA
= (IO_STATE(R_USB_EPT_DATA
, valid
, no
) |
4364 IO_FIELD(R_USB_EPT_DATA
, max_len
, 1));
4366 /* Initialize the urb list by initiating a head for each list. */
4367 for (i
= 0; i
< NBR_OF_EPIDS
; i
++) {
4368 INIT_LIST_HEAD(&urb_list
[i
]);
4370 spin_lock_init(&urb_list_lock
);
4372 INIT_LIST_HEAD(&urb_unlink_list
);
4375 /* Initiate the bulk start timer. */
4376 init_timer(&bulk_start_timer
);
4377 bulk_start_timer
.expires
= jiffies
+ BULK_START_TIMER_INTERVAL
;
4378 bulk_start_timer
.function
= etrax_usb_bulk_start_timer_func
;
4379 add_timer(&bulk_start_timer
);
4382 /* Initiate the bulk eot timer. */
4383 init_timer(&bulk_eot_timer
);
4384 bulk_eot_timer
.expires
= jiffies
+ BULK_EOT_TIMER_INTERVAL
;
4385 bulk_eot_timer
.function
= etrax_usb_bulk_eot_timer_func
;
4386 add_timer(&bulk_eot_timer
);
4388 /* Set up the data structures for USB traffic. Note that this must be done before
4389 any interrupt that relies on sane DMA list occurrs. */
4396 device_initialize(&fake_device
);
4397 kobject_set_name(&fake_device
.kobj
, "etrax_usb");
4398 kobject_add(&fake_device
.kobj
);
4399 kobject_hotplug(&fake_device
.kobj
, KOBJ_ADD
);
4400 hc
->bus
->controller
= &fake_device
;
4401 usb_register_bus(hc
->bus
);
4404 /* Note that these interrupts are not used. */
4405 IO_STATE(R_IRQ_MASK2_SET
, dma8_sub0_descr
, set
) |
4406 /* Sub channel 1 (ctrl) descr. interrupts are used. */
4407 IO_STATE(R_IRQ_MASK2_SET
, dma8_sub1_descr
, set
) |
4408 IO_STATE(R_IRQ_MASK2_SET
, dma8_sub2_descr
, set
) |
4409 /* Sub channel 3 (isoc) descr. interrupts are used. */
4410 IO_STATE(R_IRQ_MASK2_SET
, dma8_sub3_descr
, set
);
4412 /* Note that the dma9_descr interrupt is not used. */
4414 IO_STATE(R_IRQ_MASK2_SET
, dma9_eop
, set
) |
4415 IO_STATE(R_IRQ_MASK2_SET
, dma9_descr
, set
);
4417 /* FIXME: Enable iso_eof only when isoc traffic is running. */
4418 *R_USB_IRQ_MASK_SET
=
4419 IO_STATE(R_USB_IRQ_MASK_SET
, iso_eof
, set
) |
4420 IO_STATE(R_USB_IRQ_MASK_SET
, bulk_eot
, set
) |
4421 IO_STATE(R_USB_IRQ_MASK_SET
, epid_attn
, set
) |
4422 IO_STATE(R_USB_IRQ_MASK_SET
, port_status
, set
) |
4423 IO_STATE(R_USB_IRQ_MASK_SET
, ctl_status
, set
);
4426 if (request_irq(ETRAX_USB_HC_IRQ
, etrax_usb_hc_interrupt_top_half
, 0,
4427 "ETRAX 100LX built-in USB (HC)", hc
)) {
4428 err("Could not allocate IRQ %d for USB", ETRAX_USB_HC_IRQ
);
4429 etrax_usb_hc_cleanup();
4434 if (request_irq(ETRAX_USB_RX_IRQ
, etrax_usb_rx_interrupt
, 0,
4435 "ETRAX 100LX built-in USB (Rx)", hc
)) {
4436 err("Could not allocate IRQ %d for USB", ETRAX_USB_RX_IRQ
);
4437 etrax_usb_hc_cleanup();
4442 if (request_irq(ETRAX_USB_TX_IRQ
, etrax_usb_tx_interrupt
, 0,
4443 "ETRAX 100LX built-in USB (Tx)", hc
)) {
4444 err("Could not allocate IRQ %d for USB", ETRAX_USB_TX_IRQ
);
4445 etrax_usb_hc_cleanup();
4451 USB commands in host mode. The fields in this register should all be
4452 written to in one write. Do not read-modify-write one field at a time. A
4453 write to this register will trigger events in the USB controller and an
4454 incomplete command may lead to unpredictable results, and in worst case
4455 even to a deadlock in the controller.
4456 (Note however that the busy field is read-only, so no need to write to it.) */
4458 /* Check the busy bit before writing to R_USB_COMMAND. */
4460 while (*R_USB_COMMAND
& IO_MASK(R_USB_COMMAND
, busy
));
4462 /* Reset the USB interface. */
4464 IO_STATE(R_USB_COMMAND
, port_sel
, nop
) |
4465 IO_STATE(R_USB_COMMAND
, port_cmd
, reset
) |
4466 IO_STATE(R_USB_COMMAND
, ctrl_cmd
, reset
);
4468 /* Designer's Reference, p. 8 - 10 says we should Initate R_USB_FM_PSTART to 0x2A30 (10800),
4469 to guarantee that control traffic gets 10% of the bandwidth, and periodic transfer may
4470 allocate the rest (90%). This doesn't work though. Read on for a lenghty explanation.
4472 While there is a difference between rev. 2 and rev. 3 of the ETRAX 100LX regarding the NAK
4473 behaviour, it doesn't solve this problem. What happens is that a control transfer will not
4474 be interrupted in its data stage when PSTART happens (the point at which periodic traffic
4475 is started). Thus, if PSTART is set to 10800 and its IN or OUT token is NAKed until just before
4476 PSTART happens, it will continue the IN/OUT transfer as long as it's ACKed. After it's done,
4477 there may be too little time left for an isochronous transfer, causing an epid attention
4478 interrupt due to perror. The work-around for this is to let the control transfers run at the
4479 end of the frame instead of at the beginning, and will be interrupted just fine if it doesn't
4480 fit into the frame. However, since there will *always* be a control transfer at the beginning
4481 of the frame, regardless of what we set PSTART to, that transfer might be a 64-byte transfer
4482 which consumes up to 15% of the frame, leaving only 85% for periodic traffic. The solution to
4483 this would be to 'dummy allocate' 5% of the frame with the usb_claim_bandwidth function to make
4484 sure that the periodic transfers that are inserted will always fit in the frame.
4486 The idea was suggested that a control transfer could be split up into several 8 byte transfers,
4487 so that it would be interrupted by PSTART, but since this can't be done for an IN transfer this
4488 hasn't been implemented.
4490 The value 11960 is chosen to be just after the SOF token, with a couple of bit times extra
4491 for possible bit stuffing. */
4493 *R_USB_FM_PSTART
= IO_FIELD(R_USB_FM_PSTART
, value
, 11960);
4495 #ifdef CONFIG_ETRAX_USB_HOST_PORT1
4496 *R_USB_PORT1_DISABLE
= IO_STATE(R_USB_PORT1_DISABLE
, disable
, no
);
4499 #ifdef CONFIG_ETRAX_USB_HOST_PORT2
4500 *R_USB_PORT2_DISABLE
= IO_STATE(R_USB_PORT2_DISABLE
, disable
, no
);
4503 while (*R_USB_COMMAND
& IO_MASK(R_USB_COMMAND
, busy
));
4505 /* Configure the USB interface as a host controller. */
4507 IO_STATE(R_USB_COMMAND
, port_sel
, nop
) |
4508 IO_STATE(R_USB_COMMAND
, port_cmd
, reset
) |
4509 IO_STATE(R_USB_COMMAND
, ctrl_cmd
, host_config
);
4511 /* Note: Do not reset any ports here. Await the port status interrupts, to have a controlled
4512 sequence of resetting the ports. If we reset both ports now, and there are devices
4513 on both ports, we will get a bus error because both devices will answer the set address
4516 while (*R_USB_COMMAND
& IO_MASK(R_USB_COMMAND
, busy
));
4518 /* Start processing of USB traffic. */
4520 IO_STATE(R_USB_COMMAND
, port_sel
, nop
) |
4521 IO_STATE(R_USB_COMMAND
, port_cmd
, reset
) |
4522 IO_STATE(R_USB_COMMAND
, ctrl_cmd
, host_run
);
4524 while (*R_USB_COMMAND
& IO_MASK(R_USB_COMMAND
, busy
));
4526 usb_rh
= usb_alloc_dev(NULL
, hc
->bus
, 0);
4527 hc
->bus
->root_hub
= usb_rh
;
4528 usb_rh
->state
= USB_STATE_ADDRESS
;
4529 usb_rh
->speed
= USB_SPEED_FULL
;
4531 hc
->bus
->devnum_next
= 2;
4532 usb_rh
->ep0
.desc
.wMaxPacketSize
= __const_cpu_to_le16(64);
4533 usb_get_device_descriptor(usb_rh
, USB_DT_DEVICE_SIZE
);
4534 usb_new_device(usb_rh
);
4541 static void etrax_usb_hc_cleanup(void)
4545 free_irq(ETRAX_USB_HC_IRQ
, NULL
);
4546 free_irq(ETRAX_USB_RX_IRQ
, NULL
);
4547 free_irq(ETRAX_USB_TX_IRQ
, NULL
);
4549 usb_deregister_bus(etrax_usb_bus
);
4551 /* FIXME: call kmem_cache_destroy here? */
4556 module_init(etrax_usb_hc_init
);
4557 module_exit(etrax_usb_hc_cleanup
);