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