[PATCH] timer initialization cleanup: DEFINE_TIMER
[deliverable/linux.git] / drivers / usb / host / hc_crisv10.c
1 /*
2 * usb-host.c: ETRAX 100LX USB Host Controller Driver (HCD)
3 *
4 * Copyright (c) 2002, 2003 Axis Communications AB.
5 */
6
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>
20
21 #include <asm/uaccess.h>
22 #include <asm/io.h>
23 #include <asm/irq.h>
24 #include <asm/dma.h>
25 #include <asm/system.h>
26 #include <asm/arch/svinto.h>
27
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>
32
33 #include "hc_crisv10.h"
34
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
38
39 static const char *usb_hcd_version = "$Revision: 1.2 $";
40
41 #undef KERN_DEBUG
42 #define KERN_DEBUG ""
43
44
45 #undef USB_DEBUG_RH
46 #undef USB_DEBUG_EPID
47 #undef USB_DEBUG_SB
48 #undef USB_DEBUG_DESC
49 #undef USB_DEBUG_URB
50 #undef USB_DEBUG_TRACE
51 #undef USB_DEBUG_BULK
52 #undef USB_DEBUG_CTRL
53 #undef USB_DEBUG_INTR
54 #undef USB_DEBUG_ISOC
55
56 #ifdef USB_DEBUG_RH
57 #define dbg_rh(format, arg...) printk(KERN_DEBUG __FILE__ ": (RH) " format "\n" , ## arg)
58 #else
59 #define dbg_rh(format, arg...) do {} while (0)
60 #endif
61
62 #ifdef USB_DEBUG_EPID
63 #define dbg_epid(format, arg...) printk(KERN_DEBUG __FILE__ ": (EPID) " format "\n" , ## arg)
64 #else
65 #define dbg_epid(format, arg...) do {} while (0)
66 #endif
67
68 #ifdef USB_DEBUG_SB
69 #define dbg_sb(format, arg...) printk(KERN_DEBUG __FILE__ ": (SB) " format "\n" , ## arg)
70 #else
71 #define dbg_sb(format, arg...) do {} while (0)
72 #endif
73
74 #ifdef USB_DEBUG_CTRL
75 #define dbg_ctrl(format, arg...) printk(KERN_DEBUG __FILE__ ": (CTRL) " format "\n" , ## arg)
76 #else
77 #define dbg_ctrl(format, arg...) do {} while (0)
78 #endif
79
80 #ifdef USB_DEBUG_BULK
81 #define dbg_bulk(format, arg...) printk(KERN_DEBUG __FILE__ ": (BULK) " format "\n" , ## arg)
82 #else
83 #define dbg_bulk(format, arg...) do {} while (0)
84 #endif
85
86 #ifdef USB_DEBUG_INTR
87 #define dbg_intr(format, arg...) printk(KERN_DEBUG __FILE__ ": (INTR) " format "\n" , ## arg)
88 #else
89 #define dbg_intr(format, arg...) do {} while (0)
90 #endif
91
92 #ifdef USB_DEBUG_ISOC
93 #define dbg_isoc(format, arg...) printk(KERN_DEBUG __FILE__ ": (ISOC) " format "\n" , ## arg)
94 #else
95 #define dbg_isoc(format, arg...) do {} while (0)
96 #endif
97
98 #ifdef USB_DEBUG_TRACE
99 #define DBFENTER (printk(": Entering: %s\n", __FUNCTION__))
100 #define DBFEXIT (printk(": Exiting: %s\n", __FUNCTION__))
101 #else
102 #define DBFENTER do {} while (0)
103 #define DBFEXIT do {} while (0)
104 #endif
105
106 #define usb_pipeslow(pipe) (((pipe) >> 26) & 1)
107
108 /*-------------------------------------------------------------------
109 Virtual Root Hub
110 -------------------------------------------------------------------*/
111
112 static __u8 root_hub_dev_des[] =
113 {
114 0x12, /* __u8 bLength; */
115 0x01, /* __u8 bDescriptorType; Device */
116 0x00, /* __le16 bcdUSB; v1.0 */
117 0x01,
118 0x09, /* __u8 bDeviceClass; HUB_CLASSCODE */
119 0x00, /* __u8 bDeviceSubClass; */
120 0x00, /* __u8 bDeviceProtocol; */
121 0x08, /* __u8 bMaxPacketSize0; 8 Bytes */
122 0x00, /* __le16 idVendor; */
123 0x00,
124 0x00, /* __le16 idProduct; */
125 0x00,
126 0x00, /* __le16 bcdDevice; */
127 0x00,
128 0x00, /* __u8 iManufacturer; */
129 0x02, /* __u8 iProduct; */
130 0x01, /* __u8 iSerialNumber; */
131 0x01 /* __u8 bNumConfigurations; */
132 };
133
134 /* Configuration descriptor */
135 static __u8 root_hub_config_des[] =
136 {
137 0x09, /* __u8 bLength; */
138 0x02, /* __u8 bDescriptorType; Configuration */
139 0x19, /* __le16 wTotalLength; */
140 0x00,
141 0x01, /* __u8 bNumInterfaces; */
142 0x01, /* __u8 bConfigurationValue; */
143 0x00, /* __u8 iConfiguration; */
144 0x40, /* __u8 bmAttributes; Bit 7: Bus-powered */
145 0x00, /* __u8 MaxPower; */
146
147 /* interface */
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; */
157
158 /* endpoint */
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 */
164 0x00,
165 0xff /* __u8 ep_bInterval; 255 ms */
166 };
167
168 static __u8 root_hub_hub_des[] =
169 {
170 0x09, /* __u8 bLength; */
171 0x29, /* __u8 bDescriptorType; Hub-descriptor */
172 0x02, /* __u8 bNbrPorts; */
173 0x00, /* __u16 wHubCharacteristics; */
174 0x00,
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 *** */
179 };
180
181 static DEFINE_TIMER(bulk_start_timer, NULL, 0, 0);
182 static DEFINE_TIMER(bulk_eot_timer, NULL, 0, 0);
183
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 */
188
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__);}
192
193 #define SLAB_FLAG (in_interrupt() ? SLAB_ATOMIC : SLAB_KERNEL)
194 #define KMALLOC_FLAG (in_interrupt() ? GFP_ATOMIC : GFP_KERNEL)
195
196 /* Most helpful debugging aid */
197 #define assert(expr) ((void) ((expr) ? 0 : (err("assert failed at line %d",__LINE__))))
198
199 /* Alternative assert define which stops after a failed assert. */
200 /*
201 #define assert(expr) \
202 { \
203 if (!(expr)) { \
204 err("assert failed at line %d",__LINE__); \
205 while (1); \
206 } \
207 }
208 */
209
210
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
214 descriptors. */
215
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)
219
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
224
225 /* Support interrupt traffic intervals up to 128 ms. */
226 #define MAX_INTR_INTERVAL 128
227
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
235
236 /* This is just a software cache for the valid entries in R_USB_EPT_DATA. */
237 static __u32 epid_usage_bitmask;
238
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;
246
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)));
251
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;
256
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
264 in each frame. */
265 static volatile USB_EP_Desc_t TxBulkDummyEPList[NBR_OF_EPIDS][2] __attribute__ ((aligned (4)));
266
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)));
269
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)));
272
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)));
278
279 /* Cache for allocating new EP and SB descriptors. */
280 static kmem_cache_t *usb_desc_cache;
281
282 /* Cache for the registers allocated in the top half. */
283 static kmem_cache_t *top_half_reg_cache;
284
285 /* Cache for the data allocated in the isoc descr top half. */
286 static kmem_cache_t *isoc_compl_cache;
287
288 static struct usb_bus *etrax_usb_bus;
289
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
294 protection. */
295 static struct list_head urb_list[NBR_OF_EPIDS];
296
297 /* Read about the need and usage of this lock in submit_ctrl_urb. */
298 static spinlock_t urb_list_lock;
299
300 /* Used when unlinking asynchronously. */
301 static struct list_head urb_unlink_list;
302
303 /* for returning string descriptors in UTF-16LE */
304 static int ascii2utf (char *ascii, __u8 *utf, int utfmax)
305 {
306 int retval;
307
308 for (retval = 0; *ascii && utfmax > 1; utfmax -= 2, retval += 2) {
309 *utf++ = *ascii++ & 0x7f;
310 *utf++ = 0;
311 }
312 return retval;
313 }
314
315 static int usb_root_hub_string (int id, int serial, char *type, __u8 *data, int len)
316 {
317 char buf [30];
318
319 // assert (len > (2 * (sizeof (buf) + 1)));
320 // assert (strlen (type) <= 8);
321
322 // language ids
323 if (id == 0) {
324 *data++ = 4; *data++ = 3; /* 4 bytes data */
325 *data++ = 0; *data++ = 0; /* some language id */
326 return 4;
327
328 // serial number
329 } else if (id == 1) {
330 sprintf (buf, "%x", serial);
331
332 // product description
333 } else if (id == 2) {
334 sprintf (buf, "USB %s Root Hub", type);
335
336 // id 3 == vendor description
337
338 // unsupported IDs --> "stall"
339 } else
340 return 0;
341
342 data [0] = 2 + ascii2utf (buf, data + 2, len - 2);
343 data [1] = 3;
344 return data [0];
345 }
346
347 /* Wrappers around the list functions (include/linux/list.h). */
348
349 static inline int urb_list_empty(int epid)
350 {
351 return list_empty(&urb_list[epid]);
352 }
353
354 /* Returns first urb for this epid, or NULL if list is empty. */
355 static inline struct urb *urb_list_first(int epid)
356 {
357 struct urb *first_urb = 0;
358
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;
363 }
364 return first_urb;
365 }
366
367 /* Adds an urb_entry last in the list for this epid. */
368 static inline void urb_list_add(struct urb *urb, int epid)
369 {
370 urb_entry_t *urb_entry = (urb_entry_t *)kmalloc(sizeof(urb_entry_t), KMALLOC_FLAG);
371 assert(urb_entry);
372
373 urb_entry->urb = urb;
374 list_add_tail(&urb_entry->list, &urb_list[epid]);
375 }
376
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)
381 {
382 struct list_head *entry;
383 struct list_head *tmp;
384 urb_entry_t *urb_entry;
385
386 list_for_each_safe(entry, tmp, &urb_list[epid]) {
387 urb_entry = list_entry(entry, urb_entry_t, list);
388 assert(urb_entry);
389 assert(urb_entry->urb);
390
391 if (urb_entry->urb == urb) {
392 return urb_entry;
393 }
394 }
395 return 0;
396 }
397
398 /* Delete an urb from the list. */
399 static inline void urb_list_del(struct urb *urb, int epid)
400 {
401 urb_entry_t *urb_entry = __urb_list_entry(urb, epid);
402 assert(urb_entry);
403
404 /* Delete entry and free. */
405 list_del(&urb_entry->list);
406 kfree(urb_entry);
407 }
408
409 /* Move an urb to the end of the list. */
410 static inline void urb_list_move_last(struct urb *urb, int epid)
411 {
412 urb_entry_t *urb_entry = __urb_list_entry(urb, epid);
413 assert(urb_entry);
414
415 list_del(&urb_entry->list);
416 list_add_tail(&urb_entry->list, &urb_list[epid]);
417 }
418
419 /* Get the next urb in the list. */
420 static inline struct urb *urb_list_next(struct urb *urb, int epid)
421 {
422 urb_entry_t *urb_entry = __urb_list_entry(urb, epid);
423
424 assert(urb_entry);
425
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;
430 } else {
431 return NULL;
432 }
433 }
434
435
436
437 /* For debug purposes only. */
438 static inline void urb_list_dump(int epid)
439 {
440 struct list_head *entry;
441 struct list_head *tmp;
442 urb_entry_t *urb_entry;
443 int i = 0;
444
445 info("Dumping urb list for epid %d", epid);
446
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);
450 }
451 }
452
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);
458
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);
463
464 static int etrax_remove_from_sb_list(struct urb *urb);
465
466 static void* etrax_usb_buffer_alloc(struct usb_bus* bus, size_t size,
467 unsigned mem_flags, dma_addr_t *dma);
468 static void etrax_usb_buffer_free(struct usb_bus *bus, size_t size, void *addr, dma_addr_t dma);
469
470 static void etrax_usb_add_to_bulk_sb_list(struct urb *urb, int epid);
471 static void etrax_usb_add_to_ctrl_sb_list(struct urb *urb, int epid);
472 static void etrax_usb_add_to_intr_sb_list(struct urb *urb, int epid);
473 static void etrax_usb_add_to_isoc_sb_list(struct urb *urb, int epid);
474
475 static int etrax_usb_submit_bulk_urb(struct urb *urb);
476 static int etrax_usb_submit_ctrl_urb(struct urb *urb);
477 static int etrax_usb_submit_intr_urb(struct urb *urb);
478 static int etrax_usb_submit_isoc_urb(struct urb *urb);
479
480 static int etrax_usb_submit_urb(struct urb *urb, unsigned mem_flags);
481 static int etrax_usb_unlink_urb(struct urb *urb, int status);
482 static int etrax_usb_get_frame_number(struct usb_device *usb_dev);
483
484 static irqreturn_t etrax_usb_tx_interrupt(int irq, void *vhc, struct pt_regs *regs);
485 static irqreturn_t etrax_usb_rx_interrupt(int irq, void *vhc, struct pt_regs *regs);
486 static irqreturn_t etrax_usb_hc_interrupt_top_half(int irq, void *vhc, struct pt_regs *regs);
487 static void etrax_usb_hc_interrupt_bottom_half(void *data);
488
489 static void etrax_usb_isoc_descr_interrupt_bottom_half(void *data);
490
491
492 /* The following is a list of interrupt handlers for the host controller interrupts we use.
493 They are called from etrax_usb_hc_interrupt_bottom_half. */
494 static void etrax_usb_hc_isoc_eof_interrupt(void);
495 static void etrax_usb_hc_bulk_eot_interrupt(int timer_induced);
496 static void etrax_usb_hc_epid_attn_interrupt(usb_interrupt_registers_t *reg);
497 static void etrax_usb_hc_port_status_interrupt(usb_interrupt_registers_t *reg);
498 static void etrax_usb_hc_ctl_status_interrupt(usb_interrupt_registers_t *reg);
499
500 static int etrax_rh_submit_urb (struct urb *urb);
501
502 /* Forward declaration needed because they are used in the rx interrupt routine. */
503 static void etrax_usb_complete_urb(struct urb *urb, int status);
504 static void etrax_usb_complete_bulk_urb(struct urb *urb, int status);
505 static void etrax_usb_complete_ctrl_urb(struct urb *urb, int status);
506 static void etrax_usb_complete_intr_urb(struct urb *urb, int status);
507 static void etrax_usb_complete_isoc_urb(struct urb *urb, int status);
508
509 static int etrax_usb_hc_init(void);
510 static void etrax_usb_hc_cleanup(void);
511
512 static struct usb_operations etrax_usb_device_operations =
513 {
514 .get_frame_number = etrax_usb_get_frame_number,
515 .submit_urb = etrax_usb_submit_urb,
516 .unlink_urb = etrax_usb_unlink_urb,
517 .buffer_alloc = etrax_usb_buffer_alloc,
518 .buffer_free = etrax_usb_buffer_free
519 };
520
521 /* Note that these functions are always available in their "__" variants, for use in
522 error situations. The "__" missing variants are controlled by the USB_DEBUG_DESC/
523 USB_DEBUG_URB macros. */
524 static void __dump_urb(struct urb* purb)
525 {
526 printk("\nurb :0x%08lx\n", (unsigned long)purb);
527 printk("dev :0x%08lx\n", (unsigned long)purb->dev);
528 printk("pipe :0x%08x\n", purb->pipe);
529 printk("status :%d\n", purb->status);
530 printk("transfer_flags :0x%08x\n", purb->transfer_flags);
531 printk("transfer_buffer :0x%08lx\n", (unsigned long)purb->transfer_buffer);
532 printk("transfer_buffer_length:%d\n", purb->transfer_buffer_length);
533 printk("actual_length :%d\n", purb->actual_length);
534 printk("setup_packet :0x%08lx\n", (unsigned long)purb->setup_packet);
535 printk("start_frame :%d\n", purb->start_frame);
536 printk("number_of_packets :%d\n", purb->number_of_packets);
537 printk("interval :%d\n", purb->interval);
538 printk("error_count :%d\n", purb->error_count);
539 printk("context :0x%08lx\n", (unsigned long)purb->context);
540 printk("complete :0x%08lx\n\n", (unsigned long)purb->complete);
541 }
542
543 static void __dump_in_desc(volatile USB_IN_Desc_t *in)
544 {
545 printk("\nUSB_IN_Desc at 0x%08lx\n", (unsigned long)in);
546 printk(" sw_len : 0x%04x (%d)\n", in->sw_len, in->sw_len);
547 printk(" command : 0x%04x\n", in->command);
548 printk(" next : 0x%08lx\n", in->next);
549 printk(" buf : 0x%08lx\n", in->buf);
550 printk(" hw_len : 0x%04x (%d)\n", in->hw_len, in->hw_len);
551 printk(" status : 0x%04x\n\n", in->status);
552 }
553
554 static void __dump_sb_desc(volatile USB_SB_Desc_t *sb)
555 {
556 char tt = (sb->command & 0x30) >> 4;
557 char *tt_string;
558
559 switch (tt) {
560 case 0:
561 tt_string = "zout";
562 break;
563 case 1:
564 tt_string = "in";
565 break;
566 case 2:
567 tt_string = "out";
568 break;
569 case 3:
570 tt_string = "setup";
571 break;
572 default:
573 tt_string = "unknown (weird)";
574 }
575
576 printk("\n USB_SB_Desc at 0x%08lx\n", (unsigned long)sb);
577 printk(" command : 0x%04x\n", sb->command);
578 printk(" rem : %d\n", (sb->command & 0x3f00) >> 8);
579 printk(" full : %d\n", (sb->command & 0x40) >> 6);
580 printk(" tt : %d (%s)\n", tt, tt_string);
581 printk(" intr : %d\n", (sb->command & 0x8) >> 3);
582 printk(" eot : %d\n", (sb->command & 0x2) >> 1);
583 printk(" eol : %d\n", sb->command & 0x1);
584 printk(" sw_len : 0x%04x (%d)\n", sb->sw_len, sb->sw_len);
585 printk(" next : 0x%08lx\n", sb->next);
586 printk(" buf : 0x%08lx\n\n", sb->buf);
587 }
588
589
590 static void __dump_ep_desc(volatile USB_EP_Desc_t *ep)
591 {
592 printk("\nUSB_EP_Desc at 0x%08lx\n", (unsigned long)ep);
593 printk(" command : 0x%04x\n", ep->command);
594 printk(" ep_id : %d\n", (ep->command & 0x1f00) >> 8);
595 printk(" enable : %d\n", (ep->command & 0x10) >> 4);
596 printk(" intr : %d\n", (ep->command & 0x8) >> 3);
597 printk(" eof : %d\n", (ep->command & 0x2) >> 1);
598 printk(" eol : %d\n", ep->command & 0x1);
599 printk(" hw_len : 0x%04x (%d)\n", ep->hw_len, ep->hw_len);
600 printk(" next : 0x%08lx\n", ep->next);
601 printk(" sub : 0x%08lx\n\n", ep->sub);
602 }
603
604 static inline void __dump_ep_list(int pipe_type)
605 {
606 volatile USB_EP_Desc_t *ep;
607 volatile USB_EP_Desc_t *first_ep;
608 volatile USB_SB_Desc_t *sb;
609
610 switch (pipe_type)
611 {
612 case PIPE_BULK:
613 first_ep = &TxBulkEPList[0];
614 break;
615 case PIPE_CONTROL:
616 first_ep = &TxCtrlEPList[0];
617 break;
618 case PIPE_INTERRUPT:
619 first_ep = &TxIntrEPList[0];
620 break;
621 case PIPE_ISOCHRONOUS:
622 first_ep = &TxIsocEPList[0];
623 break;
624 default:
625 warn("Cannot dump unknown traffic type");
626 return;
627 }
628 ep = first_ep;
629
630 printk("\n\nDumping EP list...\n\n");
631
632 do {
633 __dump_ep_desc(ep);
634 /* Cannot phys_to_virt on 0 as it turns into 80000000, which is != 0. */
635 sb = ep->sub ? phys_to_virt(ep->sub) : 0;
636 while (sb) {
637 __dump_sb_desc(sb);
638 sb = sb->next ? phys_to_virt(sb->next) : 0;
639 }
640 ep = (volatile USB_EP_Desc_t *)(phys_to_virt(ep->next));
641
642 } while (ep != first_ep);
643 }
644
645 static inline void __dump_ept_data(int epid)
646 {
647 unsigned long flags;
648 __u32 r_usb_ept_data;
649
650 if (epid < 0 || epid > 31) {
651 printk("Cannot dump ept data for invalid epid %d\n", epid);
652 return;
653 }
654
655 save_flags(flags);
656 cli();
657 *R_USB_EPT_INDEX = IO_FIELD(R_USB_EPT_INDEX, value, epid);
658 nop();
659 r_usb_ept_data = *R_USB_EPT_DATA;
660 restore_flags(flags);
661
662 printk("\nR_USB_EPT_DATA = 0x%x for epid %d :\n", r_usb_ept_data, epid);
663 if (r_usb_ept_data == 0) {
664 /* No need for more detailed printing. */
665 return;
666 }
667 printk(" valid : %d\n", (r_usb_ept_data & 0x80000000) >> 31);
668 printk(" hold : %d\n", (r_usb_ept_data & 0x40000000) >> 30);
669 printk(" error_count_in : %d\n", (r_usb_ept_data & 0x30000000) >> 28);
670 printk(" t_in : %d\n", (r_usb_ept_data & 0x08000000) >> 27);
671 printk(" low_speed : %d\n", (r_usb_ept_data & 0x04000000) >> 26);
672 printk(" port : %d\n", (r_usb_ept_data & 0x03000000) >> 24);
673 printk(" error_code : %d\n", (r_usb_ept_data & 0x00c00000) >> 22);
674 printk(" t_out : %d\n", (r_usb_ept_data & 0x00200000) >> 21);
675 printk(" error_count_out : %d\n", (r_usb_ept_data & 0x00180000) >> 19);
676 printk(" max_len : %d\n", (r_usb_ept_data & 0x0003f800) >> 11);
677 printk(" ep : %d\n", (r_usb_ept_data & 0x00000780) >> 7);
678 printk(" dev : %d\n", (r_usb_ept_data & 0x0000003f));
679 }
680
681 static inline void __dump_ept_data_list(void)
682 {
683 int i;
684
685 printk("Dumping the whole R_USB_EPT_DATA list\n");
686
687 for (i = 0; i < 32; i++) {
688 __dump_ept_data(i);
689 }
690 }
691 #ifdef USB_DEBUG_DESC
692 #define dump_in_desc(...) __dump_in_desc(...)
693 #define dump_sb_desc(...) __dump_sb_desc(...)
694 #define dump_ep_desc(...) __dump_ep_desc(...)
695 #else
696 #define dump_in_desc(...) do {} while (0)
697 #define dump_sb_desc(...) do {} while (0)
698 #define dump_ep_desc(...) do {} while (0)
699 #endif
700
701 #ifdef USB_DEBUG_URB
702 #define dump_urb(x) __dump_urb(x)
703 #else
704 #define dump_urb(x) do {} while (0)
705 #endif
706
707 static void init_rx_buffers(void)
708 {
709 int i;
710
711 DBFENTER;
712
713 for (i = 0; i < (NBR_OF_RX_DESC - 1); i++) {
714 RxDescList[i].sw_len = RX_DESC_BUF_SIZE;
715 RxDescList[i].command = 0;
716 RxDescList[i].next = virt_to_phys(&RxDescList[i + 1]);
717 RxDescList[i].buf = virt_to_phys(RxBuf + (i * RX_DESC_BUF_SIZE));
718 RxDescList[i].hw_len = 0;
719 RxDescList[i].status = 0;
720
721 /* DMA IN cache bug. (struct etrax_dma_descr has the same layout as USB_IN_Desc
722 for the relevant fields.) */
723 prepare_rx_descriptor((struct etrax_dma_descr*)&RxDescList[i]);
724
725 }
726
727 RxDescList[i].sw_len = RX_DESC_BUF_SIZE;
728 RxDescList[i].command = IO_STATE(USB_IN_command, eol, yes);
729 RxDescList[i].next = virt_to_phys(&RxDescList[0]);
730 RxDescList[i].buf = virt_to_phys(RxBuf + (i * RX_DESC_BUF_SIZE));
731 RxDescList[i].hw_len = 0;
732 RxDescList[i].status = 0;
733
734 myNextRxDesc = &RxDescList[0];
735 myLastRxDesc = &RxDescList[NBR_OF_RX_DESC - 1];
736 myPrevRxDesc = &RxDescList[NBR_OF_RX_DESC - 1];
737
738 *R_DMA_CH9_FIRST = virt_to_phys(myNextRxDesc);
739 *R_DMA_CH9_CMD = IO_STATE(R_DMA_CH9_CMD, cmd, start);
740
741 DBFEXIT;
742 }
743
744 static void init_tx_bulk_ep(void)
745 {
746 int i;
747
748 DBFENTER;
749
750 for (i = 0; i < (NBR_OF_EPIDS - 1); i++) {
751 CHECK_ALIGN(&TxBulkEPList[i]);
752 TxBulkEPList[i].hw_len = 0;
753 TxBulkEPList[i].command = IO_FIELD(USB_EP_command, epid, i);
754 TxBulkEPList[i].sub = 0;
755 TxBulkEPList[i].next = virt_to_phys(&TxBulkEPList[i + 1]);
756
757 /* Initiate two EPs, disabled and with the eol flag set. No need for any
758 preserved epid. */
759
760 /* The first one has the intr flag set so we get an interrupt when the DMA
761 channel is about to become disabled. */
762 CHECK_ALIGN(&TxBulkDummyEPList[i][0]);
763 TxBulkDummyEPList[i][0].hw_len = 0;
764 TxBulkDummyEPList[i][0].command = (IO_FIELD(USB_EP_command, epid, DUMMY_EPID) |
765 IO_STATE(USB_EP_command, eol, yes) |
766 IO_STATE(USB_EP_command, intr, yes));
767 TxBulkDummyEPList[i][0].sub = 0;
768 TxBulkDummyEPList[i][0].next = virt_to_phys(&TxBulkDummyEPList[i][1]);
769
770 /* The second one. */
771 CHECK_ALIGN(&TxBulkDummyEPList[i][1]);
772 TxBulkDummyEPList[i][1].hw_len = 0;
773 TxBulkDummyEPList[i][1].command = (IO_FIELD(USB_EP_command, epid, DUMMY_EPID) |
774 IO_STATE(USB_EP_command, eol, yes));
775 TxBulkDummyEPList[i][1].sub = 0;
776 /* The last dummy's next pointer is the same as the current EP's next pointer. */
777 TxBulkDummyEPList[i][1].next = virt_to_phys(&TxBulkEPList[i + 1]);
778 }
779
780 /* Configure the last one. */
781 CHECK_ALIGN(&TxBulkEPList[i]);
782 TxBulkEPList[i].hw_len = 0;
783 TxBulkEPList[i].command = (IO_STATE(USB_EP_command, eol, yes) |
784 IO_FIELD(USB_EP_command, epid, i));
785 TxBulkEPList[i].sub = 0;
786 TxBulkEPList[i].next = virt_to_phys(&TxBulkEPList[0]);
787
788 /* No need configuring dummy EPs for the last one as it will never be used for
789 bulk traffic (i == INVALD_EPID at this point). */
790
791 /* Set up to start on the last EP so we will enable it when inserting traffic
792 for the first time (imitating the situation where the DMA has stopped
793 because there was no more traffic). */
794 *R_DMA_CH8_SUB0_EP = virt_to_phys(&TxBulkEPList[i]);
795 /* No point in starting the bulk channel yet.
796 *R_DMA_CH8_SUB0_CMD = IO_STATE(R_DMA_CH8_SUB0_CMD, cmd, start); */
797 DBFEXIT;
798 }
799
800 static void init_tx_ctrl_ep(void)
801 {
802 int i;
803
804 DBFENTER;
805
806 for (i = 0; i < (NBR_OF_EPIDS - 1); i++) {
807 CHECK_ALIGN(&TxCtrlEPList[i]);
808 TxCtrlEPList[i].hw_len = 0;
809 TxCtrlEPList[i].command = IO_FIELD(USB_EP_command, epid, i);
810 TxCtrlEPList[i].sub = 0;
811 TxCtrlEPList[i].next = virt_to_phys(&TxCtrlEPList[i + 1]);
812 }
813
814 CHECK_ALIGN(&TxCtrlEPList[i]);
815 TxCtrlEPList[i].hw_len = 0;
816 TxCtrlEPList[i].command = (IO_STATE(USB_EP_command, eol, yes) |
817 IO_FIELD(USB_EP_command, epid, i));
818
819 TxCtrlEPList[i].sub = 0;
820 TxCtrlEPList[i].next = virt_to_phys(&TxCtrlEPList[0]);
821
822 *R_DMA_CH8_SUB1_EP = virt_to_phys(&TxCtrlEPList[0]);
823 *R_DMA_CH8_SUB1_CMD = IO_STATE(R_DMA_CH8_SUB1_CMD, cmd, start);
824
825 DBFEXIT;
826 }
827
828
829 static void init_tx_intr_ep(void)
830 {
831 int i;
832
833 DBFENTER;
834
835 /* Read comment at zout_buffer declaration for an explanation to this. */
836 TxIntrSB_zout.sw_len = 1;
837 TxIntrSB_zout.next = 0;
838 TxIntrSB_zout.buf = virt_to_phys(&zout_buffer[0]);
839 TxIntrSB_zout.command = (IO_FIELD(USB_SB_command, rem, 0) |
840 IO_STATE(USB_SB_command, tt, zout) |
841 IO_STATE(USB_SB_command, full, yes) |
842 IO_STATE(USB_SB_command, eot, yes) |
843 IO_STATE(USB_SB_command, eol, yes));
844
845 for (i = 0; i < (MAX_INTR_INTERVAL - 1); i++) {
846 CHECK_ALIGN(&TxIntrEPList[i]);
847 TxIntrEPList[i].hw_len = 0;
848 TxIntrEPList[i].command =
849 (IO_STATE(USB_EP_command, eof, yes) |
850 IO_STATE(USB_EP_command, enable, yes) |
851 IO_FIELD(USB_EP_command, epid, INVALID_EPID));
852 TxIntrEPList[i].sub = virt_to_phys(&TxIntrSB_zout);
853 TxIntrEPList[i].next = virt_to_phys(&TxIntrEPList[i + 1]);
854 }
855
856 CHECK_ALIGN(&TxIntrEPList[i]);
857 TxIntrEPList[i].hw_len = 0;
858 TxIntrEPList[i].command =
859 (IO_STATE(USB_EP_command, eof, yes) |
860 IO_STATE(USB_EP_command, eol, yes) |
861 IO_STATE(USB_EP_command, enable, yes) |
862 IO_FIELD(USB_EP_command, epid, INVALID_EPID));
863 TxIntrEPList[i].sub = virt_to_phys(&TxIntrSB_zout);
864 TxIntrEPList[i].next = virt_to_phys(&TxIntrEPList[0]);
865
866 *R_DMA_CH8_SUB2_EP = virt_to_phys(&TxIntrEPList[0]);
867 *R_DMA_CH8_SUB2_CMD = IO_STATE(R_DMA_CH8_SUB2_CMD, cmd, start);
868 DBFEXIT;
869 }
870
871 static void init_tx_isoc_ep(void)
872 {
873 int i;
874
875 DBFENTER;
876
877 /* Read comment at zout_buffer declaration for an explanation to this. */
878 TxIsocSB_zout.sw_len = 1;
879 TxIsocSB_zout.next = 0;
880 TxIsocSB_zout.buf = virt_to_phys(&zout_buffer[0]);
881 TxIsocSB_zout.command = (IO_FIELD(USB_SB_command, rem, 0) |
882 IO_STATE(USB_SB_command, tt, zout) |
883 IO_STATE(USB_SB_command, full, yes) |
884 IO_STATE(USB_SB_command, eot, yes) |
885 IO_STATE(USB_SB_command, eol, yes));
886
887 /* The last isochronous EP descriptor is a dummy. */
888
889 for (i = 0; i < (NBR_OF_EPIDS - 1); i++) {
890 CHECK_ALIGN(&TxIsocEPList[i]);
891 TxIsocEPList[i].hw_len = 0;
892 TxIsocEPList[i].command = IO_FIELD(USB_EP_command, epid, i);
893 TxIsocEPList[i].sub = 0;
894 TxIsocEPList[i].next = virt_to_phys(&TxIsocEPList[i + 1]);
895 }
896
897 CHECK_ALIGN(&TxIsocEPList[i]);
898 TxIsocEPList[i].hw_len = 0;
899
900 /* Must enable the last EP descr to get eof interrupt. */
901 TxIsocEPList[i].command = (IO_STATE(USB_EP_command, enable, yes) |
902 IO_STATE(USB_EP_command, eof, yes) |
903 IO_STATE(USB_EP_command, eol, yes) |
904 IO_FIELD(USB_EP_command, epid, INVALID_EPID));
905 TxIsocEPList[i].sub = virt_to_phys(&TxIsocSB_zout);
906 TxIsocEPList[i].next = virt_to_phys(&TxIsocEPList[0]);
907
908 *R_DMA_CH8_SUB3_EP = virt_to_phys(&TxIsocEPList[0]);
909 *R_DMA_CH8_SUB3_CMD = IO_STATE(R_DMA_CH8_SUB3_CMD, cmd, start);
910
911 DBFEXIT;
912 }
913
914 static void etrax_usb_unlink_intr_urb(struct urb *urb)
915 {
916 volatile USB_EP_Desc_t *first_ep; /* First EP in the list. */
917 volatile USB_EP_Desc_t *curr_ep; /* Current EP, the iterator. */
918 volatile USB_EP_Desc_t *next_ep; /* The EP after current. */
919 volatile USB_EP_Desc_t *unlink_ep; /* The one we should remove from the list. */
920
921 int epid;
922
923 /* Read 8.8.4 in Designer's Reference, "Removing an EP Descriptor from the List". */
924
925 DBFENTER;
926
927 epid = ((etrax_urb_priv_t *)urb->hcpriv)->epid;
928
929 first_ep = &TxIntrEPList[0];
930 curr_ep = first_ep;
931
932
933 /* Note that this loop removes all EP descriptors with this epid. This assumes
934 that all EP descriptors belong to the one and only urb for this epid. */
935
936 do {
937 next_ep = (USB_EP_Desc_t *)phys_to_virt(curr_ep->next);
938
939 if (IO_EXTRACT(USB_EP_command, epid, next_ep->command) == epid) {
940
941 dbg_intr("Found EP to unlink for epid %d", epid);
942
943 /* This is the one we should unlink. */
944 unlink_ep = next_ep;
945
946 /* Actually unlink the EP from the DMA list. */
947 curr_ep->next = unlink_ep->next;
948
949 /* Wait until the DMA is no longer at this descriptor. */
950 while (*R_DMA_CH8_SUB2_EP == virt_to_phys(unlink_ep));
951
952 /* Now we are free to remove it and its SB descriptor.
953 Note that it is assumed here that there is only one sb in the
954 sb list for this ep. */
955 kmem_cache_free(usb_desc_cache, phys_to_virt(unlink_ep->sub));
956 kmem_cache_free(usb_desc_cache, (USB_EP_Desc_t *)unlink_ep);
957 }
958
959 curr_ep = phys_to_virt(curr_ep->next);
960
961 } while (curr_ep != first_ep);
962 urb->hcpriv = NULL;
963 }
964
965 void etrax_usb_do_intr_recover(int epid)
966 {
967 USB_EP_Desc_t *first_ep, *tmp_ep;
968
969 DBFENTER;
970
971 first_ep = (USB_EP_Desc_t *)phys_to_virt(*R_DMA_CH8_SUB2_EP);
972 tmp_ep = first_ep;
973
974 /* What this does is simply to walk the list of interrupt
975 ep descriptors and enable those that are disabled. */
976
977 do {
978 if (IO_EXTRACT(USB_EP_command, epid, tmp_ep->command) == epid &&
979 !(tmp_ep->command & IO_MASK(USB_EP_command, enable))) {
980 tmp_ep->command |= IO_STATE(USB_EP_command, enable, yes);
981 }
982
983 tmp_ep = (USB_EP_Desc_t *)phys_to_virt(tmp_ep->next);
984
985 } while (tmp_ep != first_ep);
986
987
988 DBFEXIT;
989 }
990
991 static int etrax_rh_unlink_urb (struct urb *urb)
992 {
993 etrax_hc_t *hc;
994
995 DBFENTER;
996
997 hc = urb->dev->bus->hcpriv;
998
999 if (hc->rh.urb == urb) {
1000 hc->rh.send = 0;
1001 del_timer(&hc->rh.rh_int_timer);
1002 }
1003
1004 DBFEXIT;
1005 return 0;
1006 }
1007
1008 static void etrax_rh_send_irq(struct urb *urb)
1009 {
1010 __u16 data = 0;
1011 etrax_hc_t *hc = urb->dev->bus->hcpriv;
1012 DBFENTER;
1013
1014 /*
1015 dbg_rh("R_USB_FM_NUMBER : 0x%08X", *R_USB_FM_NUMBER);
1016 dbg_rh("R_USB_FM_REMAINING: 0x%08X", *R_USB_FM_REMAINING);
1017 */
1018
1019 data |= (hc->rh.wPortChange_1) ? (1 << 1) : 0;
1020 data |= (hc->rh.wPortChange_2) ? (1 << 2) : 0;
1021
1022 *((__u16 *)urb->transfer_buffer) = cpu_to_le16(data);
1023 /* FIXME: Why is actual_length set to 1 when data is 2 bytes?
1024 Since only 1 byte is used, why not declare data as __u8? */
1025 urb->actual_length = 1;
1026 urb->status = 0;
1027
1028 if (hc->rh.send && urb->complete) {
1029 dbg_rh("wPortChange_1: 0x%04X", hc->rh.wPortChange_1);
1030 dbg_rh("wPortChange_2: 0x%04X", hc->rh.wPortChange_2);
1031
1032 urb->complete(urb, NULL);
1033 }
1034
1035 DBFEXIT;
1036 }
1037
1038 static void etrax_rh_init_int_timer(struct urb *urb)
1039 {
1040 etrax_hc_t *hc;
1041
1042 DBFENTER;
1043
1044 hc = urb->dev->bus->hcpriv;
1045 hc->rh.interval = urb->interval;
1046 init_timer(&hc->rh.rh_int_timer);
1047 hc->rh.rh_int_timer.function = etrax_rh_int_timer_do;
1048 hc->rh.rh_int_timer.data = (unsigned long)urb;
1049 /* FIXME: Is the jiffies resolution enough? All intervals < 10 ms will be mapped
1050 to 0, and the rest to the nearest lower 10 ms. */
1051 hc->rh.rh_int_timer.expires = jiffies + ((HZ * hc->rh.interval) / 1000);
1052 add_timer(&hc->rh.rh_int_timer);
1053
1054 DBFEXIT;
1055 }
1056
1057 static void etrax_rh_int_timer_do(unsigned long ptr)
1058 {
1059 struct urb *urb;
1060 etrax_hc_t *hc;
1061
1062 DBFENTER;
1063
1064 urb = (struct urb*)ptr;
1065 hc = urb->dev->bus->hcpriv;
1066
1067 if (hc->rh.send) {
1068 etrax_rh_send_irq(urb);
1069 }
1070
1071 DBFEXIT;
1072 }
1073
1074 static int etrax_usb_setup_epid(struct urb *urb)
1075 {
1076 int epid;
1077 char devnum, endpoint, out_traffic, slow;
1078 int maxlen;
1079 unsigned long flags;
1080
1081 DBFENTER;
1082
1083 epid = etrax_usb_lookup_epid(urb);
1084 if ((epid != -1)){
1085 /* An epid that fits this urb has been found. */
1086 DBFEXIT;
1087 return epid;
1088 }
1089
1090 /* We must find and initiate a new epid for this urb. */
1091 epid = etrax_usb_allocate_epid();
1092
1093 if (epid == -1) {
1094 /* Failed to allocate a new epid. */
1095 DBFEXIT;
1096 return epid;
1097 }
1098
1099 /* We now have a new epid to use. Initiate it. */
1100 set_bit(epid, (void *)&epid_usage_bitmask);
1101
1102 devnum = usb_pipedevice(urb->pipe);
1103 endpoint = usb_pipeendpoint(urb->pipe);
1104 slow = usb_pipeslow(urb->pipe);
1105 maxlen = usb_maxpacket(urb->dev, urb->pipe, usb_pipeout(urb->pipe));
1106 if (usb_pipetype(urb->pipe) == PIPE_CONTROL) {
1107 /* We want both IN and OUT control traffic to be put on the same EP/SB list. */
1108 out_traffic = 1;
1109 } else {
1110 out_traffic = usb_pipeout(urb->pipe);
1111 }
1112
1113 save_flags(flags);
1114 cli();
1115
1116 *R_USB_EPT_INDEX = IO_FIELD(R_USB_EPT_INDEX, value, epid);
1117 nop();
1118
1119 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) {
1120 *R_USB_EPT_DATA_ISO = IO_STATE(R_USB_EPT_DATA_ISO, valid, yes) |
1121 /* FIXME: Change any to the actual port? */
1122 IO_STATE(R_USB_EPT_DATA_ISO, port, any) |
1123 IO_FIELD(R_USB_EPT_DATA_ISO, max_len, maxlen) |
1124 IO_FIELD(R_USB_EPT_DATA_ISO, ep, endpoint) |
1125 IO_FIELD(R_USB_EPT_DATA_ISO, dev, devnum);
1126 } else {
1127 *R_USB_EPT_DATA = IO_STATE(R_USB_EPT_DATA, valid, yes) |
1128 IO_FIELD(R_USB_EPT_DATA, low_speed, slow) |
1129 /* FIXME: Change any to the actual port? */
1130 IO_STATE(R_USB_EPT_DATA, port, any) |
1131 IO_FIELD(R_USB_EPT_DATA, max_len, maxlen) |
1132 IO_FIELD(R_USB_EPT_DATA, ep, endpoint) |
1133 IO_FIELD(R_USB_EPT_DATA, dev, devnum);
1134 }
1135
1136 restore_flags(flags);
1137
1138 if (out_traffic) {
1139 set_bit(epid, (void *)&epid_out_traffic);
1140 } else {
1141 clear_bit(epid, (void *)&epid_out_traffic);
1142 }
1143
1144 dbg_epid("Setting up epid %d with devnum %d, endpoint %d and max_len %d (%s)",
1145 epid, devnum, endpoint, maxlen, out_traffic ? "OUT" : "IN");
1146
1147 DBFEXIT;
1148 return epid;
1149 }
1150
1151 static void etrax_usb_free_epid(int epid)
1152 {
1153 unsigned long flags;
1154
1155 DBFENTER;
1156
1157 if (!test_bit(epid, (void *)&epid_usage_bitmask)) {
1158 warn("Trying to free unused epid %d", epid);
1159 DBFEXIT;
1160 return;
1161 }
1162
1163 save_flags(flags);
1164 cli();
1165
1166 *R_USB_EPT_INDEX = IO_FIELD(R_USB_EPT_INDEX, value, epid);
1167 nop();
1168 while (*R_USB_EPT_DATA & IO_MASK(R_USB_EPT_DATA, hold));
1169 /* This will, among other things, set the valid field to 0. */
1170 *R_USB_EPT_DATA = 0;
1171 restore_flags(flags);
1172
1173 clear_bit(epid, (void *)&epid_usage_bitmask);
1174
1175
1176 dbg_epid("Freed epid %d", epid);
1177
1178 DBFEXIT;
1179 }
1180
1181 static int etrax_usb_lookup_epid(struct urb *urb)
1182 {
1183 int i;
1184 __u32 data;
1185 char devnum, endpoint, slow, out_traffic;
1186 int maxlen;
1187 unsigned long flags;
1188
1189 DBFENTER;
1190
1191 devnum = usb_pipedevice(urb->pipe);
1192 endpoint = usb_pipeendpoint(urb->pipe);
1193 slow = usb_pipeslow(urb->pipe);
1194 maxlen = usb_maxpacket(urb->dev, urb->pipe, usb_pipeout(urb->pipe));
1195 if (usb_pipetype(urb->pipe) == PIPE_CONTROL) {
1196 /* We want both IN and OUT control traffic to be put on the same EP/SB list. */
1197 out_traffic = 1;
1198 } else {
1199 out_traffic = usb_pipeout(urb->pipe);
1200 }
1201
1202 /* Step through att epids. */
1203 for (i = 0; i < NBR_OF_EPIDS; i++) {
1204 if (test_bit(i, (void *)&epid_usage_bitmask) &&
1205 test_bit(i, (void *)&epid_out_traffic) == out_traffic) {
1206
1207 save_flags(flags);
1208 cli();
1209 *R_USB_EPT_INDEX = IO_FIELD(R_USB_EPT_INDEX, value, i);
1210 nop();
1211
1212 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) {
1213 data = *R_USB_EPT_DATA_ISO;
1214 restore_flags(flags);
1215
1216 if ((IO_MASK(R_USB_EPT_DATA_ISO, valid) & data) &&
1217 (IO_EXTRACT(R_USB_EPT_DATA_ISO, dev, data) == devnum) &&
1218 (IO_EXTRACT(R_USB_EPT_DATA_ISO, ep, data) == endpoint) &&
1219 (IO_EXTRACT(R_USB_EPT_DATA_ISO, max_len, data) == maxlen)) {
1220 dbg_epid("Found epid %d for devnum %d, endpoint %d (%s)",
1221 i, devnum, endpoint, out_traffic ? "OUT" : "IN");
1222 DBFEXIT;
1223 return i;
1224 }
1225 } else {
1226 data = *R_USB_EPT_DATA;
1227 restore_flags(flags);
1228
1229 if ((IO_MASK(R_USB_EPT_DATA, valid) & data) &&
1230 (IO_EXTRACT(R_USB_EPT_DATA, dev, data) == devnum) &&
1231 (IO_EXTRACT(R_USB_EPT_DATA, ep, data) == endpoint) &&
1232 (IO_EXTRACT(R_USB_EPT_DATA, low_speed, data) == slow) &&
1233 (IO_EXTRACT(R_USB_EPT_DATA, max_len, data) == maxlen)) {
1234 dbg_epid("Found epid %d for devnum %d, endpoint %d (%s)",
1235 i, devnum, endpoint, out_traffic ? "OUT" : "IN");
1236 DBFEXIT;
1237 return i;
1238 }
1239 }
1240 }
1241 }
1242
1243 DBFEXIT;
1244 return -1;
1245 }
1246
1247 static int etrax_usb_allocate_epid(void)
1248 {
1249 int i;
1250
1251 DBFENTER;
1252
1253 for (i = 0; i < NBR_OF_EPIDS; i++) {
1254 if (!test_bit(i, (void *)&epid_usage_bitmask)) {
1255 dbg_epid("Found free epid %d", i);
1256 DBFEXIT;
1257 return i;
1258 }
1259 }
1260
1261 dbg_epid("Found no free epids");
1262 DBFEXIT;
1263 return -1;
1264 }
1265
1266 static int etrax_usb_submit_urb(struct urb *urb, unsigned mem_flags)
1267 {
1268 etrax_hc_t *hc;
1269 int ret = -EINVAL;
1270
1271 DBFENTER;
1272
1273 if (!urb->dev || !urb->dev->bus) {
1274 return -ENODEV;
1275 }
1276 if (usb_maxpacket(urb->dev, urb->pipe, usb_pipeout(urb->pipe)) <= 0) {
1277 info("Submit urb to pipe with maxpacketlen 0, pipe 0x%X\n", urb->pipe);
1278 return -EMSGSIZE;
1279 }
1280
1281 if (urb->timeout) {
1282 /* FIXME. */
1283 warn("urb->timeout specified, ignoring.");
1284 }
1285
1286 hc = (etrax_hc_t*)urb->dev->bus->hcpriv;
1287
1288 if (usb_pipedevice(urb->pipe) == hc->rh.devnum) {
1289 /* This request is for the Virtual Root Hub. */
1290 ret = etrax_rh_submit_urb(urb);
1291
1292 } else if (usb_pipetype(urb->pipe) == PIPE_BULK) {
1293
1294 ret = etrax_usb_submit_bulk_urb(urb);
1295
1296 } else if (usb_pipetype(urb->pipe) == PIPE_CONTROL) {
1297
1298 ret = etrax_usb_submit_ctrl_urb(urb);
1299
1300 } else if (usb_pipetype(urb->pipe) == PIPE_INTERRUPT) {
1301 int bustime;
1302
1303 if (urb->bandwidth == 0) {
1304 bustime = usb_check_bandwidth(urb->dev, urb);
1305 if (bustime < 0) {
1306 ret = bustime;
1307 } else {
1308 ret = etrax_usb_submit_intr_urb(urb);
1309 if (ret == 0)
1310 usb_claim_bandwidth(urb->dev, urb, bustime, 0);
1311 }
1312 } else {
1313 /* Bandwidth already set. */
1314 ret = etrax_usb_submit_intr_urb(urb);
1315 }
1316
1317 } else if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) {
1318 int bustime;
1319
1320 if (urb->bandwidth == 0) {
1321 bustime = usb_check_bandwidth(urb->dev, urb);
1322 if (bustime < 0) {
1323 ret = bustime;
1324 } else {
1325 ret = etrax_usb_submit_isoc_urb(urb);
1326 if (ret == 0)
1327 usb_claim_bandwidth(urb->dev, urb, bustime, 0);
1328 }
1329 } else {
1330 /* Bandwidth already set. */
1331 ret = etrax_usb_submit_isoc_urb(urb);
1332 }
1333 }
1334
1335 DBFEXIT;
1336
1337 if (ret != 0)
1338 printk("Submit URB error %d\n", ret);
1339
1340 return ret;
1341 }
1342
1343 static int etrax_usb_unlink_urb(struct urb *urb, int status)
1344 {
1345 etrax_hc_t *hc;
1346 etrax_urb_priv_t *urb_priv;
1347 int epid;
1348 unsigned int flags;
1349
1350 DBFENTER;
1351
1352 if (!urb) {
1353 return -EINVAL;
1354 }
1355
1356 /* Disable interrupts here since a descriptor interrupt for the isoc epid
1357 will modify the sb list. This could possibly be done more granular, but
1358 unlink_urb should not be used frequently anyway.
1359 */
1360
1361 save_flags(flags);
1362 cli();
1363
1364 if (!urb->dev || !urb->dev->bus) {
1365 restore_flags(flags);
1366 return -ENODEV;
1367 }
1368 if (!urb->hcpriv) {
1369 /* This happens if a device driver calls unlink on an urb that
1370 was never submitted (lazy driver) or if the urb was completed
1371 while unlink was being called. */
1372 restore_flags(flags);
1373 return 0;
1374 }
1375 if (urb->transfer_flags & URB_ASYNC_UNLINK) {
1376 /* FIXME. */
1377 /* If URB_ASYNC_UNLINK is set:
1378 unlink
1379 move to a separate urb list
1380 call complete at next sof with ECONNRESET
1381
1382 If not:
1383 wait 1 ms
1384 unlink
1385 call complete with ENOENT
1386 */
1387 warn("URB_ASYNC_UNLINK set, ignoring.");
1388 }
1389
1390 /* One might think that urb->status = -EINPROGRESS would be a requirement for unlinking,
1391 but that doesn't work for interrupt and isochronous traffic since they are completed
1392 repeatedly, and urb->status is set then. That may in itself be a bug though. */
1393
1394 hc = urb->dev->bus->hcpriv;
1395 urb_priv = (etrax_urb_priv_t *)urb->hcpriv;
1396 epid = urb_priv->epid;
1397
1398 /* Set the urb status (synchronous unlink). */
1399 urb->status = -ENOENT;
1400 urb_priv->urb_state = UNLINK;
1401
1402 if (usb_pipedevice(urb->pipe) == hc->rh.devnum) {
1403 int ret;
1404 ret = etrax_rh_unlink_urb(urb);
1405 DBFEXIT;
1406 restore_flags(flags);
1407 return ret;
1408
1409 } else if (usb_pipetype(urb->pipe) == PIPE_BULK) {
1410
1411 dbg_bulk("Unlink of bulk urb (0x%lx)", (unsigned long)urb);
1412
1413 if (TxBulkEPList[epid].command & IO_MASK(USB_EP_command, enable)) {
1414 /* The EP was enabled, disable it and wait. */
1415 TxBulkEPList[epid].command &= ~IO_MASK(USB_EP_command, enable);
1416
1417 /* Ah, the luxury of busy-wait. */
1418 while (*R_DMA_CH8_SUB0_EP == virt_to_phys(&TxBulkEPList[epid]));
1419 }
1420 /* Kicking dummy list out of the party. */
1421 TxBulkEPList[epid].next = virt_to_phys(&TxBulkEPList[(epid + 1) % NBR_OF_EPIDS]);
1422
1423 } else if (usb_pipetype(urb->pipe) == PIPE_CONTROL) {
1424
1425 dbg_ctrl("Unlink of ctrl urb (0x%lx)", (unsigned long)urb);
1426
1427 if (TxCtrlEPList[epid].command & IO_MASK(USB_EP_command, enable)) {
1428 /* The EP was enabled, disable it and wait. */
1429 TxCtrlEPList[epid].command &= ~IO_MASK(USB_EP_command, enable);
1430
1431 /* Ah, the luxury of busy-wait. */
1432 while (*R_DMA_CH8_SUB1_EP == virt_to_phys(&TxCtrlEPList[epid]));
1433 }
1434
1435 } else if (usb_pipetype(urb->pipe) == PIPE_INTERRUPT) {
1436
1437 dbg_intr("Unlink of intr urb (0x%lx)", (unsigned long)urb);
1438
1439 /* Separate function because it's a tad more complicated. */
1440 etrax_usb_unlink_intr_urb(urb);
1441
1442 } else if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) {
1443
1444 dbg_isoc("Unlink of isoc urb (0x%lx)", (unsigned long)urb);
1445
1446 if (TxIsocEPList[epid].command & IO_MASK(USB_EP_command, enable)) {
1447 /* The EP was enabled, disable it and wait. */
1448 TxIsocEPList[epid].command &= ~IO_MASK(USB_EP_command, enable);
1449
1450 /* Ah, the luxury of busy-wait. */
1451 while (*R_DMA_CH8_SUB3_EP == virt_to_phys(&TxIsocEPList[epid]));
1452 }
1453 }
1454
1455 /* Note that we need to remove the urb from the urb list *before* removing its SB
1456 descriptors. (This means that the isoc eof handler might get a null urb when we
1457 are unlinking the last urb.) */
1458
1459 if (usb_pipetype(urb->pipe) == PIPE_BULK) {
1460
1461 urb_list_del(urb, epid);
1462 TxBulkEPList[epid].sub = 0;
1463 etrax_remove_from_sb_list(urb);
1464
1465 } else if (usb_pipetype(urb->pipe) == PIPE_CONTROL) {
1466
1467 urb_list_del(urb, epid);
1468 TxCtrlEPList[epid].sub = 0;
1469 etrax_remove_from_sb_list(urb);
1470
1471 } else if (usb_pipetype(urb->pipe) == PIPE_INTERRUPT) {
1472
1473 urb_list_del(urb, epid);
1474 /* Sanity check (should never happen). */
1475 assert(urb_list_empty(epid));
1476
1477 /* Release allocated bandwidth. */
1478 usb_release_bandwidth(urb->dev, urb, 0);
1479
1480 } else if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) {
1481
1482 if (usb_pipeout(urb->pipe)) {
1483
1484 USB_SB_Desc_t *iter_sb, *prev_sb, *next_sb;
1485
1486 if (__urb_list_entry(urb, epid)) {
1487
1488 urb_list_del(urb, epid);
1489 iter_sb = TxIsocEPList[epid].sub ? phys_to_virt(TxIsocEPList[epid].sub) : 0;
1490 prev_sb = 0;
1491 while (iter_sb && (iter_sb != urb_priv->first_sb)) {
1492 prev_sb = iter_sb;
1493 iter_sb = iter_sb->next ? phys_to_virt(iter_sb->next) : 0;
1494 }
1495
1496 if (iter_sb == 0) {
1497 /* Unlink of the URB currently being transmitted. */
1498 prev_sb = 0;
1499 iter_sb = TxIsocEPList[epid].sub ? phys_to_virt(TxIsocEPList[epid].sub) : 0;
1500 }
1501
1502 while (iter_sb && (iter_sb != urb_priv->last_sb)) {
1503 iter_sb = iter_sb->next ? phys_to_virt(iter_sb->next) : 0;
1504 }
1505 if (iter_sb) {
1506 next_sb = iter_sb->next ? phys_to_virt(iter_sb->next) : 0;
1507 } else {
1508 /* This should only happen if the DMA has completed
1509 processing the SB list for this EP while interrupts
1510 are disabled. */
1511 dbg_isoc("Isoc urb not found, already sent?");
1512 next_sb = 0;
1513 }
1514 if (prev_sb) {
1515 prev_sb->next = next_sb ? virt_to_phys(next_sb) : 0;
1516 } else {
1517 TxIsocEPList[epid].sub = next_sb ? virt_to_phys(next_sb) : 0;
1518 }
1519
1520 etrax_remove_from_sb_list(urb);
1521 if (urb_list_empty(epid)) {
1522 TxIsocEPList[epid].sub = 0;
1523 dbg_isoc("Last isoc out urb epid %d", epid);
1524 } else if (next_sb || prev_sb) {
1525 dbg_isoc("Re-enable isoc out epid %d", epid);
1526
1527 TxIsocEPList[epid].hw_len = 0;
1528 TxIsocEPList[epid].command |= IO_STATE(USB_EP_command, enable, yes);
1529 } else {
1530 TxIsocEPList[epid].sub = 0;
1531 dbg_isoc("URB list non-empty and no SB list, EP disabled");
1532 }
1533 } else {
1534 dbg_isoc("Urb 0x%p not found, completed already?", urb);
1535 }
1536 } else {
1537
1538 urb_list_del(urb, epid);
1539
1540 /* For in traffic there is only one SB descriptor for each EP even
1541 though there may be several urbs (all urbs point at the same SB). */
1542 if (urb_list_empty(epid)) {
1543 /* No more urbs, remove the SB. */
1544 TxIsocEPList[epid].sub = 0;
1545 etrax_remove_from_sb_list(urb);
1546 } else {
1547 TxIsocEPList[epid].hw_len = 0;
1548 TxIsocEPList[epid].command |= IO_STATE(USB_EP_command, enable, yes);
1549 }
1550 }
1551 /* Release allocated bandwidth. */
1552 usb_release_bandwidth(urb->dev, urb, 1);
1553 }
1554 /* Free the epid if urb list is empty. */
1555 if (urb_list_empty(epid)) {
1556 etrax_usb_free_epid(epid);
1557 }
1558 restore_flags(flags);
1559
1560 /* Must be done before calling completion handler. */
1561 kfree(urb_priv);
1562 urb->hcpriv = 0;
1563
1564 if (urb->complete) {
1565 urb->complete(urb, NULL);
1566 }
1567
1568 DBFEXIT;
1569 return 0;
1570 }
1571
1572 static int etrax_usb_get_frame_number(struct usb_device *usb_dev)
1573 {
1574 DBFENTER;
1575 DBFEXIT;
1576 return (*R_USB_FM_NUMBER & 0x7ff);
1577 }
1578
1579 static irqreturn_t etrax_usb_tx_interrupt(int irq, void *vhc, struct pt_regs *regs)
1580 {
1581 DBFENTER;
1582
1583 /* This interrupt handler could be used when unlinking EP descriptors. */
1584
1585 if (*R_IRQ_READ2 & IO_MASK(R_IRQ_READ2, dma8_sub0_descr)) {
1586 USB_EP_Desc_t *ep;
1587
1588 //dbg_bulk("dma8_sub0_descr (BULK) intr.");
1589
1590 /* It should be safe clearing the interrupt here, since we don't expect to get a new
1591 one until we restart the bulk channel. */
1592 *R_DMA_CH8_SUB0_CLR_INTR = IO_STATE(R_DMA_CH8_SUB0_CLR_INTR, clr_descr, do);
1593
1594 /* Wait while the DMA is running (though we don't expect it to be). */
1595 while (*R_DMA_CH8_SUB0_CMD & IO_MASK(R_DMA_CH8_SUB0_CMD, cmd));
1596
1597 /* Advance the DMA to the next EP descriptor. */
1598 ep = (USB_EP_Desc_t *)phys_to_virt(*R_DMA_CH8_SUB0_EP);
1599
1600 //dbg_bulk("descr intr: DMA is at 0x%lx", (unsigned long)ep);
1601
1602 /* ep->next is already a physical address; no need for a virt_to_phys. */
1603 *R_DMA_CH8_SUB0_EP = ep->next;
1604
1605 /* Start the DMA bulk channel again. */
1606 *R_DMA_CH8_SUB0_CMD = IO_STATE(R_DMA_CH8_SUB0_CMD, cmd, start);
1607 }
1608 if (*R_IRQ_READ2 & IO_MASK(R_IRQ_READ2, dma8_sub1_descr)) {
1609 struct urb *urb;
1610 int epid;
1611 etrax_urb_priv_t *urb_priv;
1612 unsigned long int flags;
1613
1614 dbg_ctrl("dma8_sub1_descr (CTRL) intr.");
1615 *R_DMA_CH8_SUB1_CLR_INTR = IO_STATE(R_DMA_CH8_SUB1_CLR_INTR, clr_descr, do);
1616
1617 /* The complete callback gets called so we cli. */
1618 save_flags(flags);
1619 cli();
1620
1621 for (epid = 0; epid < NBR_OF_EPIDS - 1; epid++) {
1622 if ((TxCtrlEPList[epid].sub == 0) ||
1623 (epid == DUMMY_EPID) ||
1624 (epid == INVALID_EPID)) {
1625 /* Nothing here to see. */
1626 continue;
1627 }
1628
1629 /* Get the first urb (if any). */
1630 urb = urb_list_first(epid);
1631
1632 if (urb) {
1633
1634 /* Sanity check. */
1635 assert(usb_pipetype(urb->pipe) == PIPE_CONTROL);
1636
1637 urb_priv = (etrax_urb_priv_t *)urb->hcpriv;
1638 assert(urb_priv);
1639
1640 if (urb_priv->urb_state == WAITING_FOR_DESCR_INTR) {
1641 assert(!(TxCtrlEPList[urb_priv->epid].command & IO_MASK(USB_EP_command, enable)));
1642
1643 etrax_usb_complete_urb(urb, 0);
1644 }
1645 }
1646 }
1647 restore_flags(flags);
1648 }
1649 if (*R_IRQ_READ2 & IO_MASK(R_IRQ_READ2, dma8_sub2_descr)) {
1650 dbg_intr("dma8_sub2_descr (INTR) intr.");
1651 *R_DMA_CH8_SUB2_CLR_INTR = IO_STATE(R_DMA_CH8_SUB2_CLR_INTR, clr_descr, do);
1652 }
1653 if (*R_IRQ_READ2 & IO_MASK(R_IRQ_READ2, dma8_sub3_descr)) {
1654 struct urb *urb;
1655 int epid;
1656 int epid_done;
1657 etrax_urb_priv_t *urb_priv;
1658 USB_SB_Desc_t *sb_desc;
1659
1660 usb_isoc_complete_data_t *comp_data = NULL;
1661
1662 /* One or more isoc out transfers are done. */
1663 dbg_isoc("dma8_sub3_descr (ISOC) intr.");
1664
1665 /* For each isoc out EP search for the first sb_desc with the intr flag
1666 set. This descriptor must be the last packet from an URB. Then
1667 traverse the URB list for the EP until the URB with urb_priv->last_sb
1668 matching the intr-marked sb_desc is found. All URBs before this have
1669 been sent.
1670 */
1671
1672 for (epid = 0; epid < NBR_OF_EPIDS - 1; epid++) {
1673 /* Skip past epids with no SB lists, epids used for in traffic,
1674 and special (dummy, invalid) epids. */
1675 if ((TxIsocEPList[epid].sub == 0) ||
1676 (test_bit(epid, (void *)&epid_out_traffic) == 0) ||
1677 (epid == DUMMY_EPID) ||
1678 (epid == INVALID_EPID)) {
1679 /* Nothing here to see. */
1680 continue;
1681 }
1682 sb_desc = phys_to_virt(TxIsocEPList[epid].sub);
1683
1684 /* Find the last descriptor of the currently active URB for this ep.
1685 This is the first descriptor in the sub list marked for a descriptor
1686 interrupt. */
1687 while (sb_desc && !IO_EXTRACT(USB_SB_command, intr, sb_desc->command)) {
1688 sb_desc = sb_desc->next ? phys_to_virt(sb_desc->next) : 0;
1689 }
1690 assert(sb_desc);
1691
1692 dbg_isoc("Check epid %d, sub 0x%p, SB 0x%p",
1693 epid,
1694 phys_to_virt(TxIsocEPList[epid].sub),
1695 sb_desc);
1696
1697 epid_done = 0;
1698
1699 /* Get the first urb (if any). */
1700 urb = urb_list_first(epid);
1701 assert(urb);
1702
1703 while (urb && !epid_done) {
1704
1705 /* Sanity check. */
1706 assert(usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS);
1707
1708 if (!usb_pipeout(urb->pipe)) {
1709 /* descr interrupts are generated only for out pipes. */
1710 epid_done = 1;
1711 continue;
1712 }
1713
1714 urb_priv = (etrax_urb_priv_t *)urb->hcpriv;
1715 assert(urb_priv);
1716
1717 if (sb_desc != urb_priv->last_sb) {
1718
1719 /* This urb has been sent. */
1720 dbg_isoc("out URB 0x%p sent", urb);
1721
1722 urb_priv->urb_state = TRANSFER_DONE;
1723
1724 } else if ((sb_desc == urb_priv->last_sb) &&
1725 !(TxIsocEPList[epid].command & IO_MASK(USB_EP_command, enable))) {
1726
1727 assert((sb_desc->command & IO_MASK(USB_SB_command, eol)) == IO_STATE(USB_SB_command, eol, yes));
1728 assert(sb_desc->next == 0);
1729
1730 dbg_isoc("out URB 0x%p last in list, epid disabled", urb);
1731 TxIsocEPList[epid].sub = 0;
1732 TxIsocEPList[epid].hw_len = 0;
1733 urb_priv->urb_state = TRANSFER_DONE;
1734
1735 epid_done = 1;
1736
1737 } else {
1738 epid_done = 1;
1739 }
1740 if (!epid_done) {
1741 urb = urb_list_next(urb, epid);
1742 }
1743 }
1744
1745 }
1746
1747 *R_DMA_CH8_SUB3_CLR_INTR = IO_STATE(R_DMA_CH8_SUB3_CLR_INTR, clr_descr, do);
1748
1749 comp_data = (usb_isoc_complete_data_t*)kmem_cache_alloc(isoc_compl_cache, SLAB_ATOMIC);
1750 assert(comp_data != NULL);
1751
1752 INIT_WORK(&comp_data->usb_bh, etrax_usb_isoc_descr_interrupt_bottom_half, comp_data);
1753 schedule_work(&comp_data->usb_bh);
1754 }
1755
1756 DBFEXIT;
1757 return IRQ_HANDLED;
1758 }
1759
1760 static void etrax_usb_isoc_descr_interrupt_bottom_half(void *data)
1761 {
1762 usb_isoc_complete_data_t *comp_data = (usb_isoc_complete_data_t*)data;
1763
1764 struct urb *urb;
1765 int epid;
1766 int epid_done;
1767 etrax_urb_priv_t *urb_priv;
1768
1769 DBFENTER;
1770
1771 dbg_isoc("dma8_sub3_descr (ISOC) bottom half.");
1772
1773 for (epid = 0; epid < NBR_OF_EPIDS - 1; epid++) {
1774 unsigned long flags;
1775
1776 save_flags(flags);
1777 cli();
1778
1779 epid_done = 0;
1780
1781 /* The descriptor interrupt handler has marked all transmitted isoch. out
1782 URBs with TRANSFER_DONE. Now we traverse all epids and for all that
1783 have isoch. out traffic traverse its URB list and complete the
1784 transmitted URB.
1785 */
1786
1787 while (!epid_done) {
1788
1789 /* Get the first urb (if any). */
1790 urb = urb_list_first(epid);
1791 if (urb == 0) {
1792 epid_done = 1;
1793 continue;
1794 }
1795
1796 if (usb_pipetype(urb->pipe) != PIPE_ISOCHRONOUS) {
1797 epid_done = 1;
1798 continue;
1799 }
1800
1801 if (!usb_pipeout(urb->pipe)) {
1802 /* descr interrupts are generated only for out pipes. */
1803 epid_done = 1;
1804 continue;
1805 }
1806
1807 dbg_isoc("Check epid %d, SB 0x%p", epid, (char*)TxIsocEPList[epid].sub);
1808
1809 urb_priv = (etrax_urb_priv_t *)urb->hcpriv;
1810 assert(urb_priv);
1811
1812 if (urb_priv->urb_state == TRANSFER_DONE) {
1813 int i;
1814 struct usb_iso_packet_descriptor *packet;
1815
1816 /* This urb has been sent. */
1817 dbg_isoc("Completing isoc out URB 0x%p", urb);
1818
1819 for (i = 0; i < urb->number_of_packets; i++) {
1820 packet = &urb->iso_frame_desc[i];
1821 packet->status = 0;
1822 packet->actual_length = packet->length;
1823 }
1824
1825 etrax_usb_complete_isoc_urb(urb, 0);
1826
1827 if (urb_list_empty(epid)) {
1828 etrax_usb_free_epid(epid);
1829 epid_done = 1;
1830 }
1831 } else {
1832 epid_done = 1;
1833 }
1834 }
1835 restore_flags(flags);
1836
1837 }
1838 kmem_cache_free(isoc_compl_cache, comp_data);
1839
1840 DBFEXIT;
1841 }
1842
1843
1844
1845 static irqreturn_t etrax_usb_rx_interrupt(int irq, void *vhc, struct pt_regs *regs)
1846 {
1847 struct urb *urb;
1848 etrax_urb_priv_t *urb_priv;
1849 int epid = 0;
1850 unsigned long flags;
1851
1852 /* Isoc diagnostics. */
1853 static int curr_fm = 0;
1854 static int prev_fm = 0;
1855
1856 DBFENTER;
1857
1858 /* Clear this interrupt. */
1859 *R_DMA_CH9_CLR_INTR = IO_STATE(R_DMA_CH9_CLR_INTR, clr_eop, do);
1860
1861 /* Note that this while loop assumes that all packets span only
1862 one rx descriptor. */
1863
1864 /* The reason we cli here is that we call the driver's callback functions. */
1865 save_flags(flags);
1866 cli();
1867
1868 while (myNextRxDesc->status & IO_MASK(USB_IN_status, eop)) {
1869
1870 epid = IO_EXTRACT(USB_IN_status, epid, myNextRxDesc->status);
1871 urb = urb_list_first(epid);
1872
1873 //printk("eop for epid %d, first urb 0x%lx\n", epid, (unsigned long)urb);
1874
1875 if (!urb) {
1876 err("No urb for epid %d in rx interrupt", epid);
1877 __dump_ept_data(epid);
1878 goto skip_out;
1879 }
1880
1881 /* Note that we cannot indescriminately assert(usb_pipein(urb->pipe)) since
1882 ctrl pipes are not. */
1883
1884 if (myNextRxDesc->status & IO_MASK(USB_IN_status, error)) {
1885 __u32 r_usb_ept_data;
1886 int no_error = 0;
1887
1888 assert(test_bit(epid, (void *)&epid_usage_bitmask));
1889
1890 *R_USB_EPT_INDEX = IO_FIELD(R_USB_EPT_INDEX, value, epid);
1891 nop();
1892 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) {
1893 r_usb_ept_data = *R_USB_EPT_DATA_ISO;
1894
1895 if ((r_usb_ept_data & IO_MASK(R_USB_EPT_DATA_ISO, valid)) &&
1896 (IO_EXTRACT(R_USB_EPT_DATA_ISO, error_code, r_usb_ept_data) == 0) &&
1897 (myNextRxDesc->status & IO_MASK(USB_IN_status, nodata))) {
1898 /* Not an error, just a failure to receive an expected iso
1899 in packet in this frame. This is not documented
1900 in the designers reference.
1901 */
1902 no_error++;
1903 } else {
1904 warn("R_USB_EPT_DATA_ISO for epid %d = 0x%x", epid, r_usb_ept_data);
1905 }
1906 } else {
1907 r_usb_ept_data = *R_USB_EPT_DATA;
1908 warn("R_USB_EPT_DATA for epid %d = 0x%x", epid, r_usb_ept_data);
1909 }
1910
1911 if (!no_error){
1912 warn("error in rx desc->status, epid %d, first urb = 0x%lx",
1913 epid, (unsigned long)urb);
1914 __dump_in_desc(myNextRxDesc);
1915
1916 warn("R_USB_STATUS = 0x%x", *R_USB_STATUS);
1917
1918 /* Check that ept was disabled when error occurred. */
1919 switch (usb_pipetype(urb->pipe)) {
1920 case PIPE_BULK:
1921 assert(!(TxBulkEPList[epid].command & IO_MASK(USB_EP_command, enable)));
1922 break;
1923 case PIPE_CONTROL:
1924 assert(!(TxCtrlEPList[epid].command & IO_MASK(USB_EP_command, enable)));
1925 break;
1926 case PIPE_INTERRUPT:
1927 assert(!(TxIntrEPList[epid].command & IO_MASK(USB_EP_command, enable)));
1928 break;
1929 case PIPE_ISOCHRONOUS:
1930 assert(!(TxIsocEPList[epid].command & IO_MASK(USB_EP_command, enable)));
1931 break;
1932 default:
1933 warn("etrax_usb_rx_interrupt: bad pipetype %d in urb 0x%p",
1934 usb_pipetype(urb->pipe),
1935 urb);
1936 }
1937 etrax_usb_complete_urb(urb, -EPROTO);
1938 goto skip_out;
1939 }
1940 }
1941
1942 urb_priv = (etrax_urb_priv_t *)urb->hcpriv;
1943 assert(urb_priv);
1944
1945 if ((usb_pipetype(urb->pipe) == PIPE_BULK) ||
1946 (usb_pipetype(urb->pipe) == PIPE_CONTROL) ||
1947 (usb_pipetype(urb->pipe) == PIPE_INTERRUPT)) {
1948
1949 if (myNextRxDesc->status & IO_MASK(USB_IN_status, nodata)) {
1950 /* We get nodata for empty data transactions, and the rx descriptor's
1951 hw_len field is not valid in that case. No data to copy in other
1952 words. */
1953 } else {
1954 /* Make sure the data fits in the buffer. */
1955 assert(urb_priv->rx_offset + myNextRxDesc->hw_len
1956 <= urb->transfer_buffer_length);
1957
1958 memcpy(urb->transfer_buffer + urb_priv->rx_offset,
1959 phys_to_virt(myNextRxDesc->buf), myNextRxDesc->hw_len);
1960 urb_priv->rx_offset += myNextRxDesc->hw_len;
1961 }
1962
1963 if (myNextRxDesc->status & IO_MASK(USB_IN_status, eot)) {
1964 if ((usb_pipetype(urb->pipe) == PIPE_CONTROL) &&
1965 ((TxCtrlEPList[urb_priv->epid].command & IO_MASK(USB_EP_command, enable)) ==
1966 IO_STATE(USB_EP_command, enable, yes))) {
1967 /* The EP is still enabled, so the OUT packet used to ack
1968 the in data is probably not processed yet. If the EP
1969 sub pointer has not moved beyond urb_priv->last_sb mark
1970 it for a descriptor interrupt and complete the urb in
1971 the descriptor interrupt handler.
1972 */
1973 USB_SB_Desc_t *sub = TxCtrlEPList[urb_priv->epid].sub ? phys_to_virt(TxCtrlEPList[urb_priv->epid].sub) : 0;
1974
1975 while ((sub != NULL) && (sub != urb_priv->last_sb)) {
1976 sub = sub->next ? phys_to_virt(sub->next) : 0;
1977 }
1978 if (sub != NULL) {
1979 /* The urb has not been fully processed. */
1980 urb_priv->urb_state = WAITING_FOR_DESCR_INTR;
1981 } else {
1982 warn("(CTRL) epid enabled and urb (0x%p) processed, ep->sub=0x%p", urb, (char*)TxCtrlEPList[urb_priv->epid].sub);
1983 etrax_usb_complete_urb(urb, 0);
1984 }
1985 } else {
1986 etrax_usb_complete_urb(urb, 0);
1987 }
1988 }
1989
1990 } else if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) {
1991
1992 struct usb_iso_packet_descriptor *packet;
1993
1994 if (urb_priv->urb_state == UNLINK) {
1995 info("Ignoring rx data for urb being unlinked.");
1996 goto skip_out;
1997 } else if (urb_priv->urb_state == NOT_STARTED) {
1998 info("What? Got rx data for urb that isn't started?");
1999 goto skip_out;
2000 }
2001
2002 packet = &urb->iso_frame_desc[urb_priv->isoc_packet_counter];
2003 packet->status = 0;
2004
2005 if (myNextRxDesc->status & IO_MASK(USB_IN_status, nodata)) {
2006 /* We get nodata for empty data transactions, and the rx descriptor's
2007 hw_len field is not valid in that case. We copy 0 bytes however to
2008 stay in synch. */
2009 packet->actual_length = 0;
2010 } else {
2011 packet->actual_length = myNextRxDesc->hw_len;
2012 /* Make sure the data fits in the buffer. */
2013 assert(packet->actual_length <= packet->length);
2014 memcpy(urb->transfer_buffer + packet->offset,
2015 phys_to_virt(myNextRxDesc->buf), packet->actual_length);
2016 }
2017
2018 /* Increment the packet counter. */
2019 urb_priv->isoc_packet_counter++;
2020
2021 /* Note that we don't care about the eot field in the rx descriptor's status.
2022 It will always be set for isoc traffic. */
2023 if (urb->number_of_packets == urb_priv->isoc_packet_counter) {
2024
2025 /* Out-of-synch diagnostics. */
2026 curr_fm = (*R_USB_FM_NUMBER & 0x7ff);
2027 if (((prev_fm + urb_priv->isoc_packet_counter) % (0x7ff + 1)) != curr_fm) {
2028 /* This test is wrong, if there is more than one isoc
2029 in endpoint active it will always calculate wrong
2030 since prev_fm is shared by all endpoints.
2031
2032 FIXME Make this check per URB using urb->start_frame.
2033 */
2034 dbg_isoc("Out of synch? Previous frame = %d, current frame = %d",
2035 prev_fm, curr_fm);
2036
2037 }
2038 prev_fm = curr_fm;
2039
2040 /* Complete the urb with status OK. */
2041 etrax_usb_complete_isoc_urb(urb, 0);
2042 }
2043 }
2044
2045 skip_out:
2046
2047 /* DMA IN cache bug. Flush the DMA IN buffer from the cache. (struct etrax_dma_descr
2048 has the same layout as USB_IN_Desc for the relevant fields.) */
2049 prepare_rx_descriptor((struct etrax_dma_descr*)myNextRxDesc);
2050
2051 myPrevRxDesc = myNextRxDesc;
2052 myPrevRxDesc->command |= IO_MASK(USB_IN_command, eol);
2053 myLastRxDesc->command &= ~IO_MASK(USB_IN_command, eol);
2054 myLastRxDesc = myPrevRxDesc;
2055
2056 myNextRxDesc->status = 0;
2057 myNextRxDesc = phys_to_virt(myNextRxDesc->next);
2058 }
2059
2060 restore_flags(flags);
2061
2062 DBFEXIT;
2063
2064 return IRQ_HANDLED;
2065 }
2066
2067
2068 /* This function will unlink the SB descriptors associated with this urb. */
2069 static int etrax_remove_from_sb_list(struct urb *urb)
2070 {
2071 USB_SB_Desc_t *next_sb, *first_sb, *last_sb;
2072 etrax_urb_priv_t *urb_priv;
2073 int i = 0;
2074
2075 DBFENTER;
2076
2077 urb_priv = (etrax_urb_priv_t *)urb->hcpriv;
2078 assert(urb_priv);
2079
2080 /* Just a sanity check. Since we don't fiddle with the DMA list the EP descriptor
2081 doesn't really need to be disabled, it's just that we expect it to be. */
2082 if (usb_pipetype(urb->pipe) == PIPE_BULK) {
2083 assert(!(TxBulkEPList[urb_priv->epid].command & IO_MASK(USB_EP_command, enable)));
2084 } else if (usb_pipetype(urb->pipe) == PIPE_CONTROL) {
2085 assert(!(TxCtrlEPList[urb_priv->epid].command & IO_MASK(USB_EP_command, enable)));
2086 }
2087
2088 first_sb = urb_priv->first_sb;
2089 last_sb = urb_priv->last_sb;
2090
2091 assert(first_sb);
2092 assert(last_sb);
2093
2094 while (first_sb != last_sb) {
2095 next_sb = (USB_SB_Desc_t *)phys_to_virt(first_sb->next);
2096 kmem_cache_free(usb_desc_cache, first_sb);
2097 first_sb = next_sb;
2098 i++;
2099 }
2100 kmem_cache_free(usb_desc_cache, last_sb);
2101 i++;
2102 dbg_sb("%d SB descriptors freed", i);
2103 /* Compare i with urb->number_of_packets for Isoc traffic.
2104 Should be same when calling unlink_urb */
2105
2106 DBFEXIT;
2107
2108 return i;
2109 }
2110
2111 static int etrax_usb_submit_bulk_urb(struct urb *urb)
2112 {
2113 int epid;
2114 int empty;
2115 unsigned long flags;
2116 etrax_urb_priv_t *urb_priv;
2117
2118 DBFENTER;
2119
2120 /* Epid allocation, empty check and list add must be protected.
2121 Read about this in etrax_usb_submit_ctrl_urb. */
2122
2123 spin_lock_irqsave(&urb_list_lock, flags);
2124 epid = etrax_usb_setup_epid(urb);
2125 if (epid == -1) {
2126 DBFEXIT;
2127 spin_unlock_irqrestore(&urb_list_lock, flags);
2128 return -ENOMEM;
2129 }
2130 empty = urb_list_empty(epid);
2131 urb_list_add(urb, epid);
2132 spin_unlock_irqrestore(&urb_list_lock, flags);
2133
2134 dbg_bulk("Adding bulk %s urb 0x%lx to %s list, epid %d",
2135 usb_pipein(urb->pipe) ? "IN" : "OUT", (unsigned long)urb, empty ? "empty" : "", epid);
2136
2137 /* Mark the urb as being in progress. */
2138 urb->status = -EINPROGRESS;
2139
2140 /* Setup the hcpriv data. */
2141 urb_priv = kmalloc(sizeof(etrax_urb_priv_t), KMALLOC_FLAG);
2142 assert(urb_priv != NULL);
2143 /* This sets rx_offset to 0. */
2144 memset(urb_priv, 0, sizeof(etrax_urb_priv_t));
2145 urb_priv->urb_state = NOT_STARTED;
2146 urb->hcpriv = urb_priv;
2147
2148 if (empty) {
2149 etrax_usb_add_to_bulk_sb_list(urb, epid);
2150 }
2151
2152 DBFEXIT;
2153
2154 return 0;
2155 }
2156
2157 static void etrax_usb_add_to_bulk_sb_list(struct urb *urb, int epid)
2158 {
2159 USB_SB_Desc_t *sb_desc;
2160 etrax_urb_priv_t *urb_priv = (etrax_urb_priv_t *)urb->hcpriv;
2161 unsigned long flags;
2162 char maxlen;
2163
2164 DBFENTER;
2165
2166 dbg_bulk("etrax_usb_add_to_bulk_sb_list, urb 0x%lx", (unsigned long)urb);
2167
2168 maxlen = usb_maxpacket(urb->dev, urb->pipe, usb_pipeout(urb->pipe));
2169
2170 sb_desc = (USB_SB_Desc_t*)kmem_cache_alloc(usb_desc_cache, SLAB_FLAG);
2171 assert(sb_desc != NULL);
2172 memset(sb_desc, 0, sizeof(USB_SB_Desc_t));
2173
2174
2175 if (usb_pipeout(urb->pipe)) {
2176
2177 dbg_bulk("Grabbing bulk OUT, urb 0x%lx, epid %d", (unsigned long)urb, epid);
2178
2179 /* This is probably a sanity check of the bulk transaction length
2180 not being larger than 64 kB. */
2181 if (urb->transfer_buffer_length > 0xffff) {
2182 panic("urb->transfer_buffer_length > 0xffff");
2183 }
2184
2185 sb_desc->sw_len = urb->transfer_buffer_length;
2186
2187 /* The rem field is don't care if it's not a full-length transfer, so setting
2188 it shouldn't hurt. Also, rem isn't used for OUT traffic. */
2189 sb_desc->command = (IO_FIELD(USB_SB_command, rem, 0) |
2190 IO_STATE(USB_SB_command, tt, out) |
2191 IO_STATE(USB_SB_command, eot, yes) |
2192 IO_STATE(USB_SB_command, eol, yes));
2193
2194 /* The full field is set to yes, even if we don't actually check that this is
2195 a full-length transfer (i.e., that transfer_buffer_length % maxlen = 0).
2196 Setting full prevents the USB controller from sending an empty packet in
2197 that case. However, if URB_ZERO_PACKET was set we want that. */
2198 if (!(urb->transfer_flags & URB_ZERO_PACKET)) {
2199 sb_desc->command |= IO_STATE(USB_SB_command, full, yes);
2200 }
2201
2202 sb_desc->buf = virt_to_phys(urb->transfer_buffer);
2203 sb_desc->next = 0;
2204
2205 } else if (usb_pipein(urb->pipe)) {
2206
2207 dbg_bulk("Grabbing bulk IN, urb 0x%lx, epid %d", (unsigned long)urb, epid);
2208
2209 sb_desc->sw_len = urb->transfer_buffer_length ?
2210 (urb->transfer_buffer_length - 1) / maxlen + 1 : 0;
2211
2212 /* The rem field is don't care if it's not a full-length transfer, so setting
2213 it shouldn't hurt. */
2214 sb_desc->command =
2215 (IO_FIELD(USB_SB_command, rem,
2216 urb->transfer_buffer_length % maxlen) |
2217 IO_STATE(USB_SB_command, tt, in) |
2218 IO_STATE(USB_SB_command, eot, yes) |
2219 IO_STATE(USB_SB_command, eol, yes));
2220
2221 sb_desc->buf = 0;
2222 sb_desc->next = 0;
2223 }
2224
2225 urb_priv->first_sb = sb_desc;
2226 urb_priv->last_sb = sb_desc;
2227 urb_priv->epid = epid;
2228
2229 urb->hcpriv = urb_priv;
2230
2231 /* Reset toggle bits and reset error count. */
2232 save_flags(flags);
2233 cli();
2234
2235 *R_USB_EPT_INDEX = IO_FIELD(R_USB_EPT_INDEX, value, epid);
2236 nop();
2237
2238 /* FIXME: Is this a special case since the hold field is checked,
2239 or should we check hold in a lot of other cases as well? */
2240 if (*R_USB_EPT_DATA & IO_MASK(R_USB_EPT_DATA, hold)) {
2241 panic("Hold was set in %s", __FUNCTION__);
2242 }
2243
2244 /* Reset error counters (regardless of which direction this traffic is). */
2245 *R_USB_EPT_DATA &=
2246 ~(IO_MASK(R_USB_EPT_DATA, error_count_in) |
2247 IO_MASK(R_USB_EPT_DATA, error_count_out));
2248
2249 /* Software must preset the toggle bits. */
2250 if (usb_pipeout(urb->pipe)) {
2251 char toggle =
2252 usb_gettoggle(urb->dev, usb_pipeendpoint(urb->pipe), usb_pipeout(urb->pipe));
2253 *R_USB_EPT_DATA &= ~IO_MASK(R_USB_EPT_DATA, t_out);
2254 *R_USB_EPT_DATA |= IO_FIELD(R_USB_EPT_DATA, t_out, toggle);
2255 } else {
2256 char toggle =
2257 usb_gettoggle(urb->dev, usb_pipeendpoint(urb->pipe), usb_pipeout(urb->pipe));
2258 *R_USB_EPT_DATA &= ~IO_MASK(R_USB_EPT_DATA, t_in);
2259 *R_USB_EPT_DATA |= IO_FIELD(R_USB_EPT_DATA, t_in, toggle);
2260 }
2261
2262 /* Assert that the EP descriptor is disabled. */
2263 assert(!(TxBulkEPList[epid].command & IO_MASK(USB_EP_command, enable)));
2264
2265 /* The reason we set the EP's sub pointer directly instead of
2266 walking the SB list and linking it last in the list is that we only
2267 have one active urb at a time (the rest are queued). */
2268
2269 /* Note that we cannot have interrupts running when we have set the SB descriptor
2270 but the EP is not yet enabled. If a bulk eot happens for another EP, we will
2271 find this EP disabled and with a SB != 0, which will make us think that it's done. */
2272 TxBulkEPList[epid].sub = virt_to_phys(sb_desc);
2273 TxBulkEPList[epid].hw_len = 0;
2274 /* Note that we don't have to fill in the ep_id field since this
2275 was done when we allocated the EP descriptors in init_tx_bulk_ep. */
2276
2277 /* Check if the dummy list is already with us (if several urbs were queued). */
2278 if (TxBulkEPList[epid].next != virt_to_phys(&TxBulkDummyEPList[epid][0])) {
2279
2280 dbg_bulk("Inviting dummy list to the party for urb 0x%lx, epid %d",
2281 (unsigned long)urb, epid);
2282
2283 /* The last EP in the dummy list already has its next pointer set to
2284 TxBulkEPList[epid].next. */
2285
2286 /* We don't need to check if the DMA is at this EP or not before changing the
2287 next pointer, since we will do it in one 32-bit write (EP descriptors are
2288 32-bit aligned). */
2289 TxBulkEPList[epid].next = virt_to_phys(&TxBulkDummyEPList[epid][0]);
2290 }
2291 /* Enable the EP descr. */
2292 dbg_bulk("Enabling bulk EP for urb 0x%lx, epid %d", (unsigned long)urb, epid);
2293 TxBulkEPList[epid].command |= IO_STATE(USB_EP_command, enable, yes);
2294
2295 /* Everything is set up, safe to enable interrupts again. */
2296 restore_flags(flags);
2297
2298 /* If the DMA bulk channel isn't running, we need to restart it if it
2299 has stopped at the last EP descriptor (DMA stopped because there was
2300 no more traffic) or if it has stopped at a dummy EP with the intr flag
2301 set (DMA stopped because we were too slow in inserting new traffic). */
2302 if (!(*R_DMA_CH8_SUB0_CMD & IO_MASK(R_DMA_CH8_SUB0_CMD, cmd))) {
2303
2304 USB_EP_Desc_t *ep;
2305 ep = (USB_EP_Desc_t *)phys_to_virt(*R_DMA_CH8_SUB0_EP);
2306 dbg_bulk("DMA channel not running in add");
2307 dbg_bulk("DMA is at 0x%lx", (unsigned long)ep);
2308
2309 if (*R_DMA_CH8_SUB0_EP == virt_to_phys(&TxBulkEPList[NBR_OF_EPIDS - 1]) ||
2310 (ep->command & 0x8) >> 3) {
2311 *R_DMA_CH8_SUB0_CMD = IO_STATE(R_DMA_CH8_SUB0_CMD, cmd, start);
2312 /* Update/restart the bulk start timer since we just started the channel. */
2313 mod_timer(&bulk_start_timer, jiffies + BULK_START_TIMER_INTERVAL);
2314 /* Update/restart the bulk eot timer since we just inserted traffic. */
2315 mod_timer(&bulk_eot_timer, jiffies + BULK_EOT_TIMER_INTERVAL);
2316 }
2317 }
2318
2319 DBFEXIT;
2320 }
2321
2322 static void etrax_usb_complete_bulk_urb(struct urb *urb, int status)
2323 {
2324 etrax_urb_priv_t *urb_priv = (etrax_urb_priv_t *)urb->hcpriv;
2325 int epid = urb_priv->epid;
2326 unsigned long flags;
2327
2328 DBFENTER;
2329
2330 if (status)
2331 warn("Completing bulk urb with status %d.", status);
2332
2333 dbg_bulk("Completing bulk urb 0x%lx for epid %d", (unsigned long)urb, epid);
2334
2335 /* Update the urb list. */
2336 urb_list_del(urb, epid);
2337
2338 /* For an IN pipe, we always set the actual length, regardless of whether there was
2339 an error or not (which means the device driver can use the data if it wants to). */
2340 if (usb_pipein(urb->pipe)) {
2341 urb->actual_length = urb_priv->rx_offset;
2342 } else {
2343 /* Set actual_length for OUT urbs also; the USB mass storage driver seems
2344 to want that. We wouldn't know of any partial writes if there was an error. */
2345 if (status == 0) {
2346 urb->actual_length = urb->transfer_buffer_length;
2347 } else {
2348 urb->actual_length = 0;
2349 }
2350 }
2351
2352 /* FIXME: Is there something of the things below we shouldn't do if there was an error?
2353 Like, maybe we shouldn't toggle the toggle bits, or maybe we shouldn't insert more traffic. */
2354
2355 save_flags(flags);
2356 cli();
2357
2358 *R_USB_EPT_INDEX = IO_FIELD(R_USB_EPT_INDEX, value, epid);
2359 nop();
2360
2361 /* We need to fiddle with the toggle bits because the hardware doesn't do it for us. */
2362 if (usb_pipeout(urb->pipe)) {
2363 char toggle =
2364 IO_EXTRACT(R_USB_EPT_DATA, t_out, *R_USB_EPT_DATA);
2365 usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe),
2366 usb_pipeout(urb->pipe), toggle);
2367 } else {
2368 char toggle =
2369 IO_EXTRACT(R_USB_EPT_DATA, t_in, *R_USB_EPT_DATA);
2370 usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe),
2371 usb_pipeout(urb->pipe), toggle);
2372 }
2373 restore_flags(flags);
2374
2375 /* Remember to free the SBs. */
2376 etrax_remove_from_sb_list(urb);
2377 kfree(urb_priv);
2378 urb->hcpriv = 0;
2379
2380 /* If there are any more urb's in the list we'd better start sending */
2381 if (!urb_list_empty(epid)) {
2382
2383 struct urb *new_urb;
2384
2385 /* Get the first urb. */
2386 new_urb = urb_list_first(epid);
2387 assert(new_urb);
2388
2389 dbg_bulk("More bulk for epid %d", epid);
2390
2391 etrax_usb_add_to_bulk_sb_list(new_urb, epid);
2392 }
2393
2394 urb->status = status;
2395
2396 /* We let any non-zero status from the layer above have precedence. */
2397 if (status == 0) {
2398 /* URB_SHORT_NOT_OK means that short reads (shorter than the endpoint's max length)
2399 is to be treated as an error. */
2400 if (urb->transfer_flags & URB_SHORT_NOT_OK) {
2401 if (usb_pipein(urb->pipe) &&
2402 (urb->actual_length !=
2403 usb_maxpacket(urb->dev, urb->pipe, usb_pipeout(urb->pipe)))) {
2404 urb->status = -EREMOTEIO;
2405 }
2406 }
2407 }
2408
2409 if (urb->complete) {
2410 urb->complete(urb, NULL);
2411 }
2412
2413 if (urb_list_empty(epid)) {
2414 /* This means that this EP is now free, deconfigure it. */
2415 etrax_usb_free_epid(epid);
2416
2417 /* No more traffic; time to clean up.
2418 Must set sub pointer to 0, since we look at the sub pointer when handling
2419 the bulk eot interrupt. */
2420
2421 dbg_bulk("No bulk for epid %d", epid);
2422
2423 TxBulkEPList[epid].sub = 0;
2424
2425 /* Unlink the dummy list. */
2426
2427 dbg_bulk("Kicking dummy list out of party for urb 0x%lx, epid %d",
2428 (unsigned long)urb, epid);
2429
2430 /* No need to wait for the DMA before changing the next pointer.
2431 The modulo NBR_OF_EPIDS isn't actually necessary, since we will never use
2432 the last one (INVALID_EPID) for actual traffic. */
2433 TxBulkEPList[epid].next =
2434 virt_to_phys(&TxBulkEPList[(epid + 1) % NBR_OF_EPIDS]);
2435 }
2436
2437 DBFEXIT;
2438 }
2439
2440 static int etrax_usb_submit_ctrl_urb(struct urb *urb)
2441 {
2442 int epid;
2443 int empty;
2444 unsigned long flags;
2445 etrax_urb_priv_t *urb_priv;
2446
2447 DBFENTER;
2448
2449 /* FIXME: Return -ENXIO if there is already a queued urb for this endpoint? */
2450
2451 /* Epid allocation, empty check and list add must be protected.
2452
2453 Epid allocation because if we find an existing epid for this endpoint an urb might be
2454 completed (emptying the list) before we add the new urb to the list, causing the epid
2455 to be de-allocated. We would then start the transfer with an invalid epid -> epid attn.
2456
2457 Empty check and add because otherwise we might conclude that the list is not empty,
2458 after which it becomes empty before we add the new urb to the list, causing us not to
2459 insert the new traffic into the SB list. */
2460
2461 spin_lock_irqsave(&urb_list_lock, flags);
2462 epid = etrax_usb_setup_epid(urb);
2463 if (epid == -1) {
2464 spin_unlock_irqrestore(&urb_list_lock, flags);
2465 DBFEXIT;
2466 return -ENOMEM;
2467 }
2468 empty = urb_list_empty(epid);
2469 urb_list_add(urb, epid);
2470 spin_unlock_irqrestore(&urb_list_lock, flags);
2471
2472 dbg_ctrl("Adding ctrl urb 0x%lx to %s list, epid %d",
2473 (unsigned long)urb, empty ? "empty" : "", epid);
2474
2475 /* Mark the urb as being in progress. */
2476 urb->status = -EINPROGRESS;
2477
2478 /* Setup the hcpriv data. */
2479 urb_priv = kmalloc(sizeof(etrax_urb_priv_t), KMALLOC_FLAG);
2480 assert(urb_priv != NULL);
2481 /* This sets rx_offset to 0. */
2482 memset(urb_priv, 0, sizeof(etrax_urb_priv_t));
2483 urb_priv->urb_state = NOT_STARTED;
2484 urb->hcpriv = urb_priv;
2485
2486 if (empty) {
2487 etrax_usb_add_to_ctrl_sb_list(urb, epid);
2488 }
2489
2490 DBFEXIT;
2491
2492 return 0;
2493 }
2494
2495 static void etrax_usb_add_to_ctrl_sb_list(struct urb *urb, int epid)
2496 {
2497 USB_SB_Desc_t *sb_desc_setup;
2498 USB_SB_Desc_t *sb_desc_data;
2499 USB_SB_Desc_t *sb_desc_status;
2500
2501 etrax_urb_priv_t *urb_priv = (etrax_urb_priv_t *)urb->hcpriv;
2502
2503 unsigned long flags;
2504 char maxlen;
2505
2506 DBFENTER;
2507
2508 maxlen = usb_maxpacket(urb->dev, urb->pipe, usb_pipeout(urb->pipe));
2509
2510 sb_desc_setup = (USB_SB_Desc_t*)kmem_cache_alloc(usb_desc_cache, SLAB_FLAG);
2511 assert(sb_desc_setup != NULL);
2512 sb_desc_status = (USB_SB_Desc_t*)kmem_cache_alloc(usb_desc_cache, SLAB_FLAG);
2513 assert(sb_desc_status != NULL);
2514
2515 /* Initialize the mandatory setup SB descriptor (used only in control transfers) */
2516 sb_desc_setup->sw_len = 8;
2517 sb_desc_setup->command = (IO_FIELD(USB_SB_command, rem, 0) |
2518 IO_STATE(USB_SB_command, tt, setup) |
2519 IO_STATE(USB_SB_command, full, yes) |
2520 IO_STATE(USB_SB_command, eot, yes));
2521
2522 sb_desc_setup->buf = virt_to_phys(urb->setup_packet);
2523
2524 if (usb_pipeout(urb->pipe)) {
2525 dbg_ctrl("Transfer for epid %d is OUT", epid);
2526
2527 /* If this Control OUT transfer has an optional data stage we add an OUT token
2528 before the mandatory IN (status) token, hence the reordered SB list */
2529
2530 sb_desc_setup->next = virt_to_phys(sb_desc_status);
2531 if (urb->transfer_buffer) {
2532
2533 dbg_ctrl("This OUT transfer has an extra data stage");
2534
2535 sb_desc_data = (USB_SB_Desc_t*)kmem_cache_alloc(usb_desc_cache, SLAB_FLAG);
2536 assert(sb_desc_data != NULL);
2537
2538 sb_desc_setup->next = virt_to_phys(sb_desc_data);
2539
2540 sb_desc_data->sw_len = urb->transfer_buffer_length;
2541 sb_desc_data->command = (IO_STATE(USB_SB_command, tt, out) |
2542 IO_STATE(USB_SB_command, full, yes) |
2543 IO_STATE(USB_SB_command, eot, yes));
2544 sb_desc_data->buf = virt_to_phys(urb->transfer_buffer);
2545 sb_desc_data->next = virt_to_phys(sb_desc_status);
2546 }
2547
2548 sb_desc_status->sw_len = 1;
2549 sb_desc_status->command = (IO_FIELD(USB_SB_command, rem, 0) |
2550 IO_STATE(USB_SB_command, tt, in) |
2551 IO_STATE(USB_SB_command, eot, yes) |
2552 IO_STATE(USB_SB_command, intr, yes) |
2553 IO_STATE(USB_SB_command, eol, yes));
2554
2555 sb_desc_status->buf = 0;
2556 sb_desc_status->next = 0;
2557
2558 } else if (usb_pipein(urb->pipe)) {
2559
2560 dbg_ctrl("Transfer for epid %d is IN", epid);
2561 dbg_ctrl("transfer_buffer_length = %d", urb->transfer_buffer_length);
2562 dbg_ctrl("rem is calculated to %d", urb->transfer_buffer_length % maxlen);
2563
2564 sb_desc_data = (USB_SB_Desc_t*)kmem_cache_alloc(usb_desc_cache, SLAB_FLAG);
2565 assert(sb_desc_data != NULL);
2566
2567 sb_desc_setup->next = virt_to_phys(sb_desc_data);
2568
2569 sb_desc_data->sw_len = urb->transfer_buffer_length ?
2570 (urb->transfer_buffer_length - 1) / maxlen + 1 : 0;
2571 dbg_ctrl("sw_len got %d", sb_desc_data->sw_len);
2572
2573 sb_desc_data->command =
2574 (IO_FIELD(USB_SB_command, rem,
2575 urb->transfer_buffer_length % maxlen) |
2576 IO_STATE(USB_SB_command, tt, in) |
2577 IO_STATE(USB_SB_command, eot, yes));
2578
2579 sb_desc_data->buf = 0;
2580 sb_desc_data->next = virt_to_phys(sb_desc_status);
2581
2582 /* Read comment at zout_buffer declaration for an explanation to this. */
2583 sb_desc_status->sw_len = 1;
2584 sb_desc_status->command = (IO_FIELD(USB_SB_command, rem, 0) |
2585 IO_STATE(USB_SB_command, tt, zout) |
2586 IO_STATE(USB_SB_command, full, yes) |
2587 IO_STATE(USB_SB_command, eot, yes) |
2588 IO_STATE(USB_SB_command, intr, yes) |
2589 IO_STATE(USB_SB_command, eol, yes));
2590
2591 sb_desc_status->buf = virt_to_phys(&zout_buffer[0]);
2592 sb_desc_status->next = 0;
2593 }
2594
2595 urb_priv->first_sb = sb_desc_setup;
2596 urb_priv->last_sb = sb_desc_status;
2597 urb_priv->epid = epid;
2598
2599 urb_priv->urb_state = STARTED;
2600
2601 /* Reset toggle bits and reset error count, remember to di and ei */
2602 /* Warning: it is possible that this locking doesn't work with bottom-halves */
2603
2604 save_flags(flags);
2605 cli();
2606
2607 *R_USB_EPT_INDEX = IO_FIELD(R_USB_EPT_INDEX, value, epid);
2608 nop();
2609 if (*R_USB_EPT_DATA & IO_MASK(R_USB_EPT_DATA, hold)) {
2610 panic("Hold was set in %s", __FUNCTION__);
2611 }
2612
2613
2614 /* FIXME: Compare with etrax_usb_add_to_bulk_sb_list where the toggle bits
2615 are set to a specific value. Why the difference? Read "Transfer and Toggle Bits
2616 in Designer's Reference, p. 8 - 11. */
2617 *R_USB_EPT_DATA &=
2618 ~(IO_MASK(R_USB_EPT_DATA, error_count_in) |
2619 IO_MASK(R_USB_EPT_DATA, error_count_out) |
2620 IO_MASK(R_USB_EPT_DATA, t_in) |
2621 IO_MASK(R_USB_EPT_DATA, t_out));
2622
2623 /* Since we use the rx interrupt to complete ctrl urbs, we can enable interrupts now
2624 (i.e. we don't check the sub pointer on an eot interrupt like we do for bulk traffic). */
2625 restore_flags(flags);
2626
2627 /* Assert that the EP descriptor is disabled. */
2628 assert(!(TxCtrlEPList[epid].command & IO_MASK(USB_EP_command, enable)));
2629
2630 /* Set up and enable the EP descriptor. */
2631 TxCtrlEPList[epid].sub = virt_to_phys(sb_desc_setup);
2632 TxCtrlEPList[epid].hw_len = 0;
2633 TxCtrlEPList[epid].command |= IO_STATE(USB_EP_command, enable, yes);
2634
2635 /* We start the DMA sub channel without checking if it's running or not, because:
2636 1) If it's already running, issuing the start command is a nop.
2637 2) We avoid a test-and-set race condition. */
2638 *R_DMA_CH8_SUB1_CMD = IO_STATE(R_DMA_CH8_SUB1_CMD, cmd, start);
2639
2640 DBFEXIT;
2641 }
2642
2643 static void etrax_usb_complete_ctrl_urb(struct urb *urb, int status)
2644 {
2645 etrax_urb_priv_t *urb_priv = (etrax_urb_priv_t *)urb->hcpriv;
2646 int epid = urb_priv->epid;
2647
2648 DBFENTER;
2649
2650 if (status)
2651 warn("Completing ctrl urb with status %d.", status);
2652
2653 dbg_ctrl("Completing ctrl epid %d, urb 0x%lx", epid, (unsigned long)urb);
2654
2655 /* Remove this urb from the list. */
2656 urb_list_del(urb, epid);
2657
2658 /* For an IN pipe, we always set the actual length, regardless of whether there was
2659 an error or not (which means the device driver can use the data if it wants to). */
2660 if (usb_pipein(urb->pipe)) {
2661 urb->actual_length = urb_priv->rx_offset;
2662 }
2663
2664 /* FIXME: Is there something of the things below we shouldn't do if there was an error?
2665 Like, maybe we shouldn't insert more traffic. */
2666
2667 /* Remember to free the SBs. */
2668 etrax_remove_from_sb_list(urb);
2669 kfree(urb_priv);
2670 urb->hcpriv = 0;
2671
2672 /* If there are any more urbs in the list we'd better start sending. */
2673 if (!urb_list_empty(epid)) {
2674 struct urb *new_urb;
2675
2676 /* Get the first urb. */
2677 new_urb = urb_list_first(epid);
2678 assert(new_urb);
2679
2680 dbg_ctrl("More ctrl for epid %d, first urb = 0x%lx", epid, (unsigned long)new_urb);
2681
2682 etrax_usb_add_to_ctrl_sb_list(new_urb, epid);
2683 }
2684
2685 urb->status = status;
2686
2687 /* We let any non-zero status from the layer above have precedence. */
2688 if (status == 0) {
2689 /* URB_SHORT_NOT_OK means that short reads (shorter than the endpoint's max length)
2690 is to be treated as an error. */
2691 if (urb->transfer_flags & URB_SHORT_NOT_OK) {
2692 if (usb_pipein(urb->pipe) &&
2693 (urb->actual_length !=
2694 usb_maxpacket(urb->dev, urb->pipe, usb_pipeout(urb->pipe)))) {
2695 urb->status = -EREMOTEIO;
2696 }
2697 }
2698 }
2699
2700 if (urb->complete) {
2701 urb->complete(urb, NULL);
2702 }
2703
2704 if (urb_list_empty(epid)) {
2705 /* No more traffic. Time to clean up. */
2706 etrax_usb_free_epid(epid);
2707 /* Must set sub pointer to 0. */
2708 dbg_ctrl("No ctrl for epid %d", epid);
2709 TxCtrlEPList[epid].sub = 0;
2710 }
2711
2712 DBFEXIT;
2713 }
2714
2715 static int etrax_usb_submit_intr_urb(struct urb *urb)
2716 {
2717
2718 int epid;
2719
2720 DBFENTER;
2721
2722 if (usb_pipeout(urb->pipe)) {
2723 /* Unsupported transfer type.
2724 We don't support interrupt out traffic. (If we do, we can't support
2725 intervals for neither in or out traffic, but are forced to schedule all
2726 interrupt traffic in one frame.) */
2727 return -EINVAL;
2728 }
2729
2730 epid = etrax_usb_setup_epid(urb);
2731 if (epid == -1) {
2732 DBFEXIT;
2733 return -ENOMEM;
2734 }
2735
2736 if (!urb_list_empty(epid)) {
2737 /* There is already a queued urb for this endpoint. */
2738 etrax_usb_free_epid(epid);
2739 return -ENXIO;
2740 }
2741
2742 urb->status = -EINPROGRESS;
2743
2744 dbg_intr("Add intr urb 0x%lx, to list, epid %d", (unsigned long)urb, epid);
2745
2746 urb_list_add(urb, epid);
2747 etrax_usb_add_to_intr_sb_list(urb, epid);
2748
2749 return 0;
2750
2751 DBFEXIT;
2752 }
2753
2754 static void etrax_usb_add_to_intr_sb_list(struct urb *urb, int epid)
2755 {
2756
2757 volatile USB_EP_Desc_t *tmp_ep;
2758 volatile USB_EP_Desc_t *first_ep;
2759
2760 char maxlen;
2761 int interval;
2762 int i;
2763
2764 etrax_urb_priv_t *urb_priv;
2765
2766 DBFENTER;
2767
2768 maxlen = usb_maxpacket(urb->dev, urb->pipe, usb_pipeout(urb->pipe));
2769 interval = urb->interval;
2770
2771 urb_priv = kmalloc(sizeof(etrax_urb_priv_t), KMALLOC_FLAG);
2772 assert(urb_priv != NULL);
2773 memset(urb_priv, 0, sizeof(etrax_urb_priv_t));
2774 urb->hcpriv = urb_priv;
2775
2776 first_ep = &TxIntrEPList[0];
2777
2778 /* Round of the interval to 2^n, it is obvious that this code favours
2779 smaller numbers, but that is actually a good thing */
2780 /* FIXME: The "rounding error" for larger intervals will be quite
2781 large. For in traffic this shouldn't be a problem since it will only
2782 mean that we "poll" more often. */
2783 for (i = 0; interval; i++) {
2784 interval = interval >> 1;
2785 }
2786 interval = 1 << (i - 1);
2787
2788 dbg_intr("Interval rounded to %d", interval);
2789
2790 tmp_ep = first_ep;
2791 i = 0;
2792 do {
2793 if (tmp_ep->command & IO_MASK(USB_EP_command, eof)) {
2794 if ((i % interval) == 0) {
2795 /* Insert the traffic ep after tmp_ep */
2796 USB_EP_Desc_t *ep_desc;
2797 USB_SB_Desc_t *sb_desc;
2798
2799 dbg_intr("Inserting EP for epid %d", epid);
2800
2801 ep_desc = (USB_EP_Desc_t *)
2802 kmem_cache_alloc(usb_desc_cache, SLAB_FLAG);
2803 sb_desc = (USB_SB_Desc_t *)
2804 kmem_cache_alloc(usb_desc_cache, SLAB_FLAG);
2805 assert(ep_desc != NULL);
2806 CHECK_ALIGN(ep_desc);
2807 assert(sb_desc != NULL);
2808
2809 ep_desc->sub = virt_to_phys(sb_desc);
2810 ep_desc->hw_len = 0;
2811 ep_desc->command = (IO_FIELD(USB_EP_command, epid, epid) |
2812 IO_STATE(USB_EP_command, enable, yes));
2813
2814
2815 /* Round upwards the number of packets of size maxlen
2816 that this SB descriptor should receive. */
2817 sb_desc->sw_len = urb->transfer_buffer_length ?
2818 (urb->transfer_buffer_length - 1) / maxlen + 1 : 0;
2819 sb_desc->next = 0;
2820 sb_desc->buf = 0;
2821 sb_desc->command =
2822 (IO_FIELD(USB_SB_command, rem, urb->transfer_buffer_length % maxlen) |
2823 IO_STATE(USB_SB_command, tt, in) |
2824 IO_STATE(USB_SB_command, eot, yes) |
2825 IO_STATE(USB_SB_command, eol, yes));
2826
2827 ep_desc->next = tmp_ep->next;
2828 tmp_ep->next = virt_to_phys(ep_desc);
2829 }
2830 i++;
2831 }
2832 tmp_ep = (USB_EP_Desc_t *)phys_to_virt(tmp_ep->next);
2833 } while (tmp_ep != first_ep);
2834
2835
2836 /* Note that first_sb/last_sb doesn't apply to interrupt traffic. */
2837 urb_priv->epid = epid;
2838
2839 /* We start the DMA sub channel without checking if it's running or not, because:
2840 1) If it's already running, issuing the start command is a nop.
2841 2) We avoid a test-and-set race condition. */
2842 *R_DMA_CH8_SUB2_CMD = IO_STATE(R_DMA_CH8_SUB2_CMD, cmd, start);
2843
2844 DBFEXIT;
2845 }
2846
2847
2848
2849 static void etrax_usb_complete_intr_urb(struct urb *urb, int status)
2850 {
2851 etrax_urb_priv_t *urb_priv = (etrax_urb_priv_t *)urb->hcpriv;
2852 int epid = urb_priv->epid;
2853
2854 DBFENTER;
2855
2856 if (status)
2857 warn("Completing intr urb with status %d.", status);
2858
2859 dbg_intr("Completing intr epid %d, urb 0x%lx", epid, (unsigned long)urb);
2860
2861 urb->status = status;
2862 urb->actual_length = urb_priv->rx_offset;
2863
2864 dbg_intr("interrupt urb->actual_length = %d", urb->actual_length);
2865
2866 /* We let any non-zero status from the layer above have precedence. */
2867 if (status == 0) {
2868 /* URB_SHORT_NOT_OK means that short reads (shorter than the endpoint's max length)
2869 is to be treated as an error. */
2870 if (urb->transfer_flags & URB_SHORT_NOT_OK) {
2871 if (urb->actual_length !=
2872 usb_maxpacket(urb->dev, urb->pipe, usb_pipeout(urb->pipe))) {
2873 urb->status = -EREMOTEIO;
2874 }
2875 }
2876 }
2877
2878 /* The driver will resubmit the URB so we need to remove it first */
2879 etrax_usb_unlink_urb(urb, 0);
2880 if (urb->complete) {
2881 urb->complete(urb, NULL);
2882 }
2883
2884 DBFEXIT;
2885 }
2886
2887
2888 static int etrax_usb_submit_isoc_urb(struct urb *urb)
2889 {
2890 int epid;
2891 unsigned long flags;
2892
2893 DBFENTER;
2894
2895 dbg_isoc("Submitting isoc urb = 0x%lx", (unsigned long)urb);
2896
2897 /* Epid allocation, empty check and list add must be protected.
2898 Read about this in etrax_usb_submit_ctrl_urb. */
2899
2900 spin_lock_irqsave(&urb_list_lock, flags);
2901 /* Is there an active epid for this urb ? */
2902 epid = etrax_usb_setup_epid(urb);
2903 if (epid == -1) {
2904 DBFEXIT;
2905 spin_unlock_irqrestore(&urb_list_lock, flags);
2906 return -ENOMEM;
2907 }
2908
2909 /* Ok, now we got valid endpoint, lets insert some traffic */
2910
2911 urb->status = -EINPROGRESS;
2912
2913 /* Find the last urb in the URB_List and add this urb after that one.
2914 Also add the traffic, that is do an etrax_usb_add_to_isoc_sb_list. This
2915 is important to make this in "real time" since isochronous traffic is
2916 time sensitive. */
2917
2918 dbg_isoc("Adding isoc urb to (possibly empty) list");
2919 urb_list_add(urb, epid);
2920 etrax_usb_add_to_isoc_sb_list(urb, epid);
2921 spin_unlock_irqrestore(&urb_list_lock, flags);
2922
2923 DBFEXIT;
2924
2925 return 0;
2926 }
2927
2928 static void etrax_usb_check_error_isoc_ep(const int epid)
2929 {
2930 unsigned long int flags;
2931 int error_code;
2932 __u32 r_usb_ept_data;
2933
2934 /* We can't read R_USB_EPID_ATTN here since it would clear the iso_eof,
2935 bulk_eot and epid_attn interrupts. So we just check the status of
2936 the epid without testing if for it in R_USB_EPID_ATTN. */
2937
2938
2939 save_flags(flags);
2940 cli();
2941 *R_USB_EPT_INDEX = IO_FIELD(R_USB_EPT_INDEX, value, epid);
2942 nop();
2943 /* Note that although there are separate R_USB_EPT_DATA and R_USB_EPT_DATA_ISO
2944 registers, they are located at the same address and are of the same size.
2945 In other words, this read should be ok for isoc also. */
2946 r_usb_ept_data = *R_USB_EPT_DATA;
2947 restore_flags(flags);
2948
2949 error_code = IO_EXTRACT(R_USB_EPT_DATA_ISO, error_code, r_usb_ept_data);
2950
2951 if (r_usb_ept_data & IO_MASK(R_USB_EPT_DATA, hold)) {
2952 warn("Hold was set for epid %d.", epid);
2953 return;
2954 }
2955
2956 if (error_code == IO_STATE_VALUE(R_USB_EPT_DATA_ISO, error_code, no_error)) {
2957
2958 /* This indicates that the SB list of the ept was completed before
2959 new data was appended to it. This is not an error, but indicates
2960 large system or USB load and could possibly cause trouble for
2961 very timing sensitive USB device drivers so we log it.
2962 */
2963 info("Isoc. epid %d disabled with no error", epid);
2964 return;
2965
2966 } else if (error_code == IO_STATE_VALUE(R_USB_EPT_DATA_ISO, error_code, stall)) {
2967 /* Not really a protocol error, just says that the endpoint gave
2968 a stall response. Note that error_code cannot be stall for isoc. */
2969 panic("Isoc traffic cannot stall");
2970
2971 } else if (error_code == IO_STATE_VALUE(R_USB_EPT_DATA_ISO, error_code, bus_error)) {
2972 /* Two devices responded to a transaction request. Must be resolved
2973 by software. FIXME: Reset ports? */
2974 panic("Bus error for epid %d."
2975 " Two devices responded to transaction request",
2976 epid);
2977
2978 } else if (error_code == IO_STATE_VALUE(R_USB_EPT_DATA, error_code, buffer_error)) {
2979 /* DMA overrun or underrun. */
2980 warn("Buffer overrun/underrun for epid %d. DMA too busy?", epid);
2981
2982 /* It seems that error_code = buffer_error in
2983 R_USB_EPT_DATA/R_USB_EPT_DATA_ISO and ourun = yes in R_USB_STATUS
2984 are the same error. */
2985 }
2986 }
2987
2988
2989 static void etrax_usb_add_to_isoc_sb_list(struct urb *urb, int epid)
2990 {
2991
2992 int i = 0;
2993
2994 etrax_urb_priv_t *urb_priv;
2995 USB_SB_Desc_t *prev_sb_desc, *next_sb_desc, *temp_sb_desc;
2996
2997 DBFENTER;
2998
2999 prev_sb_desc = next_sb_desc = temp_sb_desc = NULL;
3000
3001 urb_priv = kmalloc(sizeof(etrax_urb_priv_t), GFP_ATOMIC);
3002 assert(urb_priv != NULL);
3003 memset(urb_priv, 0, sizeof(etrax_urb_priv_t));
3004
3005 urb->hcpriv = urb_priv;
3006 urb_priv->epid = epid;
3007
3008 if (usb_pipeout(urb->pipe)) {
3009
3010 if (urb->number_of_packets == 0) panic("etrax_usb_add_to_isoc_sb_list 0 packets\n");
3011
3012 dbg_isoc("Transfer for epid %d is OUT", epid);
3013 dbg_isoc("%d packets in URB", urb->number_of_packets);
3014
3015 /* Create one SB descriptor for each packet and link them together. */
3016 for (i = 0; i < urb->number_of_packets; i++) {
3017 if (!urb->iso_frame_desc[i].length)
3018 continue;
3019
3020 next_sb_desc = (USB_SB_Desc_t*)kmem_cache_alloc(usb_desc_cache, SLAB_ATOMIC);
3021 assert(next_sb_desc != NULL);
3022
3023 if (urb->iso_frame_desc[i].length > 0) {
3024
3025 next_sb_desc->command = (IO_STATE(USB_SB_command, tt, out) |
3026 IO_STATE(USB_SB_command, eot, yes));
3027
3028 next_sb_desc->sw_len = urb->iso_frame_desc[i].length;
3029 next_sb_desc->buf = virt_to_phys((char*)urb->transfer_buffer + urb->iso_frame_desc[i].offset);
3030
3031 /* Check if full length transfer. */
3032 if (urb->iso_frame_desc[i].length ==
3033 usb_maxpacket(urb->dev, urb->pipe, usb_pipeout(urb->pipe))) {
3034 next_sb_desc->command |= IO_STATE(USB_SB_command, full, yes);
3035 }
3036 } else {
3037 dbg_isoc("zero len packet");
3038 next_sb_desc->command = (IO_FIELD(USB_SB_command, rem, 0) |
3039 IO_STATE(USB_SB_command, tt, zout) |
3040 IO_STATE(USB_SB_command, eot, yes) |
3041 IO_STATE(USB_SB_command, full, yes));
3042
3043 next_sb_desc->sw_len = 1;
3044 next_sb_desc->buf = virt_to_phys(&zout_buffer[0]);
3045 }
3046
3047 /* First SB descriptor that belongs to this urb */
3048 if (i == 0)
3049 urb_priv->first_sb = next_sb_desc;
3050 else
3051 prev_sb_desc->next = virt_to_phys(next_sb_desc);
3052
3053 prev_sb_desc = next_sb_desc;
3054 }
3055
3056 next_sb_desc->command |= (IO_STATE(USB_SB_command, intr, yes) |
3057 IO_STATE(USB_SB_command, eol, yes));
3058 next_sb_desc->next = 0;
3059 urb_priv->last_sb = next_sb_desc;
3060
3061 } else if (usb_pipein(urb->pipe)) {
3062
3063 dbg_isoc("Transfer for epid %d is IN", epid);
3064 dbg_isoc("transfer_buffer_length = %d", urb->transfer_buffer_length);
3065 dbg_isoc("rem is calculated to %d", urb->iso_frame_desc[urb->number_of_packets - 1].length);
3066
3067 /* Note that in descriptors for periodic traffic are not consumed. This means that
3068 the USB controller never propagates in the SB list. In other words, if there already
3069 is an SB descriptor in the list for this EP we don't have to do anything. */
3070 if (TxIsocEPList[epid].sub == 0) {
3071 dbg_isoc("Isoc traffic not already running, allocating SB");
3072
3073 next_sb_desc = (USB_SB_Desc_t*)kmem_cache_alloc(usb_desc_cache, SLAB_ATOMIC);
3074 assert(next_sb_desc != NULL);
3075
3076 next_sb_desc->command = (IO_STATE(USB_SB_command, tt, in) |
3077 IO_STATE(USB_SB_command, eot, yes) |
3078 IO_STATE(USB_SB_command, eol, yes));
3079
3080 next_sb_desc->next = 0;
3081 next_sb_desc->sw_len = 1; /* Actual number of packets is not relevant
3082 for periodic in traffic as long as it is more
3083 than zero. Set to 1 always. */
3084 next_sb_desc->buf = 0;
3085
3086 /* The rem field is don't care for isoc traffic, so we don't set it. */
3087
3088 /* Only one SB descriptor that belongs to this urb. */
3089 urb_priv->first_sb = next_sb_desc;
3090 urb_priv->last_sb = next_sb_desc;
3091
3092 } else {
3093
3094 dbg_isoc("Isoc traffic already running, just setting first/last_sb");
3095
3096 /* Each EP for isoc in will have only one SB descriptor, setup when submitting the
3097 already active urb. Note that even though we may have several first_sb/last_sb
3098 pointing at the same SB descriptor, they are freed only once (when the list has
3099 become empty). */
3100 urb_priv->first_sb = phys_to_virt(TxIsocEPList[epid].sub);
3101 urb_priv->last_sb = phys_to_virt(TxIsocEPList[epid].sub);
3102 return;
3103 }
3104
3105 }
3106
3107 /* Find the spot to insert this urb and add it. */
3108 if (TxIsocEPList[epid].sub == 0) {
3109 /* First SB descriptor inserted in this list (in or out). */
3110 dbg_isoc("Inserting SB desc first in list");
3111 TxIsocEPList[epid].hw_len = 0;
3112 TxIsocEPList[epid].sub = virt_to_phys(urb_priv->first_sb);
3113
3114 } else {
3115 /* Isochronous traffic is already running, insert new traffic last (only out). */
3116 dbg_isoc("Inserting SB desc last in list");
3117 temp_sb_desc = phys_to_virt(TxIsocEPList[epid].sub);
3118 while ((temp_sb_desc->command & IO_MASK(USB_SB_command, eol)) !=
3119 IO_STATE(USB_SB_command, eol, yes)) {
3120 assert(temp_sb_desc->next);
3121 temp_sb_desc = phys_to_virt(temp_sb_desc->next);
3122 }
3123 dbg_isoc("Appending list on desc 0x%p", temp_sb_desc);
3124
3125 /* Next pointer must be set before eol is removed. */
3126 temp_sb_desc->next = virt_to_phys(urb_priv->first_sb);
3127 /* Clear the previous end of list flag since there is a new in the
3128 added SB descriptor list. */
3129 temp_sb_desc->command &= ~IO_MASK(USB_SB_command, eol);
3130
3131 if (!(TxIsocEPList[epid].command & IO_MASK(USB_EP_command, enable))) {
3132 /* 8.8.5 in Designer's Reference says we should check for and correct
3133 any errors in the EP here. That should not be necessary if epid_attn
3134 is handled correctly, so we assume all is ok. */
3135 dbg_isoc("EP disabled");
3136 etrax_usb_check_error_isoc_ep(epid);
3137
3138 /* The SB list was exhausted. */
3139 if (virt_to_phys(urb_priv->last_sb) != TxIsocEPList[epid].sub) {
3140 /* The new sublist did not get processed before the EP was
3141 disabled. Setup the EP again. */
3142 dbg_isoc("Set EP sub to new list");
3143 TxIsocEPList[epid].hw_len = 0;
3144 TxIsocEPList[epid].sub = virt_to_phys(urb_priv->first_sb);
3145 }
3146 }
3147 }
3148
3149 if (urb->transfer_flags & URB_ISO_ASAP) {
3150 /* The isoc transfer should be started as soon as possible. The start_frame
3151 field is a return value if URB_ISO_ASAP was set. Comparing R_USB_FM_NUMBER
3152 with a USB Chief trace shows that the first isoc IN token is sent 2 frames
3153 later. I'm not sure how this affects usage of the start_frame field by the
3154 device driver, or how it affects things when USB_ISO_ASAP is not set, so
3155 therefore there's no compensation for the 2 frame "lag" here. */
3156 urb->start_frame = (*R_USB_FM_NUMBER & 0x7ff);
3157 TxIsocEPList[epid].command |= IO_STATE(USB_EP_command, enable, yes);
3158 urb_priv->urb_state = STARTED;
3159 dbg_isoc("URB_ISO_ASAP set, urb->start_frame set to %d", urb->start_frame);
3160 } else {
3161 /* Not started yet. */
3162 urb_priv->urb_state = NOT_STARTED;
3163 dbg_isoc("urb_priv->urb_state set to NOT_STARTED");
3164 }
3165
3166 /* We start the DMA sub channel without checking if it's running or not, because:
3167 1) If it's already running, issuing the start command is a nop.
3168 2) We avoid a test-and-set race condition. */
3169 *R_DMA_CH8_SUB3_CMD = IO_STATE(R_DMA_CH8_SUB3_CMD, cmd, start);
3170
3171 DBFEXIT;
3172 }
3173
3174 static void etrax_usb_complete_isoc_urb(struct urb *urb, int status)
3175 {
3176 etrax_urb_priv_t *urb_priv = (etrax_urb_priv_t *)urb->hcpriv;
3177 int epid = urb_priv->epid;
3178 int auto_resubmit = 0;
3179
3180 DBFENTER;
3181 dbg_isoc("complete urb 0x%p, status %d", urb, status);
3182
3183 if (status)
3184 warn("Completing isoc urb with status %d.", status);
3185
3186 if (usb_pipein(urb->pipe)) {
3187 int i;
3188
3189 /* Make that all isoc packets have status and length set before
3190 completing the urb. */
3191 for (i = urb_priv->isoc_packet_counter; i < urb->number_of_packets; i++) {
3192 urb->iso_frame_desc[i].actual_length = 0;
3193 urb->iso_frame_desc[i].status = -EPROTO;
3194 }
3195
3196 urb_list_del(urb, epid);
3197
3198 if (!list_empty(&urb_list[epid])) {
3199 ((etrax_urb_priv_t *)(urb_list_first(epid)->hcpriv))->urb_state = STARTED;
3200 } else {
3201 unsigned long int flags;
3202 if (TxIsocEPList[epid].command & IO_MASK(USB_EP_command, enable)) {
3203 /* The EP was enabled, disable it and wait. */
3204 TxIsocEPList[epid].command &= ~IO_MASK(USB_EP_command, enable);
3205
3206 /* Ah, the luxury of busy-wait. */
3207 while (*R_DMA_CH8_SUB3_EP == virt_to_phys(&TxIsocEPList[epid]));
3208 }
3209
3210 etrax_remove_from_sb_list(urb);
3211 TxIsocEPList[epid].sub = 0;
3212 TxIsocEPList[epid].hw_len = 0;
3213
3214 save_flags(flags);
3215 cli();
3216 etrax_usb_free_epid(epid);
3217 restore_flags(flags);
3218 }
3219
3220 urb->hcpriv = 0;
3221 kfree(urb_priv);
3222
3223 /* Release allocated bandwidth. */
3224 usb_release_bandwidth(urb->dev, urb, 0);
3225 } else if (usb_pipeout(urb->pipe)) {
3226 int freed_descr;
3227
3228 dbg_isoc("Isoc out urb complete 0x%p", urb);
3229
3230 /* Update the urb list. */
3231 urb_list_del(urb, epid);
3232
3233 freed_descr = etrax_remove_from_sb_list(urb);
3234 dbg_isoc("freed %d descriptors of %d packets", freed_descr, urb->number_of_packets);
3235 assert(freed_descr == urb->number_of_packets);
3236 urb->hcpriv = 0;
3237 kfree(urb_priv);
3238
3239 /* Release allocated bandwidth. */
3240 usb_release_bandwidth(urb->dev, urb, 0);
3241 }
3242
3243 urb->status = status;
3244 if (urb->complete) {
3245 urb->complete(urb, NULL);
3246 }
3247
3248 if (auto_resubmit) {
3249 /* Check that urb was not unlinked by the complete callback. */
3250 if (__urb_list_entry(urb, epid)) {
3251 /* Move this one down the list. */
3252 urb_list_move_last(urb, epid);
3253
3254 /* Mark the now first urb as started (may already be). */
3255 ((etrax_urb_priv_t *)(urb_list_first(epid)->hcpriv))->urb_state = STARTED;
3256
3257 /* Must set this to 0 since this urb is still active after
3258 completion. */
3259 urb_priv->isoc_packet_counter = 0;
3260 } else {
3261 warn("(ISOC) automatic resubmit urb 0x%p removed by complete.", urb);
3262 }
3263 }
3264
3265 DBFEXIT;
3266 }
3267
3268 static void etrax_usb_complete_urb(struct urb *urb, int status)
3269 {
3270 switch (usb_pipetype(urb->pipe)) {
3271 case PIPE_BULK:
3272 etrax_usb_complete_bulk_urb(urb, status);
3273 break;
3274 case PIPE_CONTROL:
3275 etrax_usb_complete_ctrl_urb(urb, status);
3276 break;
3277 case PIPE_INTERRUPT:
3278 etrax_usb_complete_intr_urb(urb, status);
3279 break;
3280 case PIPE_ISOCHRONOUS:
3281 etrax_usb_complete_isoc_urb(urb, status);
3282 break;
3283 default:
3284 err("Unknown pipetype");
3285 }
3286 }
3287
3288
3289
3290 static irqreturn_t etrax_usb_hc_interrupt_top_half(int irq, void *vhc, struct pt_regs *regs)
3291 {
3292 usb_interrupt_registers_t *reg;
3293 unsigned long flags;
3294 __u32 irq_mask;
3295 __u8 status;
3296 __u32 epid_attn;
3297 __u16 port_status_1;
3298 __u16 port_status_2;
3299 __u32 fm_number;
3300
3301 DBFENTER;
3302
3303 /* Read critical registers into local variables, do kmalloc afterwards. */
3304 save_flags(flags);
3305 cli();
3306
3307 irq_mask = *R_USB_IRQ_MASK_READ;
3308 /* Reading R_USB_STATUS clears the ctl_status interrupt. Note that R_USB_STATUS
3309 must be read before R_USB_EPID_ATTN since reading the latter clears the
3310 ourun and perror fields of R_USB_STATUS. */
3311 status = *R_USB_STATUS;
3312
3313 /* Reading R_USB_EPID_ATTN clears the iso_eof, bulk_eot and epid_attn interrupts. */
3314 epid_attn = *R_USB_EPID_ATTN;
3315
3316 /* Reading R_USB_RH_PORT_STATUS_1 and R_USB_RH_PORT_STATUS_2 clears the
3317 port_status interrupt. */
3318 port_status_1 = *R_USB_RH_PORT_STATUS_1;
3319 port_status_2 = *R_USB_RH_PORT_STATUS_2;
3320
3321 /* Reading R_USB_FM_NUMBER clears the sof interrupt. */
3322 /* Note: the lower 11 bits contain the actual frame number, sent with each sof. */
3323 fm_number = *R_USB_FM_NUMBER;
3324
3325 restore_flags(flags);
3326
3327 reg = (usb_interrupt_registers_t *)kmem_cache_alloc(top_half_reg_cache, SLAB_ATOMIC);
3328
3329 assert(reg != NULL);
3330
3331 reg->hc = (etrax_hc_t *)vhc;
3332
3333 /* Now put register values into kmalloc'd area. */
3334 reg->r_usb_irq_mask_read = irq_mask;
3335 reg->r_usb_status = status;
3336 reg->r_usb_epid_attn = epid_attn;
3337 reg->r_usb_rh_port_status_1 = port_status_1;
3338 reg->r_usb_rh_port_status_2 = port_status_2;
3339 reg->r_usb_fm_number = fm_number;
3340
3341 INIT_WORK(&reg->usb_bh, etrax_usb_hc_interrupt_bottom_half, reg);
3342 schedule_work(&reg->usb_bh);
3343
3344 DBFEXIT;
3345
3346 return IRQ_HANDLED;
3347 }
3348
3349 static void etrax_usb_hc_interrupt_bottom_half(void *data)
3350 {
3351 usb_interrupt_registers_t *reg = (usb_interrupt_registers_t *)data;
3352 __u32 irq_mask = reg->r_usb_irq_mask_read;
3353
3354 DBFENTER;
3355
3356 /* Interrupts are handled in order of priority. */
3357 if (irq_mask & IO_MASK(R_USB_IRQ_MASK_READ, epid_attn)) {
3358 etrax_usb_hc_epid_attn_interrupt(reg);
3359 }
3360 if (irq_mask & IO_MASK(R_USB_IRQ_MASK_READ, port_status)) {
3361 etrax_usb_hc_port_status_interrupt(reg);
3362 }
3363 if (irq_mask & IO_MASK(R_USB_IRQ_MASK_READ, ctl_status)) {
3364 etrax_usb_hc_ctl_status_interrupt(reg);
3365 }
3366 if (irq_mask & IO_MASK(R_USB_IRQ_MASK_READ, iso_eof)) {
3367 etrax_usb_hc_isoc_eof_interrupt();
3368 }
3369 if (irq_mask & IO_MASK(R_USB_IRQ_MASK_READ, bulk_eot)) {
3370 /* Update/restart the bulk start timer since obviously the channel is running. */
3371 mod_timer(&bulk_start_timer, jiffies + BULK_START_TIMER_INTERVAL);
3372 /* Update/restart the bulk eot timer since we just received an bulk eot interrupt. */
3373 mod_timer(&bulk_eot_timer, jiffies + BULK_EOT_TIMER_INTERVAL);
3374
3375 etrax_usb_hc_bulk_eot_interrupt(0);
3376 }
3377
3378 kmem_cache_free(top_half_reg_cache, reg);
3379
3380 DBFEXIT;
3381 }
3382
3383
3384 void etrax_usb_hc_isoc_eof_interrupt(void)
3385 {
3386 struct urb *urb;
3387 etrax_urb_priv_t *urb_priv;
3388 int epid;
3389 unsigned long flags;
3390
3391 DBFENTER;
3392
3393 /* Do not check the invalid epid (it has a valid sub pointer). */
3394 for (epid = 0; epid < NBR_OF_EPIDS - 1; epid++) {
3395
3396 /* Do not check the invalid epid (it has a valid sub pointer). */
3397 if ((epid == DUMMY_EPID) || (epid == INVALID_EPID))
3398 continue;
3399
3400 /* Disable interrupts to block the isoc out descriptor interrupt handler
3401 from being called while the isoc EPID list is being checked.
3402 */
3403 save_flags(flags);
3404 cli();
3405
3406 if (TxIsocEPList[epid].sub == 0) {
3407 /* Nothing here to see. */
3408 restore_flags(flags);
3409 continue;
3410 }
3411
3412 /* Get the first urb (if any). */
3413 urb = urb_list_first(epid);
3414 if (urb == 0) {
3415 warn("Ignoring NULL urb");
3416 restore_flags(flags);
3417 continue;
3418 }
3419 if (usb_pipein(urb->pipe)) {
3420
3421 /* Sanity check. */
3422 assert(usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS);
3423
3424 urb_priv = (etrax_urb_priv_t *)urb->hcpriv;
3425 assert(urb_priv);
3426
3427 if (urb_priv->urb_state == NOT_STARTED) {
3428
3429 /* If ASAP is not set and urb->start_frame is the current frame,
3430 start the transfer. */
3431 if (!(urb->transfer_flags & URB_ISO_ASAP) &&
3432 (urb->start_frame == (*R_USB_FM_NUMBER & 0x7ff))) {
3433
3434 dbg_isoc("Enabling isoc IN EP descr for epid %d", epid);
3435 TxIsocEPList[epid].command |= IO_STATE(USB_EP_command, enable, yes);
3436
3437 /* This urb is now active. */
3438 urb_priv->urb_state = STARTED;
3439 continue;
3440 }
3441 }
3442 }
3443 restore_flags(flags);
3444 }
3445
3446 DBFEXIT;
3447
3448 }
3449
3450 void etrax_usb_hc_bulk_eot_interrupt(int timer_induced)
3451 {
3452 int epid;
3453
3454 /* The technique is to run one urb at a time, wait for the eot interrupt at which
3455 point the EP descriptor has been disabled. */
3456
3457 DBFENTER;
3458 dbg_bulk("bulk eot%s", timer_induced ? ", called by timer" : "");
3459
3460 for (epid = 0; epid < NBR_OF_EPIDS; epid++) {
3461
3462 if (!(TxBulkEPList[epid].command & IO_MASK(USB_EP_command, enable)) &&
3463 (TxBulkEPList[epid].sub != 0)) {
3464
3465 struct urb *urb;
3466 etrax_urb_priv_t *urb_priv;
3467 unsigned long flags;
3468 __u32 r_usb_ept_data;
3469
3470 /* Found a disabled EP descriptor which has a non-null sub pointer.
3471 Verify that this ctrl EP descriptor got disabled no errors.
3472 FIXME: Necessary to check error_code? */
3473 dbg_bulk("for epid %d?", epid);
3474
3475 /* Get the first urb. */
3476 urb = urb_list_first(epid);
3477
3478 /* FIXME: Could this happen for valid reasons? Why did it disappear? Because of
3479 wrong unlinking? */
3480 if (!urb) {
3481 warn("NULL urb for epid %d", epid);
3482 continue;
3483 }
3484
3485 assert(urb);
3486 urb_priv = (etrax_urb_priv_t *)urb->hcpriv;
3487 assert(urb_priv);
3488
3489 /* Sanity checks. */
3490 assert(usb_pipetype(urb->pipe) == PIPE_BULK);
3491 if (phys_to_virt(TxBulkEPList[epid].sub) != urb_priv->last_sb) {
3492 err("bulk endpoint got disabled before reaching last sb");
3493 }
3494
3495 /* For bulk IN traffic, there seems to be a race condition between
3496 between the bulk eot and eop interrupts, or rather an uncertainty regarding
3497 the order in which they happen. Normally we expect the eop interrupt from
3498 DMA channel 9 to happen before the eot interrupt.
3499
3500 Therefore, we complete the bulk IN urb in the rx interrupt handler instead. */
3501
3502 if (usb_pipein(urb->pipe)) {
3503 dbg_bulk("in urb, continuing");
3504 continue;
3505 }
3506
3507 save_flags(flags);
3508 cli();
3509 *R_USB_EPT_INDEX = IO_FIELD(R_USB_EPT_INDEX, value, epid);
3510 nop();
3511 r_usb_ept_data = *R_USB_EPT_DATA;
3512 restore_flags(flags);
3513
3514 if (IO_EXTRACT(R_USB_EPT_DATA, error_code, r_usb_ept_data) ==
3515 IO_STATE_VALUE(R_USB_EPT_DATA, error_code, no_error)) {
3516 /* This means that the endpoint has no error, is disabled
3517 and had inserted traffic, i.e. transfer successfully completed. */
3518 etrax_usb_complete_bulk_urb(urb, 0);
3519 } else {
3520 /* Shouldn't happen. We expect errors to be caught by epid attention. */
3521 err("Found disabled bulk EP desc, error_code != no_error");
3522 }
3523 }
3524 }
3525
3526 /* Normally, we should find (at least) one disabled EP descriptor with a valid sub pointer.
3527 However, because of the uncertainty in the deliverance of the eop/eot interrupts, we may
3528 not. Also, we might find two disabled EPs when handling an eot interrupt, and then find
3529 none the next time. */
3530
3531 DBFEXIT;
3532
3533 }
3534
3535 void etrax_usb_hc_epid_attn_interrupt(usb_interrupt_registers_t *reg)
3536 {
3537 /* This function handles the epid attention interrupt. There are a variety of reasons
3538 for this interrupt to happen (Designer's Reference, p. 8 - 22 for the details):
3539
3540 invalid ep_id - Invalid epid in an EP (EP disabled).
3541 stall - Not strictly an error condition (EP disabled).
3542 3rd error - Three successive transaction errors (EP disabled).
3543 buffer ourun - Buffer overrun or underrun (EP disabled).
3544 past eof1 - Intr or isoc transaction proceeds past EOF1.
3545 near eof - Intr or isoc transaction would not fit inside the frame.
3546 zout transfer - If zout transfer for a bulk endpoint (EP disabled).
3547 setup transfer - If setup transfer for a non-ctrl endpoint (EP disabled). */
3548
3549 int epid;
3550
3551
3552 DBFENTER;
3553
3554 assert(reg != NULL);
3555
3556 /* Note that we loop through all epids. We still want to catch errors for
3557 the invalid one, even though we might handle them differently. */
3558 for (epid = 0; epid < NBR_OF_EPIDS; epid++) {
3559
3560 if (test_bit(epid, (void *)&reg->r_usb_epid_attn)) {
3561
3562 struct urb *urb;
3563 __u32 r_usb_ept_data;
3564 unsigned long flags;
3565 int error_code;
3566
3567 save_flags(flags);
3568 cli();
3569 *R_USB_EPT_INDEX = IO_FIELD(R_USB_EPT_INDEX, value, epid);
3570 nop();
3571 /* Note that although there are separate R_USB_EPT_DATA and R_USB_EPT_DATA_ISO
3572 registers, they are located at the same address and are of the same size.
3573 In other words, this read should be ok for isoc also. */
3574 r_usb_ept_data = *R_USB_EPT_DATA;
3575 restore_flags(flags);
3576
3577 /* First some sanity checks. */
3578 if (epid == INVALID_EPID) {
3579 /* FIXME: What if it became disabled? Could seriously hurt interrupt
3580 traffic. (Use do_intr_recover.) */
3581 warn("Got epid_attn for INVALID_EPID (%d).", epid);
3582 err("R_USB_EPT_DATA = 0x%x", r_usb_ept_data);
3583 err("R_USB_STATUS = 0x%x", reg->r_usb_status);
3584 continue;
3585 } else if (epid == DUMMY_EPID) {
3586 /* We definitely don't care about these ones. Besides, they are
3587 always disabled, so any possible disabling caused by the
3588 epid attention interrupt is irrelevant. */
3589 warn("Got epid_attn for DUMMY_EPID (%d).", epid);
3590 continue;
3591 }
3592
3593 /* Get the first urb in the urb list for this epid. We blatantly assume
3594 that only the first urb could have caused the epid attention.
3595 (For bulk and ctrl, only one urb is active at any one time. For intr
3596 and isoc we remove them once they are completed.) */
3597 urb = urb_list_first(epid);
3598
3599 if (urb == NULL) {
3600 err("Got epid_attn for epid %i with no urb.", epid);
3601 err("R_USB_EPT_DATA = 0x%x", r_usb_ept_data);
3602 err("R_USB_STATUS = 0x%x", reg->r_usb_status);
3603 continue;
3604 }
3605
3606 switch (usb_pipetype(urb->pipe)) {
3607 case PIPE_BULK:
3608 warn("Got epid attn for bulk endpoint, epid %d", epid);
3609 break;
3610 case PIPE_CONTROL:
3611 warn("Got epid attn for control endpoint, epid %d", epid);
3612 break;
3613 case PIPE_INTERRUPT:
3614 warn("Got epid attn for interrupt endpoint, epid %d", epid);
3615 break;
3616 case PIPE_ISOCHRONOUS:
3617 warn("Got epid attn for isochronous endpoint, epid %d", epid);
3618 break;
3619 }
3620
3621 if (usb_pipetype(urb->pipe) != PIPE_ISOCHRONOUS) {
3622 if (r_usb_ept_data & IO_MASK(R_USB_EPT_DATA, hold)) {
3623 warn("Hold was set for epid %d.", epid);
3624 continue;
3625 }
3626 }
3627
3628 /* Even though error_code occupies bits 22 - 23 in both R_USB_EPT_DATA and
3629 R_USB_EPT_DATA_ISOC, we separate them here so we don't forget in other places. */
3630 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) {
3631 error_code = IO_EXTRACT(R_USB_EPT_DATA_ISO, error_code, r_usb_ept_data);
3632 } else {
3633 error_code = IO_EXTRACT(R_USB_EPT_DATA, error_code, r_usb_ept_data);
3634 }
3635
3636 /* Using IO_STATE_VALUE on R_USB_EPT_DATA should be ok for isoc also. */
3637 if (error_code == IO_STATE_VALUE(R_USB_EPT_DATA, error_code, no_error)) {
3638
3639 /* Isoc traffic doesn't have error_count_in/error_count_out. */
3640 if ((usb_pipetype(urb->pipe) != PIPE_ISOCHRONOUS) &&
3641 (IO_EXTRACT(R_USB_EPT_DATA, error_count_in, r_usb_ept_data) == 3 ||
3642 IO_EXTRACT(R_USB_EPT_DATA, error_count_out, r_usb_ept_data) == 3)) {
3643 /* 3rd error. */
3644 warn("3rd error for epid %i", epid);
3645 etrax_usb_complete_urb(urb, -EPROTO);
3646
3647 } else if (reg->r_usb_status & IO_MASK(R_USB_STATUS, perror)) {
3648
3649 warn("Perror for epid %d", epid);
3650
3651 if (!(r_usb_ept_data & IO_MASK(R_USB_EPT_DATA, valid))) {
3652 /* invalid ep_id */
3653 panic("Perror because of invalid epid."
3654 " Deconfigured too early?");
3655 } else {
3656 /* past eof1, near eof, zout transfer, setup transfer */
3657
3658 /* Dump the urb and the relevant EP descriptor list. */
3659
3660 __dump_urb(urb);
3661 __dump_ept_data(epid);
3662 __dump_ep_list(usb_pipetype(urb->pipe));
3663
3664 panic("Something wrong with DMA descriptor contents."
3665 " Too much traffic inserted?");
3666 }
3667 } else if (reg->r_usb_status & IO_MASK(R_USB_STATUS, ourun)) {
3668 /* buffer ourun */
3669 panic("Buffer overrun/underrun for epid %d. DMA too busy?", epid);
3670 }
3671
3672 } else if (error_code == IO_STATE_VALUE(R_USB_EPT_DATA, error_code, stall)) {
3673 /* Not really a protocol error, just says that the endpoint gave
3674 a stall response. Note that error_code cannot be stall for isoc. */
3675 if (usb_pipetype(urb->pipe) == PIPE_ISOCHRONOUS) {
3676 panic("Isoc traffic cannot stall");
3677 }
3678
3679 warn("Stall for epid %d", epid);
3680 etrax_usb_complete_urb(urb, -EPIPE);
3681
3682 } else if (error_code == IO_STATE_VALUE(R_USB_EPT_DATA, error_code, bus_error)) {
3683 /* Two devices responded to a transaction request. Must be resolved
3684 by software. FIXME: Reset ports? */
3685 panic("Bus error for epid %d."
3686 " Two devices responded to transaction request",
3687 epid);
3688
3689 } else if (error_code == IO_STATE_VALUE(R_USB_EPT_DATA, error_code, buffer_error)) {
3690 /* DMA overrun or underrun. */
3691 warn("Buffer overrun/underrun for epid %d. DMA too busy?", epid);
3692
3693 /* It seems that error_code = buffer_error in
3694 R_USB_EPT_DATA/R_USB_EPT_DATA_ISO and ourun = yes in R_USB_STATUS
3695 are the same error. */
3696 etrax_usb_complete_urb(urb, -EPROTO);
3697 }
3698 }
3699 }
3700
3701 DBFEXIT;
3702
3703 }
3704
3705 void etrax_usb_bulk_start_timer_func(unsigned long dummy)
3706 {
3707
3708 /* We might enable an EP descriptor behind the current DMA position when it's about
3709 to decide that there are no more bulk traffic and it should stop the bulk channel.
3710 Therefore we periodically check if the bulk channel is stopped and there is an
3711 enabled bulk EP descriptor, in which case we start the bulk channel. */
3712 dbg_bulk("bulk_start_timer timed out.");
3713
3714 if (!(*R_DMA_CH8_SUB0_CMD & IO_MASK(R_DMA_CH8_SUB0_CMD, cmd))) {
3715 int epid;
3716
3717 dbg_bulk("Bulk DMA channel not running.");
3718
3719 for (epid = 0; epid < NBR_OF_EPIDS; epid++) {
3720 if (TxBulkEPList[epid].command & IO_MASK(USB_EP_command, enable)) {
3721 dbg_bulk("Found enabled EP for epid %d, starting bulk channel.\n",
3722 epid);
3723 *R_DMA_CH8_SUB0_CMD = IO_STATE(R_DMA_CH8_SUB0_CMD, cmd, start);
3724
3725 /* Restart the bulk eot timer since we just started the bulk channel. */
3726 mod_timer(&bulk_eot_timer, jiffies + BULK_EOT_TIMER_INTERVAL);
3727
3728 /* No need to search any further. */
3729 break;
3730 }
3731 }
3732 } else {
3733 dbg_bulk("Bulk DMA channel running.");
3734 }
3735 }
3736
3737 void etrax_usb_hc_port_status_interrupt(usb_interrupt_registers_t *reg)
3738 {
3739 etrax_hc_t *hc = reg->hc;
3740 __u16 r_usb_rh_port_status_1 = reg->r_usb_rh_port_status_1;
3741 __u16 r_usb_rh_port_status_2 = reg->r_usb_rh_port_status_2;
3742
3743 DBFENTER;
3744
3745 /* The Etrax RH does not include a wPortChange register, so this has to be handled in software
3746 (by saving the old port status value for comparison when the port status interrupt happens).
3747 See section 11.16.2.6.2 in the USB 1.1 spec for details. */
3748
3749 dbg_rh("hc->rh.prev_wPortStatus_1 = 0x%x", hc->rh.prev_wPortStatus_1);
3750 dbg_rh("hc->rh.prev_wPortStatus_2 = 0x%x", hc->rh.prev_wPortStatus_2);
3751 dbg_rh("r_usb_rh_port_status_1 = 0x%x", r_usb_rh_port_status_1);
3752 dbg_rh("r_usb_rh_port_status_2 = 0x%x", r_usb_rh_port_status_2);
3753
3754 /* C_PORT_CONNECTION is set on any transition. */
3755 hc->rh.wPortChange_1 |=
3756 ((r_usb_rh_port_status_1 & (1 << RH_PORT_CONNECTION)) !=
3757 (hc->rh.prev_wPortStatus_1 & (1 << RH_PORT_CONNECTION))) ?
3758 (1 << RH_PORT_CONNECTION) : 0;
3759
3760 hc->rh.wPortChange_2 |=
3761 ((r_usb_rh_port_status_2 & (1 << RH_PORT_CONNECTION)) !=
3762 (hc->rh.prev_wPortStatus_2 & (1 << RH_PORT_CONNECTION))) ?
3763 (1 << RH_PORT_CONNECTION) : 0;
3764
3765 /* C_PORT_ENABLE is _only_ set on a one to zero transition, i.e. when
3766 the port is disabled, not when it's enabled. */
3767 hc->rh.wPortChange_1 |=
3768 ((hc->rh.prev_wPortStatus_1 & (1 << RH_PORT_ENABLE))
3769 && !(r_usb_rh_port_status_1 & (1 << RH_PORT_ENABLE))) ?
3770 (1 << RH_PORT_ENABLE) : 0;
3771
3772 hc->rh.wPortChange_2 |=
3773 ((hc->rh.prev_wPortStatus_2 & (1 << RH_PORT_ENABLE))
3774 && !(r_usb_rh_port_status_2 & (1 << RH_PORT_ENABLE))) ?
3775 (1 << RH_PORT_ENABLE) : 0;
3776
3777 /* C_PORT_SUSPEND is set to one when the device has transitioned out
3778 of the suspended state, i.e. when suspend goes from one to zero. */
3779 hc->rh.wPortChange_1 |=
3780 ((hc->rh.prev_wPortStatus_1 & (1 << RH_PORT_SUSPEND))
3781 && !(r_usb_rh_port_status_1 & (1 << RH_PORT_SUSPEND))) ?
3782 (1 << RH_PORT_SUSPEND) : 0;
3783
3784 hc->rh.wPortChange_2 |=
3785 ((hc->rh.prev_wPortStatus_2 & (1 << RH_PORT_SUSPEND))
3786 && !(r_usb_rh_port_status_2 & (1 << RH_PORT_SUSPEND))) ?
3787 (1 << RH_PORT_SUSPEND) : 0;
3788
3789
3790 /* C_PORT_RESET is set when reset processing on this port is complete. */
3791 hc->rh.wPortChange_1 |=
3792 ((hc->rh.prev_wPortStatus_1 & (1 << RH_PORT_RESET))
3793 && !(r_usb_rh_port_status_1 & (1 << RH_PORT_RESET))) ?
3794 (1 << RH_PORT_RESET) : 0;
3795
3796 hc->rh.wPortChange_2 |=
3797 ((hc->rh.prev_wPortStatus_2 & (1 << RH_PORT_RESET))
3798 && !(r_usb_rh_port_status_2 & (1 << RH_PORT_RESET))) ?
3799 (1 << RH_PORT_RESET) : 0;
3800
3801 /* Save the new values for next port status change. */
3802 hc->rh.prev_wPortStatus_1 = r_usb_rh_port_status_1;
3803 hc->rh.prev_wPortStatus_2 = r_usb_rh_port_status_2;
3804
3805 dbg_rh("hc->rh.wPortChange_1 set to 0x%x", hc->rh.wPortChange_1);
3806 dbg_rh("hc->rh.wPortChange_2 set to 0x%x", hc->rh.wPortChange_2);
3807
3808 DBFEXIT;
3809
3810 }
3811
3812 void etrax_usb_hc_ctl_status_interrupt(usb_interrupt_registers_t *reg)
3813 {
3814 DBFENTER;
3815
3816 /* FIXME: What should we do if we get ourun or perror? Dump the EP and SB
3817 list for the corresponding epid? */
3818 if (reg->r_usb_status & IO_MASK(R_USB_STATUS, ourun)) {
3819 panic("USB controller got ourun.");
3820 }
3821 if (reg->r_usb_status & IO_MASK(R_USB_STATUS, perror)) {
3822
3823 /* Before, etrax_usb_do_intr_recover was called on this epid if it was
3824 an interrupt pipe. I don't see how re-enabling all EP descriptors
3825 will help if there was a programming error. */
3826 panic("USB controller got perror.");
3827 }
3828
3829 if (reg->r_usb_status & IO_MASK(R_USB_STATUS, device_mode)) {
3830 /* We should never operate in device mode. */
3831 panic("USB controller in device mode.");
3832 }
3833
3834 /* These if-statements could probably be nested. */
3835 if (reg->r_usb_status & IO_MASK(R_USB_STATUS, host_mode)) {
3836 info("USB controller in host mode.");
3837 }
3838 if (reg->r_usb_status & IO_MASK(R_USB_STATUS, started)) {
3839 info("USB controller started.");
3840 }
3841 if (reg->r_usb_status & IO_MASK(R_USB_STATUS, running)) {
3842 info("USB controller running.");
3843 }
3844
3845 DBFEXIT;
3846
3847 }
3848
3849
3850 static int etrax_rh_submit_urb(struct urb *urb)
3851 {
3852 struct usb_device *usb_dev = urb->dev;
3853 etrax_hc_t *hc = usb_dev->bus->hcpriv;
3854 unsigned int pipe = urb->pipe;
3855 struct usb_ctrlrequest *cmd = (struct usb_ctrlrequest *) urb->setup_packet;
3856 void *data = urb->transfer_buffer;
3857 int leni = urb->transfer_buffer_length;
3858 int len = 0;
3859 int stat = 0;
3860
3861 __u16 bmRType_bReq;
3862 __u16 wValue;
3863 __u16 wIndex;
3864 __u16 wLength;
3865
3866 DBFENTER;
3867
3868 /* FIXME: What is this interrupt urb that is sent to the root hub? */
3869 if (usb_pipetype (pipe) == PIPE_INTERRUPT) {
3870 dbg_rh("Root-Hub submit IRQ: every %d ms", urb->interval);
3871 hc->rh.urb = urb;
3872 hc->rh.send = 1;
3873 /* FIXME: We could probably remove this line since it's done
3874 in etrax_rh_init_int_timer. (Don't remove it from
3875 etrax_rh_init_int_timer though.) */
3876 hc->rh.interval = urb->interval;
3877 etrax_rh_init_int_timer(urb);
3878 DBFEXIT;
3879
3880 return 0;
3881 }
3882
3883 bmRType_bReq = cmd->bRequestType | (cmd->bRequest << 8);
3884 wValue = le16_to_cpu(cmd->wValue);
3885 wIndex = le16_to_cpu(cmd->wIndex);
3886 wLength = le16_to_cpu(cmd->wLength);
3887
3888 dbg_rh("bmRType_bReq : 0x%04x (%d)", bmRType_bReq, bmRType_bReq);
3889 dbg_rh("wValue : 0x%04x (%d)", wValue, wValue);
3890 dbg_rh("wIndex : 0x%04x (%d)", wIndex, wIndex);
3891 dbg_rh("wLength : 0x%04x (%d)", wLength, wLength);
3892
3893 switch (bmRType_bReq) {
3894
3895 /* Request Destination:
3896 without flags: Device,
3897 RH_INTERFACE: interface,
3898 RH_ENDPOINT: endpoint,
3899 RH_CLASS means HUB here,
3900 RH_OTHER | RH_CLASS almost ever means HUB_PORT here
3901 */
3902
3903 case RH_GET_STATUS:
3904 *(__u16 *) data = cpu_to_le16 (1);
3905 OK (2);
3906
3907 case RH_GET_STATUS | RH_INTERFACE:
3908 *(__u16 *) data = cpu_to_le16 (0);
3909 OK (2);
3910
3911 case RH_GET_STATUS | RH_ENDPOINT:
3912 *(__u16 *) data = cpu_to_le16 (0);
3913 OK (2);
3914
3915 case RH_GET_STATUS | RH_CLASS:
3916 *(__u32 *) data = cpu_to_le32 (0);
3917 OK (4); /* hub power ** */
3918
3919 case RH_GET_STATUS | RH_OTHER | RH_CLASS:
3920 if (wIndex == 1) {
3921 *((__u16*)data) = cpu_to_le16(hc->rh.prev_wPortStatus_1);
3922 *((__u16*)data + 1) = cpu_to_le16(hc->rh.wPortChange_1);
3923 } else if (wIndex == 2) {
3924 *((__u16*)data) = cpu_to_le16(hc->rh.prev_wPortStatus_2);
3925 *((__u16*)data + 1) = cpu_to_le16(hc->rh.wPortChange_2);
3926 } else {
3927 dbg_rh("RH_GET_STATUS whith invalid wIndex!");
3928 OK(0);
3929 }
3930
3931 OK(4);
3932
3933 case RH_CLEAR_FEATURE | RH_ENDPOINT:
3934 switch (wValue) {
3935 case (RH_ENDPOINT_STALL):
3936 OK (0);
3937 }
3938 break;
3939
3940 case RH_CLEAR_FEATURE | RH_CLASS:
3941 switch (wValue) {
3942 case (RH_C_HUB_OVER_CURRENT):
3943 OK (0); /* hub power over current ** */
3944 }
3945 break;
3946
3947 case RH_CLEAR_FEATURE | RH_OTHER | RH_CLASS:
3948 switch (wValue) {
3949 case (RH_PORT_ENABLE):
3950 if (wIndex == 1) {
3951
3952 dbg_rh("trying to do disable port 1");
3953
3954 *R_USB_PORT1_DISABLE = IO_STATE(R_USB_PORT1_DISABLE, disable, yes);
3955
3956 while (hc->rh.prev_wPortStatus_1 &
3957 IO_STATE(R_USB_RH_PORT_STATUS_1, enabled, yes));
3958 *R_USB_PORT1_DISABLE = IO_STATE(R_USB_PORT1_DISABLE, disable, no);
3959 dbg_rh("Port 1 is disabled");
3960
3961 } else if (wIndex == 2) {
3962
3963 dbg_rh("trying to do disable port 2");
3964
3965 *R_USB_PORT2_DISABLE = IO_STATE(R_USB_PORT2_DISABLE, disable, yes);
3966
3967 while (hc->rh.prev_wPortStatus_2 &
3968 IO_STATE(R_USB_RH_PORT_STATUS_2, enabled, yes));
3969 *R_USB_PORT2_DISABLE = IO_STATE(R_USB_PORT2_DISABLE, disable, no);
3970 dbg_rh("Port 2 is disabled");
3971
3972 } else {
3973 dbg_rh("RH_CLEAR_FEATURE->RH_PORT_ENABLE "
3974 "with invalid wIndex == %d!", wIndex);
3975 }
3976
3977 OK (0);
3978 case (RH_PORT_SUSPEND):
3979 /* Opposite to suspend should be resume, so we'll do a resume. */
3980 /* FIXME: USB 1.1, 11.16.2.2 says:
3981 "Clearing the PORT_SUSPEND feature causes a host-initiated resume
3982 on the specified port. If the port is not in the Suspended state,
3983 the hub should treat this request as a functional no-operation."
3984 Shouldn't we check if the port is in a suspended state before
3985 resuming? */
3986
3987 /* Make sure the controller isn't busy. */
3988 while (*R_USB_COMMAND & IO_MASK(R_USB_COMMAND, busy));
3989
3990 if (wIndex == 1) {
3991 *R_USB_COMMAND =
3992 IO_STATE(R_USB_COMMAND, port_sel, port1) |
3993 IO_STATE(R_USB_COMMAND, port_cmd, resume) |
3994 IO_STATE(R_USB_COMMAND, ctrl_cmd, nop);
3995 } else if (wIndex == 2) {
3996 *R_USB_COMMAND =
3997 IO_STATE(R_USB_COMMAND, port_sel, port2) |
3998 IO_STATE(R_USB_COMMAND, port_cmd, resume) |
3999 IO_STATE(R_USB_COMMAND, ctrl_cmd, nop);
4000 } else {
4001 dbg_rh("RH_CLEAR_FEATURE->RH_PORT_SUSPEND "
4002 "with invalid wIndex == %d!", wIndex);
4003 }
4004
4005 OK (0);
4006 case (RH_PORT_POWER):
4007 OK (0); /* port power ** */
4008 case (RH_C_PORT_CONNECTION):
4009 if (wIndex == 1) {
4010 hc->rh.wPortChange_1 &= ~(1 << RH_PORT_CONNECTION);
4011 } else if (wIndex == 2) {
4012 hc->rh.wPortChange_2 &= ~(1 << RH_PORT_CONNECTION);
4013 } else {
4014 dbg_rh("RH_CLEAR_FEATURE->RH_C_PORT_CONNECTION "
4015 "with invalid wIndex == %d!", wIndex);
4016 }
4017
4018 OK (0);
4019 case (RH_C_PORT_ENABLE):
4020 if (wIndex == 1) {
4021 hc->rh.wPortChange_1 &= ~(1 << RH_PORT_ENABLE);
4022 } else if (wIndex == 2) {
4023 hc->rh.wPortChange_2 &= ~(1 << RH_PORT_ENABLE);
4024 } else {
4025 dbg_rh("RH_CLEAR_FEATURE->RH_C_PORT_ENABLE "
4026 "with invalid wIndex == %d!", wIndex);
4027 }
4028 OK (0);
4029 case (RH_C_PORT_SUSPEND):
4030 /*** WR_RH_PORTSTAT(RH_PS_PSSC); */
4031 OK (0);
4032 case (RH_C_PORT_OVER_CURRENT):
4033 OK (0); /* port power over current ** */
4034 case (RH_C_PORT_RESET):
4035 if (wIndex == 1) {
4036 hc->rh.wPortChange_1 &= ~(1 << RH_PORT_RESET);
4037 } else if (wIndex == 2) {
4038 hc->rh.wPortChange_2 &= ~(1 << RH_PORT_RESET);
4039 } else {
4040 dbg_rh("RH_CLEAR_FEATURE->RH_C_PORT_RESET "
4041 "with invalid index == %d!", wIndex);
4042 }
4043
4044 OK (0);
4045
4046 }
4047 break;
4048
4049 case RH_SET_FEATURE | RH_OTHER | RH_CLASS:
4050 switch (wValue) {
4051 case (RH_PORT_SUSPEND):
4052
4053 /* Make sure the controller isn't busy. */
4054 while (*R_USB_COMMAND & IO_MASK(R_USB_COMMAND, busy));
4055
4056 if (wIndex == 1) {
4057 *R_USB_COMMAND =
4058 IO_STATE(R_USB_COMMAND, port_sel, port1) |
4059 IO_STATE(R_USB_COMMAND, port_cmd, suspend) |
4060 IO_STATE(R_USB_COMMAND, ctrl_cmd, nop);
4061 } else if (wIndex == 2) {
4062 *R_USB_COMMAND =
4063 IO_STATE(R_USB_COMMAND, port_sel, port2) |
4064 IO_STATE(R_USB_COMMAND, port_cmd, suspend) |
4065 IO_STATE(R_USB_COMMAND, ctrl_cmd, nop);
4066 } else {
4067 dbg_rh("RH_SET_FEATURE->RH_PORT_SUSPEND "
4068 "with invalid wIndex == %d!", wIndex);
4069 }
4070
4071 OK (0);
4072 case (RH_PORT_RESET):
4073 if (wIndex == 1) {
4074
4075 port_1_reset:
4076 dbg_rh("Doing reset of port 1");
4077
4078 /* Make sure the controller isn't busy. */
4079 while (*R_USB_COMMAND & IO_MASK(R_USB_COMMAND, busy));
4080
4081 *R_USB_COMMAND =
4082 IO_STATE(R_USB_COMMAND, port_sel, port1) |
4083 IO_STATE(R_USB_COMMAND, port_cmd, reset) |
4084 IO_STATE(R_USB_COMMAND, ctrl_cmd, nop);
4085
4086 /* We must wait at least 10 ms for the device to recover.
4087 15 ms should be enough. */
4088 udelay(15000);
4089
4090 /* Wait for reset bit to go low (should be done by now). */
4091 while (hc->rh.prev_wPortStatus_1 &
4092 IO_STATE(R_USB_RH_PORT_STATUS_1, reset, yes));
4093
4094 /* If the port status is
4095 1) connected and enabled then there is a device and everything is fine
4096 2) neither connected nor enabled then there is no device, also fine
4097 3) connected and not enabled then we try again
4098 (Yes, there are other port status combinations besides these.) */
4099
4100 if ((hc->rh.prev_wPortStatus_1 &
4101 IO_STATE(R_USB_RH_PORT_STATUS_1, connected, yes)) &&
4102 (hc->rh.prev_wPortStatus_1 &
4103 IO_STATE(R_USB_RH_PORT_STATUS_1, enabled, no))) {
4104 dbg_rh("Connected device on port 1, but port not enabled?"
4105 " Trying reset again.");
4106 goto port_2_reset;
4107 }
4108
4109 /* Diagnostic printouts. */
4110 if ((hc->rh.prev_wPortStatus_1 &
4111 IO_STATE(R_USB_RH_PORT_STATUS_1, connected, no)) &&
4112 (hc->rh.prev_wPortStatus_1 &
4113 IO_STATE(R_USB_RH_PORT_STATUS_1, enabled, no))) {
4114 dbg_rh("No connected device on port 1");
4115 } else if ((hc->rh.prev_wPortStatus_1 &
4116 IO_STATE(R_USB_RH_PORT_STATUS_1, connected, yes)) &&
4117 (hc->rh.prev_wPortStatus_1 &
4118 IO_STATE(R_USB_RH_PORT_STATUS_1, enabled, yes))) {
4119 dbg_rh("Connected device on port 1, port 1 enabled");
4120 }
4121
4122 } else if (wIndex == 2) {
4123
4124 port_2_reset:
4125 dbg_rh("Doing reset of port 2");
4126
4127 /* Make sure the controller isn't busy. */
4128 while (*R_USB_COMMAND & IO_MASK(R_USB_COMMAND, busy));
4129
4130 /* Issue the reset command. */
4131 *R_USB_COMMAND =
4132 IO_STATE(R_USB_COMMAND, port_sel, port2) |
4133 IO_STATE(R_USB_COMMAND, port_cmd, reset) |
4134 IO_STATE(R_USB_COMMAND, ctrl_cmd, nop);
4135
4136 /* We must wait at least 10 ms for the device to recover.
4137 15 ms should be enough. */
4138 udelay(15000);
4139
4140 /* Wait for reset bit to go low (should be done by now). */
4141 while (hc->rh.prev_wPortStatus_2 &
4142 IO_STATE(R_USB_RH_PORT_STATUS_2, reset, yes));
4143
4144 /* If the port status is
4145 1) connected and enabled then there is a device and everything is fine
4146 2) neither connected nor enabled then there is no device, also fine
4147 3) connected and not enabled then we try again
4148 (Yes, there are other port status combinations besides these.) */
4149
4150 if ((hc->rh.prev_wPortStatus_2 &
4151 IO_STATE(R_USB_RH_PORT_STATUS_2, connected, yes)) &&
4152 (hc->rh.prev_wPortStatus_2 &
4153 IO_STATE(R_USB_RH_PORT_STATUS_2, enabled, no))) {
4154 dbg_rh("Connected device on port 2, but port not enabled?"
4155 " Trying reset again.");
4156 goto port_2_reset;
4157 }
4158
4159 /* Diagnostic printouts. */
4160 if ((hc->rh.prev_wPortStatus_2 &
4161 IO_STATE(R_USB_RH_PORT_STATUS_2, connected, no)) &&
4162 (hc->rh.prev_wPortStatus_2 &
4163 IO_STATE(R_USB_RH_PORT_STATUS_2, enabled, no))) {
4164 dbg_rh("No connected device on port 2");
4165 } else if ((hc->rh.prev_wPortStatus_2 &
4166 IO_STATE(R_USB_RH_PORT_STATUS_2, connected, yes)) &&
4167 (hc->rh.prev_wPortStatus_2 &
4168 IO_STATE(R_USB_RH_PORT_STATUS_2, enabled, yes))) {
4169 dbg_rh("Connected device on port 2, port 2 enabled");
4170 }
4171
4172 } else {
4173 dbg_rh("RH_SET_FEATURE->RH_PORT_RESET with invalid wIndex = %d", wIndex);
4174 }
4175
4176 /* Make sure the controller isn't busy. */
4177 while (*R_USB_COMMAND & IO_MASK(R_USB_COMMAND, busy));
4178
4179 /* If all enabled ports were disabled the host controller goes down into
4180 started mode, so we need to bring it back into the running state.
4181 (This is safe even if it's already in the running state.) */
4182 *R_USB_COMMAND =
4183 IO_STATE(R_USB_COMMAND, port_sel, nop) |
4184 IO_STATE(R_USB_COMMAND, port_cmd, reset) |
4185 IO_STATE(R_USB_COMMAND, ctrl_cmd, host_run);
4186
4187 dbg_rh("...Done");
4188 OK(0);
4189
4190 case (RH_PORT_POWER):
4191 OK (0); /* port power ** */
4192 case (RH_PORT_ENABLE):
4193 /* There is no port enable command in the host controller, so if the
4194 port is already enabled, we do nothing. If not, we reset the port
4195 (with an ugly goto). */
4196
4197 if (wIndex == 1) {
4198 if (hc->rh.prev_wPortStatus_1 &
4199 IO_STATE(R_USB_RH_PORT_STATUS_1, enabled, no)) {
4200 goto port_1_reset;
4201 }
4202 } else if (wIndex == 2) {
4203 if (hc->rh.prev_wPortStatus_2 &
4204 IO_STATE(R_USB_RH_PORT_STATUS_2, enabled, no)) {
4205 goto port_2_reset;
4206 }
4207 } else {
4208 dbg_rh("RH_SET_FEATURE->RH_GET_STATUS with invalid wIndex = %d", wIndex);
4209 }
4210 OK (0);
4211 }
4212 break;
4213
4214 case RH_SET_ADDRESS:
4215 hc->rh.devnum = wValue;
4216 dbg_rh("RH address set to: %d", hc->rh.devnum);
4217 OK (0);
4218
4219 case RH_GET_DESCRIPTOR:
4220 switch ((wValue & 0xff00) >> 8) {
4221 case (0x01): /* device descriptor */
4222 len = min_t(unsigned int, leni, min_t(unsigned int, sizeof (root_hub_dev_des), wLength));
4223 memcpy (data, root_hub_dev_des, len);
4224 OK (len);
4225 case (0x02): /* configuration descriptor */
4226 len = min_t(unsigned int, leni, min_t(unsigned int, sizeof (root_hub_config_des), wLength));
4227 memcpy (data, root_hub_config_des, len);
4228 OK (len);
4229 case (0x03): /* string descriptors */
4230 len = usb_root_hub_string (wValue & 0xff,
4231 0xff, "ETRAX 100LX",
4232 data, wLength);
4233 if (len > 0) {
4234 OK(min(leni, len));
4235 } else {
4236 stat = -EPIPE;
4237 }
4238
4239 }
4240 break;
4241
4242 case RH_GET_DESCRIPTOR | RH_CLASS:
4243 root_hub_hub_des[2] = hc->rh.numports;
4244 len = min_t(unsigned int, leni, min_t(unsigned int, sizeof (root_hub_hub_des), wLength));
4245 memcpy (data, root_hub_hub_des, len);
4246 OK (len);
4247
4248 case RH_GET_CONFIGURATION:
4249 *(__u8 *) data = 0x01;
4250 OK (1);
4251
4252 case RH_SET_CONFIGURATION:
4253 OK (0);
4254
4255 default:
4256 stat = -EPIPE;
4257 }
4258
4259 urb->actual_length = len;
4260 urb->status = stat;
4261 urb->dev = NULL;
4262 if (urb->complete) {
4263 urb->complete(urb, NULL);
4264 }
4265 DBFEXIT;
4266
4267 return 0;
4268 }
4269
4270 static void
4271 etrax_usb_bulk_eot_timer_func(unsigned long dummy)
4272 {
4273 /* Because of a race condition in the top half, we might miss a bulk eot.
4274 This timer "simulates" a bulk eot if we don't get one for a while, hopefully
4275 correcting the situation. */
4276 dbg_bulk("bulk_eot_timer timed out.");
4277 etrax_usb_hc_bulk_eot_interrupt(1);
4278 }
4279
4280 static void*
4281 etrax_usb_buffer_alloc(struct usb_bus* bus, size_t size,
4282 unsigned mem_flags, dma_addr_t *dma)
4283 {
4284 return kmalloc(size, mem_flags);
4285 }
4286
4287 static void
4288 etrax_usb_buffer_free(struct usb_bus *bus, size_t size, void *addr, dma_addr_t dma)
4289 {
4290 kfree(addr);
4291 }
4292
4293
4294 static struct device fake_device;
4295
4296 static int __init etrax_usb_hc_init(void)
4297 {
4298 static etrax_hc_t *hc;
4299 struct usb_bus *bus;
4300 struct usb_device *usb_rh;
4301 int i;
4302
4303 DBFENTER;
4304
4305 info("ETRAX 100LX USB-HCD %s (c) 2001-2003 Axis Communications AB\n", usb_hcd_version);
4306
4307 hc = kmalloc(sizeof(etrax_hc_t), GFP_KERNEL);
4308 assert(hc != NULL);
4309
4310 /* We use kmem_cache_* to make sure that all DMA desc. are dword aligned */
4311 /* Note that we specify sizeof(USB_EP_Desc_t) as the size, but also allocate
4312 SB descriptors from this cache. This is ok since sizeof(USB_EP_Desc_t) ==
4313 sizeof(USB_SB_Desc_t). */
4314
4315 usb_desc_cache = kmem_cache_create("usb_desc_cache", sizeof(USB_EP_Desc_t), 0,
4316 SLAB_HWCACHE_ALIGN, 0, 0);
4317 assert(usb_desc_cache != NULL);
4318
4319 top_half_reg_cache = kmem_cache_create("top_half_reg_cache",
4320 sizeof(usb_interrupt_registers_t),
4321 0, SLAB_HWCACHE_ALIGN, 0, 0);
4322 assert(top_half_reg_cache != NULL);
4323
4324 isoc_compl_cache = kmem_cache_create("isoc_compl_cache",
4325 sizeof(usb_isoc_complete_data_t),
4326 0, SLAB_HWCACHE_ALIGN, 0, 0);
4327 assert(isoc_compl_cache != NULL);
4328
4329 etrax_usb_bus = bus = usb_alloc_bus(&etrax_usb_device_operations);
4330 hc->bus = bus;
4331 bus->bus_name="ETRAX 100LX";
4332 bus->hcpriv = hc;
4333
4334 /* Initialize RH to the default address.
4335 And make sure that we have no status change indication */
4336 hc->rh.numports = 2; /* The RH has two ports */
4337 hc->rh.devnum = 1;
4338 hc->rh.wPortChange_1 = 0;
4339 hc->rh.wPortChange_2 = 0;
4340
4341 /* Also initate the previous values to zero */
4342 hc->rh.prev_wPortStatus_1 = 0;
4343 hc->rh.prev_wPortStatus_2 = 0;
4344
4345 /* Initialize the intr-traffic flags */
4346 /* FIXME: This isn't used. (Besides, the error field isn't initialized.) */
4347 hc->intr.sleeping = 0;
4348 hc->intr.wq = NULL;
4349
4350 epid_usage_bitmask = 0;
4351 epid_out_traffic = 0;
4352
4353 /* Mark the invalid epid as being used. */
4354 set_bit(INVALID_EPID, (void *)&epid_usage_bitmask);
4355 *R_USB_EPT_INDEX = IO_FIELD(R_USB_EPT_INDEX, value, INVALID_EPID);
4356 nop();
4357 /* The valid bit should still be set ('invalid' is in our world; not the hardware's). */
4358 *R_USB_EPT_DATA = (IO_STATE(R_USB_EPT_DATA, valid, yes) |
4359 IO_FIELD(R_USB_EPT_DATA, max_len, 1));
4360
4361 /* Mark the dummy epid as being used. */
4362 set_bit(DUMMY_EPID, (void *)&epid_usage_bitmask);
4363 *R_USB_EPT_INDEX = IO_FIELD(R_USB_EPT_INDEX, value, DUMMY_EPID);
4364 nop();
4365 *R_USB_EPT_DATA = (IO_STATE(R_USB_EPT_DATA, valid, no) |
4366 IO_FIELD(R_USB_EPT_DATA, max_len, 1));
4367
4368 /* Initialize the urb list by initiating a head for each list. */
4369 for (i = 0; i < NBR_OF_EPIDS; i++) {
4370 INIT_LIST_HEAD(&urb_list[i]);
4371 }
4372 spin_lock_init(&urb_list_lock);
4373
4374 INIT_LIST_HEAD(&urb_unlink_list);
4375
4376
4377 /* Initiate the bulk start timer. */
4378 init_timer(&bulk_start_timer);
4379 bulk_start_timer.expires = jiffies + BULK_START_TIMER_INTERVAL;
4380 bulk_start_timer.function = etrax_usb_bulk_start_timer_func;
4381 add_timer(&bulk_start_timer);
4382
4383
4384 /* Initiate the bulk eot timer. */
4385 init_timer(&bulk_eot_timer);
4386 bulk_eot_timer.expires = jiffies + BULK_EOT_TIMER_INTERVAL;
4387 bulk_eot_timer.function = etrax_usb_bulk_eot_timer_func;
4388 add_timer(&bulk_eot_timer);
4389
4390 /* Set up the data structures for USB traffic. Note that this must be done before
4391 any interrupt that relies on sane DMA list occurrs. */
4392 init_rx_buffers();
4393 init_tx_bulk_ep();
4394 init_tx_ctrl_ep();
4395 init_tx_intr_ep();
4396 init_tx_isoc_ep();
4397
4398 device_initialize(&fake_device);
4399 kobject_set_name(&fake_device.kobj, "etrax_usb");
4400 kobject_add(&fake_device.kobj);
4401 kobject_hotplug(&fake_device.kobj, KOBJ_ADD);
4402 hc->bus->controller = &fake_device;
4403 usb_register_bus(hc->bus);
4404
4405 *R_IRQ_MASK2_SET =
4406 /* Note that these interrupts are not used. */
4407 IO_STATE(R_IRQ_MASK2_SET, dma8_sub0_descr, set) |
4408 /* Sub channel 1 (ctrl) descr. interrupts are used. */
4409 IO_STATE(R_IRQ_MASK2_SET, dma8_sub1_descr, set) |
4410 IO_STATE(R_IRQ_MASK2_SET, dma8_sub2_descr, set) |
4411 /* Sub channel 3 (isoc) descr. interrupts are used. */
4412 IO_STATE(R_IRQ_MASK2_SET, dma8_sub3_descr, set);
4413
4414 /* Note that the dma9_descr interrupt is not used. */
4415 *R_IRQ_MASK2_SET =
4416 IO_STATE(R_IRQ_MASK2_SET, dma9_eop, set) |
4417 IO_STATE(R_IRQ_MASK2_SET, dma9_descr, set);
4418
4419 /* FIXME: Enable iso_eof only when isoc traffic is running. */
4420 *R_USB_IRQ_MASK_SET =
4421 IO_STATE(R_USB_IRQ_MASK_SET, iso_eof, set) |
4422 IO_STATE(R_USB_IRQ_MASK_SET, bulk_eot, set) |
4423 IO_STATE(R_USB_IRQ_MASK_SET, epid_attn, set) |
4424 IO_STATE(R_USB_IRQ_MASK_SET, port_status, set) |
4425 IO_STATE(R_USB_IRQ_MASK_SET, ctl_status, set);
4426
4427
4428 if (request_irq(ETRAX_USB_HC_IRQ, etrax_usb_hc_interrupt_top_half, 0,
4429 "ETRAX 100LX built-in USB (HC)", hc)) {
4430 err("Could not allocate IRQ %d for USB", ETRAX_USB_HC_IRQ);
4431 etrax_usb_hc_cleanup();
4432 DBFEXIT;
4433 return -1;
4434 }
4435
4436 if (request_irq(ETRAX_USB_RX_IRQ, etrax_usb_rx_interrupt, 0,
4437 "ETRAX 100LX built-in USB (Rx)", hc)) {
4438 err("Could not allocate IRQ %d for USB", ETRAX_USB_RX_IRQ);
4439 etrax_usb_hc_cleanup();
4440 DBFEXIT;
4441 return -1;
4442 }
4443
4444 if (request_irq(ETRAX_USB_TX_IRQ, etrax_usb_tx_interrupt, 0,
4445 "ETRAX 100LX built-in USB (Tx)", hc)) {
4446 err("Could not allocate IRQ %d for USB", ETRAX_USB_TX_IRQ);
4447 etrax_usb_hc_cleanup();
4448 DBFEXIT;
4449 return -1;
4450 }
4451
4452 /* R_USB_COMMAND:
4453 USB commands in host mode. The fields in this register should all be
4454 written to in one write. Do not read-modify-write one field at a time. A
4455 write to this register will trigger events in the USB controller and an
4456 incomplete command may lead to unpredictable results, and in worst case
4457 even to a deadlock in the controller.
4458 (Note however that the busy field is read-only, so no need to write to it.) */
4459
4460 /* Check the busy bit before writing to R_USB_COMMAND. */
4461
4462 while (*R_USB_COMMAND & IO_MASK(R_USB_COMMAND, busy));
4463
4464 /* Reset the USB interface. */
4465 *R_USB_COMMAND =
4466 IO_STATE(R_USB_COMMAND, port_sel, nop) |
4467 IO_STATE(R_USB_COMMAND, port_cmd, reset) |
4468 IO_STATE(R_USB_COMMAND, ctrl_cmd, reset);
4469
4470 /* Designer's Reference, p. 8 - 10 says we should Initate R_USB_FM_PSTART to 0x2A30 (10800),
4471 to guarantee that control traffic gets 10% of the bandwidth, and periodic transfer may
4472 allocate the rest (90%). This doesn't work though. Read on for a lenghty explanation.
4473
4474 While there is a difference between rev. 2 and rev. 3 of the ETRAX 100LX regarding the NAK
4475 behaviour, it doesn't solve this problem. What happens is that a control transfer will not
4476 be interrupted in its data stage when PSTART happens (the point at which periodic traffic
4477 is started). Thus, if PSTART is set to 10800 and its IN or OUT token is NAKed until just before
4478 PSTART happens, it will continue the IN/OUT transfer as long as it's ACKed. After it's done,
4479 there may be too little time left for an isochronous transfer, causing an epid attention
4480 interrupt due to perror. The work-around for this is to let the control transfers run at the
4481 end of the frame instead of at the beginning, and will be interrupted just fine if it doesn't
4482 fit into the frame. However, since there will *always* be a control transfer at the beginning
4483 of the frame, regardless of what we set PSTART to, that transfer might be a 64-byte transfer
4484 which consumes up to 15% of the frame, leaving only 85% for periodic traffic. The solution to
4485 this would be to 'dummy allocate' 5% of the frame with the usb_claim_bandwidth function to make
4486 sure that the periodic transfers that are inserted will always fit in the frame.
4487
4488 The idea was suggested that a control transfer could be split up into several 8 byte transfers,
4489 so that it would be interrupted by PSTART, but since this can't be done for an IN transfer this
4490 hasn't been implemented.
4491
4492 The value 11960 is chosen to be just after the SOF token, with a couple of bit times extra
4493 for possible bit stuffing. */
4494
4495 *R_USB_FM_PSTART = IO_FIELD(R_USB_FM_PSTART, value, 11960);
4496
4497 #ifdef CONFIG_ETRAX_USB_HOST_PORT1
4498 *R_USB_PORT1_DISABLE = IO_STATE(R_USB_PORT1_DISABLE, disable, no);
4499 #endif
4500
4501 #ifdef CONFIG_ETRAX_USB_HOST_PORT2
4502 *R_USB_PORT2_DISABLE = IO_STATE(R_USB_PORT2_DISABLE, disable, no);
4503 #endif
4504
4505 while (*R_USB_COMMAND & IO_MASK(R_USB_COMMAND, busy));
4506
4507 /* Configure the USB interface as a host controller. */
4508 *R_USB_COMMAND =
4509 IO_STATE(R_USB_COMMAND, port_sel, nop) |
4510 IO_STATE(R_USB_COMMAND, port_cmd, reset) |
4511 IO_STATE(R_USB_COMMAND, ctrl_cmd, host_config);
4512
4513 /* Note: Do not reset any ports here. Await the port status interrupts, to have a controlled
4514 sequence of resetting the ports. If we reset both ports now, and there are devices
4515 on both ports, we will get a bus error because both devices will answer the set address
4516 request. */
4517
4518 while (*R_USB_COMMAND & IO_MASK(R_USB_COMMAND, busy));
4519
4520 /* Start processing of USB traffic. */
4521 *R_USB_COMMAND =
4522 IO_STATE(R_USB_COMMAND, port_sel, nop) |
4523 IO_STATE(R_USB_COMMAND, port_cmd, reset) |
4524 IO_STATE(R_USB_COMMAND, ctrl_cmd, host_run);
4525
4526 while (*R_USB_COMMAND & IO_MASK(R_USB_COMMAND, busy));
4527
4528 usb_rh = usb_alloc_dev(NULL, hc->bus, 0);
4529 hc->bus->root_hub = usb_rh;
4530 usb_rh->state = USB_STATE_ADDRESS;
4531 usb_rh->speed = USB_SPEED_FULL;
4532 usb_rh->devnum = 1;
4533 hc->bus->devnum_next = 2;
4534 usb_rh->ep0.desc.wMaxPacketSize = __const_cpu_to_le16(64);
4535 usb_get_device_descriptor(usb_rh, USB_DT_DEVICE_SIZE);
4536 usb_new_device(usb_rh);
4537
4538 DBFEXIT;
4539
4540 return 0;
4541 }
4542
4543 static void etrax_usb_hc_cleanup(void)
4544 {
4545 DBFENTER;
4546
4547 free_irq(ETRAX_USB_HC_IRQ, NULL);
4548 free_irq(ETRAX_USB_RX_IRQ, NULL);
4549 free_irq(ETRAX_USB_TX_IRQ, NULL);
4550
4551 usb_deregister_bus(etrax_usb_bus);
4552
4553 /* FIXME: call kmem_cache_destroy here? */
4554
4555 DBFEXIT;
4556 }
4557
4558 module_init(etrax_usb_hc_init);
4559 module_exit(etrax_usb_hc_cleanup);
This page took 0.168207 seconds and 5 git commands to generate.