Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
sl811-hcd.c
Go to the documentation of this file.
1 /*
2  * SL811HS HCD (Host Controller Driver) for USB.
3  *
4  * Copyright (C) 2004 Psion Teklogix (for NetBook PRO)
5  * Copyright (C) 2004-2005 David Brownell
6  *
7  * Periodic scheduling is based on Roman's OHCI code
8  * Copyright (C) 1999 Roman Weissgaerber
9  *
10  * The SL811HS controller handles host side USB (like the SL11H, but with
11  * another register set and SOF generation) as well as peripheral side USB
12  * (like the SL811S). This driver version doesn't implement the Gadget API
13  * for the peripheral role; or OTG (that'd need much external circuitry).
14  *
15  * For documentation, see the SL811HS spec and the "SL811HS Embedded Host"
16  * document (providing significant pieces missing from that spec); plus
17  * the SL811S spec if you want peripheral side info.
18  */
19 
20 /*
21  * Status: Passed basic stress testing, works with hubs, mice, keyboards,
22  * and usb-storage.
23  *
24  * TODO:
25  * - usb suspend/resume triggered by sl811 (with USB_SUSPEND)
26  * - various issues noted in the code
27  * - performance work; use both register banks; ...
28  * - use urb->iso_frame_desc[] with ISO transfers
29  */
30 
31 #undef VERBOSE
32 #undef PACKET_TRACE
33 
34 #include <linux/module.h>
35 #include <linux/moduleparam.h>
36 #include <linux/kernel.h>
37 #include <linux/delay.h>
38 #include <linux/ioport.h>
39 #include <linux/sched.h>
40 #include <linux/slab.h>
41 #include <linux/errno.h>
42 #include <linux/init.h>
43 #include <linux/timer.h>
44 #include <linux/list.h>
45 #include <linux/interrupt.h>
46 #include <linux/usb.h>
47 #include <linux/usb/sl811.h>
48 #include <linux/usb/hcd.h>
49 #include <linux/platform_device.h>
50 #include <linux/prefetch.h>
51 
52 #include <asm/io.h>
53 #include <asm/irq.h>
54 #include <asm/byteorder.h>
55 #include <asm/unaligned.h>
56 
57 #include "sl811.h"
58 
59 
60 MODULE_DESCRIPTION("SL811HS USB Host Controller Driver");
61 MODULE_LICENSE("GPL");
62 MODULE_ALIAS("platform:sl811-hcd");
63 
64 #define DRIVER_VERSION "19 May 2005"
65 
66 
67 #ifndef DEBUG
68 # define STUB_DEBUG_FILE
69 #endif
70 
71 /* for now, use only one transfer register bank */
72 #undef USE_B
73 
74 // #define QUIRK2
75 #define QUIRK3
76 
77 static const char hcd_name[] = "sl811-hcd";
78 
79 /*-------------------------------------------------------------------------*/
80 
81 static void port_power(struct sl811 *sl811, int is_on)
82 {
83  struct usb_hcd *hcd = sl811_to_hcd(sl811);
84 
85  /* hub is inactive unless the port is powered */
86  if (is_on) {
87  if (sl811->port1 & USB_PORT_STAT_POWER)
88  return;
89 
90  sl811->port1 = USB_PORT_STAT_POWER;
92  } else {
93  sl811->port1 = 0;
94  sl811->irq_enable = 0;
95  hcd->state = HC_STATE_HALT;
96  }
97  sl811->ctrl1 = 0;
98  sl811_write(sl811, SL11H_IRQ_ENABLE, 0);
99  sl811_write(sl811, SL11H_IRQ_STATUS, ~0);
100 
101  if (sl811->board && sl811->board->port_power) {
102  /* switch VBUS, at 500mA unless hub power budget gets set */
103  DBG("power %s\n", is_on ? "on" : "off");
104  sl811->board->port_power(hcd->self.controller, is_on);
105  }
106 
107  /* reset as thoroughly as we can */
108  if (sl811->board && sl811->board->reset)
109  sl811->board->reset(hcd->self.controller);
110  else {
111  sl811_write(sl811, SL11H_CTLREG1, SL11H_CTL1MASK_SE0);
112  mdelay(20);
113  }
114 
115  sl811_write(sl811, SL11H_IRQ_ENABLE, 0);
116  sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1);
117  sl811_write(sl811, SL811HS_CTLREG2, SL811HS_CTL2_INIT);
118  sl811_write(sl811, SL11H_IRQ_ENABLE, sl811->irq_enable);
119 
120  // if !is_on, put into lowpower mode now
121 }
122 
123 /*-------------------------------------------------------------------------*/
124 
125 /* This is a PIO-only HCD. Queueing appends URBs to the endpoint's queue,
126  * and may start I/O. Endpoint queues are scanned during completion irq
127  * handlers (one per packet: ACK, NAK, faults, etc) and urb cancellation.
128  *
129  * Using an external DMA engine to copy a packet at a time could work,
130  * though setup/teardown costs may be too big to make it worthwhile.
131  */
132 
133 /* SETUP starts a new control request. Devices are not allowed to
134  * STALL or NAK these; they must cancel any pending control requests.
135  */
136 static void setup_packet(
137  struct sl811 *sl811,
138  struct sl811h_ep *ep,
139  struct urb *urb,
140  u8 bank,
141  u8 control
142 )
143 {
144  u8 addr;
145  u8 len;
146  void __iomem *data_reg;
147 
148  addr = SL811HS_PACKET_BUF(bank == 0);
149  len = sizeof(struct usb_ctrlrequest);
150  data_reg = sl811->data_reg;
151  sl811_write_buf(sl811, addr, urb->setup_packet, len);
152 
153  /* autoincrementing */
154  sl811_write(sl811, bank + SL11H_BUFADDRREG, addr);
155  writeb(len, data_reg);
156  writeb(SL_SETUP /* | ep->epnum */, data_reg);
157  writeb(usb_pipedevice(urb->pipe), data_reg);
158 
159  /* always OUT/data0 */
160  sl811_write(sl811, bank + SL11H_HOSTCTLREG,
161  control | SL11H_HCTLMASK_OUT);
162  ep->length = 0;
163  PACKET("SETUP qh%p\n", ep);
164 }
165 
166 /* STATUS finishes control requests, often after IN or OUT data packets */
167 static void status_packet(
168  struct sl811 *sl811,
169  struct sl811h_ep *ep,
170  struct urb *urb,
171  u8 bank,
172  u8 control
173 )
174 {
175  int do_out;
176  void __iomem *data_reg;
177 
178  do_out = urb->transfer_buffer_length && usb_pipein(urb->pipe);
179  data_reg = sl811->data_reg;
180 
181  /* autoincrementing */
182  sl811_write(sl811, bank + SL11H_BUFADDRREG, 0);
183  writeb(0, data_reg);
184  writeb((do_out ? SL_OUT : SL_IN) /* | ep->epnum */, data_reg);
185  writeb(usb_pipedevice(urb->pipe), data_reg);
186 
187  /* always data1; sometimes IN */
188  control |= SL11H_HCTLMASK_TOGGLE;
189  if (do_out)
190  control |= SL11H_HCTLMASK_OUT;
191  sl811_write(sl811, bank + SL11H_HOSTCTLREG, control);
192  ep->length = 0;
193  PACKET("STATUS%s/%s qh%p\n", ep->nak_count ? "/retry" : "",
194  do_out ? "out" : "in", ep);
195 }
196 
197 /* IN packets can be used with any type of endpoint. here we just
198  * start the transfer, data from the peripheral may arrive later.
199  * urb->iso_frame_desc is currently ignored here...
200  */
201 static void in_packet(
202  struct sl811 *sl811,
203  struct sl811h_ep *ep,
204  struct urb *urb,
205  u8 bank,
206  u8 control
207 )
208 {
209  u8 addr;
210  u8 len;
211  void __iomem *data_reg;
212 
213  /* avoid losing data on overflow */
214  len = ep->maxpacket;
215  addr = SL811HS_PACKET_BUF(bank == 0);
216  if (!(control & SL11H_HCTLMASK_ISOCH)
217  && usb_gettoggle(urb->dev, ep->epnum, 0))
218  control |= SL11H_HCTLMASK_TOGGLE;
219  data_reg = sl811->data_reg;
220 
221  /* autoincrementing */
222  sl811_write(sl811, bank + SL11H_BUFADDRREG, addr);
223  writeb(len, data_reg);
224  writeb(SL_IN | ep->epnum, data_reg);
225  writeb(usb_pipedevice(urb->pipe), data_reg);
226 
227  sl811_write(sl811, bank + SL11H_HOSTCTLREG, control);
228  ep->length = min_t(u32, len,
229  urb->transfer_buffer_length - urb->actual_length);
230  PACKET("IN%s/%d qh%p len%d\n", ep->nak_count ? "/retry" : "",
231  !!usb_gettoggle(urb->dev, ep->epnum, 0), ep, len);
232 }
233 
234 /* OUT packets can be used with any type of endpoint.
235  * urb->iso_frame_desc is currently ignored here...
236  */
237 static void out_packet(
238  struct sl811 *sl811,
239  struct sl811h_ep *ep,
240  struct urb *urb,
241  u8 bank,
242  u8 control
243 )
244 {
245  void *buf;
246  u8 addr;
247  u8 len;
248  void __iomem *data_reg;
249 
250  buf = urb->transfer_buffer + urb->actual_length;
251  prefetch(buf);
252 
253  len = min_t(u32, ep->maxpacket,
254  urb->transfer_buffer_length - urb->actual_length);
255 
256  if (!(control & SL11H_HCTLMASK_ISOCH)
257  && usb_gettoggle(urb->dev, ep->epnum, 1))
258  control |= SL11H_HCTLMASK_TOGGLE;
259  addr = SL811HS_PACKET_BUF(bank == 0);
260  data_reg = sl811->data_reg;
261 
262  sl811_write_buf(sl811, addr, buf, len);
263 
264  /* autoincrementing */
265  sl811_write(sl811, bank + SL11H_BUFADDRREG, addr);
266  writeb(len, data_reg);
267  writeb(SL_OUT | ep->epnum, data_reg);
268  writeb(usb_pipedevice(urb->pipe), data_reg);
269 
270  sl811_write(sl811, bank + SL11H_HOSTCTLREG,
271  control | SL11H_HCTLMASK_OUT);
272  ep->length = len;
273  PACKET("OUT%s/%d qh%p len%d\n", ep->nak_count ? "/retry" : "",
274  !!usb_gettoggle(urb->dev, ep->epnum, 1), ep, len);
275 }
276 
277 /*-------------------------------------------------------------------------*/
278 
279 /* caller updates on-chip enables later */
280 
281 static inline void sofirq_on(struct sl811 *sl811)
282 {
283  if (sl811->irq_enable & SL11H_INTMASK_SOFINTR)
284  return;
285  VDBG("sof irq on\n");
287 }
288 
289 static inline void sofirq_off(struct sl811 *sl811)
290 {
291  if (!(sl811->irq_enable & SL11H_INTMASK_SOFINTR))
292  return;
293  VDBG("sof irq off\n");
295 }
296 
297 /*-------------------------------------------------------------------------*/
298 
299 /* pick the next endpoint for a transaction, and issue it.
300  * frames start with periodic transfers (after whatever is pending
301  * from the previous frame), and the rest of the time is async
302  * transfers, scheduled round-robin.
303  */
304 static struct sl811h_ep *start(struct sl811 *sl811, u8 bank)
305 {
306  struct sl811h_ep *ep;
307  struct urb *urb;
308  int fclock;
309  u8 control;
310 
311  /* use endpoint at schedule head */
312  if (sl811->next_periodic) {
313  ep = sl811->next_periodic;
314  sl811->next_periodic = ep->next;
315  } else {
316  if (sl811->next_async)
317  ep = sl811->next_async;
318  else if (!list_empty(&sl811->async))
319  ep = container_of(sl811->async.next,
320  struct sl811h_ep, schedule);
321  else {
322  /* could set up the first fullspeed periodic
323  * transfer for the next frame ...
324  */
325  return NULL;
326  }
327 
328 #ifdef USE_B
329  if ((bank && sl811->active_b == ep) || sl811->active_a == ep)
330  return NULL;
331 #endif
332 
333  if (ep->schedule.next == &sl811->async)
334  sl811->next_async = NULL;
335  else
336  sl811->next_async = container_of(ep->schedule.next,
337  struct sl811h_ep, schedule);
338  }
339 
340  if (unlikely(list_empty(&ep->hep->urb_list))) {
341  DBG("empty %p queue?\n", ep);
342  return NULL;
343  }
344 
345  urb = container_of(ep->hep->urb_list.next, struct urb, urb_list);
346  control = ep->defctrl;
347 
348  /* if this frame doesn't have enough time left to transfer this
349  * packet, wait till the next frame. too-simple algorithm...
350  */
351  fclock = sl811_read(sl811, SL11H_SOFTMRREG) << 6;
352  fclock -= 100; /* setup takes not much time */
353  if (urb->dev->speed == USB_SPEED_LOW) {
354  if (control & SL11H_HCTLMASK_PREAMBLE) {
355  /* also note erratum 1: some hubs won't work */
356  fclock -= 800;
357  }
358  fclock -= ep->maxpacket << 8;
359 
360  /* erratum 2: AFTERSOF only works for fullspeed */
361  if (fclock < 0) {
362  if (ep->period)
363  sl811->stat_overrun++;
364  sofirq_on(sl811);
365  return NULL;
366  }
367  } else {
368  fclock -= 12000 / 19; /* 19 64byte packets/msec */
369  if (fclock < 0) {
370  if (ep->period)
371  sl811->stat_overrun++;
372  control |= SL11H_HCTLMASK_AFTERSOF;
373 
374  /* throttle bulk/control irq noise */
375  } else if (ep->nak_count)
376  control |= SL11H_HCTLMASK_AFTERSOF;
377  }
378 
379 
380  switch (ep->nextpid) {
381  case USB_PID_IN:
382  in_packet(sl811, ep, urb, bank, control);
383  break;
384  case USB_PID_OUT:
385  out_packet(sl811, ep, urb, bank, control);
386  break;
387  case USB_PID_SETUP:
388  setup_packet(sl811, ep, urb, bank, control);
389  break;
390  case USB_PID_ACK: /* for control status */
391  status_packet(sl811, ep, urb, bank, control);
392  break;
393  default:
394  DBG("bad ep%p pid %02x\n", ep, ep->nextpid);
395  ep = NULL;
396  }
397  return ep;
398 }
399 
400 #define MIN_JIFFIES ((msecs_to_jiffies(2) > 1) ? msecs_to_jiffies(2) : 2)
401 
402 static inline void start_transfer(struct sl811 *sl811)
403 {
404  if (sl811->port1 & USB_PORT_STAT_SUSPEND)
405  return;
406  if (sl811->active_a == NULL) {
407  sl811->active_a = start(sl811, SL811_EP_A(SL811_HOST_BUF));
408  if (sl811->active_a != NULL)
409  sl811->jiffies_a = jiffies + MIN_JIFFIES;
410  }
411 #ifdef USE_B
412  if (sl811->active_b == NULL) {
413  sl811->active_b = start(sl811, SL811_EP_B(SL811_HOST_BUF));
414  if (sl811->active_b != NULL)
415  sl811->jiffies_b = jiffies + MIN_JIFFIES;
416  }
417 #endif
418 }
419 
420 static void finish_request(
421  struct sl811 *sl811,
422  struct sl811h_ep *ep,
423  struct urb *urb,
424  int status
425 ) __releases(sl811->lock) __acquires(sl811->lock)
426 {
427  unsigned i;
428 
429  if (usb_pipecontrol(urb->pipe))
430  ep->nextpid = USB_PID_SETUP;
431 
432  usb_hcd_unlink_urb_from_ep(sl811_to_hcd(sl811), urb);
433  spin_unlock(&sl811->lock);
434  usb_hcd_giveback_urb(sl811_to_hcd(sl811), urb, status);
435  spin_lock(&sl811->lock);
436 
437  /* leave active endpoints in the schedule */
438  if (!list_empty(&ep->hep->urb_list))
439  return;
440 
441  /* async deschedule? */
442  if (!list_empty(&ep->schedule)) {
443  list_del_init(&ep->schedule);
444  if (ep == sl811->next_async)
445  sl811->next_async = NULL;
446  return;
447  }
448 
449  /* periodic deschedule */
450  DBG("deschedule qh%d/%p branch %d\n", ep->period, ep, ep->branch);
451  for (i = ep->branch; i < PERIODIC_SIZE; i += ep->period) {
452  struct sl811h_ep *temp;
453  struct sl811h_ep **prev = &sl811->periodic[i];
454 
455  while (*prev && ((temp = *prev) != ep))
456  prev = &temp->next;
457  if (*prev)
458  *prev = ep->next;
459  sl811->load[i] -= ep->load;
460  }
461  ep->branch = PERIODIC_SIZE;
462  sl811->periodic_count--;
463  sl811_to_hcd(sl811)->self.bandwidth_allocated
464  -= ep->load / ep->period;
465  if (ep == sl811->next_periodic)
466  sl811->next_periodic = ep->next;
467 
468  /* we might turn SOFs back on again for the async schedule */
469  if (sl811->periodic_count == 0)
470  sofirq_off(sl811);
471 }
472 
473 static void
474 done(struct sl811 *sl811, struct sl811h_ep *ep, u8 bank)
475 {
476  u8 status;
477  struct urb *urb;
478  int urbstat = -EINPROGRESS;
479 
480  if (unlikely(!ep))
481  return;
482 
483  status = sl811_read(sl811, bank + SL11H_PKTSTATREG);
484 
485  urb = container_of(ep->hep->urb_list.next, struct urb, urb_list);
486 
487  /* we can safely ignore NAKs */
488  if (status & SL11H_STATMASK_NAK) {
489  // PACKET("...NAK_%02x qh%p\n", bank, ep);
490  if (!ep->period)
491  ep->nak_count++;
492  ep->error_count = 0;
493 
494  /* ACK advances transfer, toggle, and maybe queue */
495  } else if (status & SL11H_STATMASK_ACK) {
496  struct usb_device *udev = urb->dev;
497  int len;
498  unsigned char *buf;
499 
500  /* urb->iso_frame_desc is currently ignored here... */
501 
502  ep->nak_count = ep->error_count = 0;
503  switch (ep->nextpid) {
504  case USB_PID_OUT:
505  // PACKET("...ACK/out_%02x qh%p\n", bank, ep);
506  urb->actual_length += ep->length;
507  usb_dotoggle(udev, ep->epnum, 1);
508  if (urb->actual_length
509  == urb->transfer_buffer_length) {
510  if (usb_pipecontrol(urb->pipe))
511  ep->nextpid = USB_PID_ACK;
512 
513  /* some bulk protocols terminate OUT transfers
514  * by a short packet, using ZLPs not padding.
515  */
516  else if (ep->length < ep->maxpacket
517  || !(urb->transfer_flags
518  & URB_ZERO_PACKET))
519  urbstat = 0;
520  }
521  break;
522  case USB_PID_IN:
523  // PACKET("...ACK/in_%02x qh%p\n", bank, ep);
524  buf = urb->transfer_buffer + urb->actual_length;
525  prefetchw(buf);
526  len = ep->maxpacket - sl811_read(sl811,
527  bank + SL11H_XFERCNTREG);
528  if (len > ep->length) {
529  len = ep->length;
530  urbstat = -EOVERFLOW;
531  }
532  urb->actual_length += len;
533  sl811_read_buf(sl811, SL811HS_PACKET_BUF(bank == 0),
534  buf, len);
535  usb_dotoggle(udev, ep->epnum, 0);
536  if (urbstat == -EINPROGRESS &&
537  (len < ep->maxpacket ||
538  urb->actual_length ==
539  urb->transfer_buffer_length)) {
540  if (usb_pipecontrol(urb->pipe))
541  ep->nextpid = USB_PID_ACK;
542  else
543  urbstat = 0;
544  }
545  break;
546  case USB_PID_SETUP:
547  // PACKET("...ACK/setup_%02x qh%p\n", bank, ep);
548  if (urb->transfer_buffer_length == urb->actual_length)
549  ep->nextpid = USB_PID_ACK;
550  else if (usb_pipeout(urb->pipe)) {
551  usb_settoggle(udev, 0, 1, 1);
552  ep->nextpid = USB_PID_OUT;
553  } else {
554  usb_settoggle(udev, 0, 0, 1);
555  ep->nextpid = USB_PID_IN;
556  }
557  break;
558  case USB_PID_ACK:
559  // PACKET("...ACK/status_%02x qh%p\n", bank, ep);
560  urbstat = 0;
561  break;
562  }
563 
564  /* STALL stops all transfers */
565  } else if (status & SL11H_STATMASK_STALL) {
566  PACKET("...STALL_%02x qh%p\n", bank, ep);
567  ep->nak_count = ep->error_count = 0;
568  urbstat = -EPIPE;
569 
570  /* error? retry, until "3 strikes" */
571  } else if (++ep->error_count >= 3) {
572  if (status & SL11H_STATMASK_TMOUT)
573  urbstat = -ETIME;
574  else if (status & SL11H_STATMASK_OVF)
575  urbstat = -EOVERFLOW;
576  else
577  urbstat = -EPROTO;
578  ep->error_count = 0;
579  PACKET("...3STRIKES_%02x %02x qh%p stat %d\n",
580  bank, status, ep, urbstat);
581  }
582 
583  if (urbstat != -EINPROGRESS || urb->unlinked)
584  finish_request(sl811, ep, urb, urbstat);
585 }
586 
587 static inline u8 checkdone(struct sl811 *sl811)
588 {
589  u8 ctl;
590  u8 irqstat = 0;
591 
592  if (sl811->active_a && time_before_eq(sl811->jiffies_a, jiffies)) {
593  ctl = sl811_read(sl811, SL811_EP_A(SL11H_HOSTCTLREG));
594  if (ctl & SL11H_HCTLMASK_ARM)
595  sl811_write(sl811, SL811_EP_A(SL11H_HOSTCTLREG), 0);
596  DBG("%s DONE_A: ctrl %02x sts %02x\n",
597  (ctl & SL11H_HCTLMASK_ARM) ? "timeout" : "lost",
598  ctl,
599  sl811_read(sl811, SL811_EP_A(SL11H_PKTSTATREG)));
600  irqstat |= SL11H_INTMASK_DONE_A;
601  }
602 #ifdef USE_B
603  if (sl811->active_b && time_before_eq(sl811->jiffies_b, jiffies)) {
604  ctl = sl811_read(sl811, SL811_EP_B(SL11H_HOSTCTLREG));
605  if (ctl & SL11H_HCTLMASK_ARM)
606  sl811_write(sl811, SL811_EP_B(SL11H_HOSTCTLREG), 0);
607  DBG("%s DONE_B: ctrl %02x sts %02x\n",
608  (ctl & SL11H_HCTLMASK_ARM) ? "timeout" : "lost",
609  ctl,
610  sl811_read(sl811, SL811_EP_B(SL11H_PKTSTATREG)));
611  irqstat |= SL11H_INTMASK_DONE_A;
612  }
613 #endif
614  return irqstat;
615 }
616 
617 static irqreturn_t sl811h_irq(struct usb_hcd *hcd)
618 {
619  struct sl811 *sl811 = hcd_to_sl811(hcd);
620  u8 irqstat;
622  unsigned retries = 5;
623 
624  spin_lock(&sl811->lock);
625 
626 retry:
627  irqstat = sl811_read(sl811, SL11H_IRQ_STATUS) & ~SL11H_INTMASK_DP;
628  if (irqstat) {
629  sl811_write(sl811, SL11H_IRQ_STATUS, irqstat);
630  irqstat &= sl811->irq_enable;
631  }
632 
633 #ifdef QUIRK2
634  /* this may no longer be necessary ... */
635  if (irqstat == 0) {
636  irqstat = checkdone(sl811);
637  if (irqstat)
638  sl811->stat_lost++;
639  }
640 #endif
641 
642  /* USB packets, not necessarily handled in the order they're
643  * issued ... that's fine if they're different endpoints.
644  */
645  if (irqstat & SL11H_INTMASK_DONE_A) {
646  done(sl811, sl811->active_a, SL811_EP_A(SL811_HOST_BUF));
647  sl811->active_a = NULL;
648  sl811->stat_a++;
649  }
650 #ifdef USE_B
651  if (irqstat & SL11H_INTMASK_DONE_B) {
652  done(sl811, sl811->active_b, SL811_EP_B(SL811_HOST_BUF));
653  sl811->active_b = NULL;
654  sl811->stat_b++;
655  }
656 #endif
657  if (irqstat & SL11H_INTMASK_SOFINTR) {
658  unsigned index;
659 
660  index = sl811->frame++ % (PERIODIC_SIZE - 1);
661  sl811->stat_sof++;
662 
663  /* be graceful about almost-inevitable periodic schedule
664  * overruns: continue the previous frame's transfers iff
665  * this one has nothing scheduled.
666  */
667  if (sl811->next_periodic) {
668  // ERR("overrun to slot %d\n", index);
669  sl811->stat_overrun++;
670  }
671  if (sl811->periodic[index])
672  sl811->next_periodic = sl811->periodic[index];
673  }
674 
675  /* khubd manages debouncing and wakeup */
676  if (irqstat & SL11H_INTMASK_INSRMV) {
677  sl811->stat_insrmv++;
678 
679  /* most stats are reset for each VBUS session */
680  sl811->stat_wake = 0;
681  sl811->stat_sof = 0;
682  sl811->stat_a = 0;
683  sl811->stat_b = 0;
684  sl811->stat_lost = 0;
685 
686  sl811->ctrl1 = 0;
687  sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1);
688 
690  sl811_write(sl811, SL11H_IRQ_ENABLE, sl811->irq_enable);
691 
692  /* usbcore nukes other pending transactions on disconnect */
693  if (sl811->active_a) {
694  sl811_write(sl811, SL811_EP_A(SL11H_HOSTCTLREG), 0);
695  finish_request(sl811, sl811->active_a,
696  container_of(sl811->active_a
697  ->hep->urb_list.next,
698  struct urb, urb_list),
699  -ESHUTDOWN);
700  sl811->active_a = NULL;
701  }
702 #ifdef USE_B
703  if (sl811->active_b) {
704  sl811_write(sl811, SL811_EP_B(SL11H_HOSTCTLREG), 0);
705  finish_request(sl811, sl811->active_b,
706  container_of(sl811->active_b
707  ->hep->urb_list.next,
708  struct urb, urb_list),
709  NULL, -ESHUTDOWN);
710  sl811->active_b = NULL;
711  }
712 #endif
713 
714  /* port status seems weird until after reset, so
715  * force the reset and make khubd clean up later.
716  */
717  if (irqstat & SL11H_INTMASK_RD)
718  sl811->port1 &= ~USB_PORT_STAT_CONNECTION;
719  else
721 
722  sl811->port1 |= USB_PORT_STAT_C_CONNECTION << 16;
723 
724  } else if (irqstat & SL11H_INTMASK_RD) {
725  if (sl811->port1 & USB_PORT_STAT_SUSPEND) {
726  DBG("wakeup\n");
727  sl811->port1 |= USB_PORT_STAT_C_SUSPEND << 16;
728  sl811->stat_wake++;
729  } else
730  irqstat &= ~SL11H_INTMASK_RD;
731  }
732 
733  if (irqstat) {
734  if (sl811->port1 & USB_PORT_STAT_ENABLE)
735  start_transfer(sl811);
736  ret = IRQ_HANDLED;
737  if (retries--)
738  goto retry;
739  }
740 
741  if (sl811->periodic_count == 0 && list_empty(&sl811->async))
742  sofirq_off(sl811);
743  sl811_write(sl811, SL11H_IRQ_ENABLE, sl811->irq_enable);
744 
745  spin_unlock(&sl811->lock);
746 
747  return ret;
748 }
749 
750 /*-------------------------------------------------------------------------*/
751 
752 /* usb 1.1 says max 90% of a frame is available for periodic transfers.
753  * this driver doesn't promise that much since it's got to handle an
754  * IRQ per packet; irq handling latencies also use up that time.
755  *
756  * NOTE: the periodic schedule is a sparse tree, with the load for
757  * each branch minimized. see fig 3.5 in the OHCI spec for example.
758  */
759 #define MAX_PERIODIC_LOAD 500 /* out of 1000 usec */
760 
761 static int balance(struct sl811 *sl811, u16 period, u16 load)
762 {
763  int i, branch = -ENOSPC;
764 
765  /* search for the least loaded schedule branch of that period
766  * which has enough bandwidth left unreserved.
767  */
768  for (i = 0; i < period ; i++) {
769  if (branch < 0 || sl811->load[branch] > sl811->load[i]) {
770  int j;
771 
772  for (j = i; j < PERIODIC_SIZE; j += period) {
773  if ((sl811->load[j] + load)
775  break;
776  }
777  if (j < PERIODIC_SIZE)
778  continue;
779  branch = i;
780  }
781  }
782  return branch;
783 }
784 
785 /*-------------------------------------------------------------------------*/
786 
787 static int sl811h_urb_enqueue(
788  struct usb_hcd *hcd,
789  struct urb *urb,
790  gfp_t mem_flags
791 ) {
792  struct sl811 *sl811 = hcd_to_sl811(hcd);
793  struct usb_device *udev = urb->dev;
794  unsigned int pipe = urb->pipe;
795  int is_out = !usb_pipein(pipe);
796  int type = usb_pipetype(pipe);
797  int epnum = usb_pipeendpoint(pipe);
798  struct sl811h_ep *ep = NULL;
799  unsigned long flags;
800  int i;
801  int retval;
802  struct usb_host_endpoint *hep = urb->ep;
803 
804 #ifndef CONFIG_USB_SL811_HCD_ISO
805  if (type == PIPE_ISOCHRONOUS)
806  return -ENOSPC;
807 #endif
808 
809  /* avoid all allocations within spinlocks */
810  if (!hep->hcpriv) {
811  ep = kzalloc(sizeof *ep, mem_flags);
812  if (ep == NULL)
813  return -ENOMEM;
814  }
815 
816  spin_lock_irqsave(&sl811->lock, flags);
817 
818  /* don't submit to a dead or disabled port */
819  if (!(sl811->port1 & USB_PORT_STAT_ENABLE)
820  || !HC_IS_RUNNING(hcd->state)) {
821  retval = -ENODEV;
822  kfree(ep);
823  goto fail_not_linked;
824  }
825  retval = usb_hcd_link_urb_to_ep(hcd, urb);
826  if (retval) {
827  kfree(ep);
828  goto fail_not_linked;
829  }
830 
831  if (hep->hcpriv) {
832  kfree(ep);
833  ep = hep->hcpriv;
834  } else if (!ep) {
835  retval = -ENOMEM;
836  goto fail;
837 
838  } else {
839  INIT_LIST_HEAD(&ep->schedule);
840  ep->udev = udev;
841  ep->epnum = epnum;
842  ep->maxpacket = usb_maxpacket(udev, urb->pipe, is_out);
843  ep->defctrl = SL11H_HCTLMASK_ARM | SL11H_HCTLMASK_ENABLE;
844  usb_settoggle(udev, epnum, is_out, 0);
845 
846  if (type == PIPE_CONTROL)
847  ep->nextpid = USB_PID_SETUP;
848  else if (is_out)
849  ep->nextpid = USB_PID_OUT;
850  else
851  ep->nextpid = USB_PID_IN;
852 
853  if (ep->maxpacket > H_MAXPACKET) {
854  /* iso packets up to 240 bytes could work... */
855  DBG("dev %d ep%d maxpacket %d\n",
856  udev->devnum, epnum, ep->maxpacket);
857  retval = -EINVAL;
858  kfree(ep);
859  goto fail;
860  }
861 
862  if (udev->speed == USB_SPEED_LOW) {
863  /* send preamble for external hub? */
864  if (!(sl811->ctrl1 & SL11H_CTL1MASK_LSPD))
866  }
867  switch (type) {
868  case PIPE_ISOCHRONOUS:
869  case PIPE_INTERRUPT:
870  if (urb->interval > PERIODIC_SIZE)
871  urb->interval = PERIODIC_SIZE;
872  ep->period = urb->interval;
873  ep->branch = PERIODIC_SIZE;
874  if (type == PIPE_ISOCHRONOUS)
876  ep->load = usb_calc_bus_time(udev->speed, !is_out,
877  (type == PIPE_ISOCHRONOUS),
878  usb_maxpacket(udev, pipe, is_out))
879  / 1000;
880  break;
881  }
882 
883  ep->hep = hep;
884  hep->hcpriv = ep;
885  }
886 
887  /* maybe put endpoint into schedule */
888  switch (type) {
889  case PIPE_CONTROL:
890  case PIPE_BULK:
891  if (list_empty(&ep->schedule))
892  list_add_tail(&ep->schedule, &sl811->async);
893  break;
894  case PIPE_ISOCHRONOUS:
895  case PIPE_INTERRUPT:
896  urb->interval = ep->period;
897  if (ep->branch < PERIODIC_SIZE) {
898  /* NOTE: the phase is correct here, but the value
899  * needs offsetting by the transfer queue depth.
900  * All current drivers ignore start_frame, so this
901  * is unlikely to ever matter...
902  */
903  urb->start_frame = (sl811->frame & (PERIODIC_SIZE - 1))
904  + ep->branch;
905  break;
906  }
907 
908  retval = balance(sl811, ep->period, ep->load);
909  if (retval < 0)
910  goto fail;
911  ep->branch = retval;
912  retval = 0;
913  urb->start_frame = (sl811->frame & (PERIODIC_SIZE - 1))
914  + ep->branch;
915 
916  /* sort each schedule branch by period (slow before fast)
917  * to share the faster parts of the tree without needing
918  * dummy/placeholder nodes
919  */
920  DBG("schedule qh%d/%p branch %d\n", ep->period, ep, ep->branch);
921  for (i = ep->branch; i < PERIODIC_SIZE; i += ep->period) {
922  struct sl811h_ep **prev = &sl811->periodic[i];
923  struct sl811h_ep *here = *prev;
924 
925  while (here && ep != here) {
926  if (ep->period > here->period)
927  break;
928  prev = &here->next;
929  here = *prev;
930  }
931  if (ep != here) {
932  ep->next = here;
933  *prev = ep;
934  }
935  sl811->load[i] += ep->load;
936  }
937  sl811->periodic_count++;
938  hcd->self.bandwidth_allocated += ep->load / ep->period;
939  sofirq_on(sl811);
940  }
941 
942  urb->hcpriv = hep;
943  start_transfer(sl811);
944  sl811_write(sl811, SL11H_IRQ_ENABLE, sl811->irq_enable);
945 fail:
946  if (retval)
947  usb_hcd_unlink_urb_from_ep(hcd, urb);
948 fail_not_linked:
949  spin_unlock_irqrestore(&sl811->lock, flags);
950  return retval;
951 }
952 
953 static int sl811h_urb_dequeue(struct usb_hcd *hcd, struct urb *urb, int status)
954 {
955  struct sl811 *sl811 = hcd_to_sl811(hcd);
956  struct usb_host_endpoint *hep;
957  unsigned long flags;
958  struct sl811h_ep *ep;
959  int retval;
960 
961  spin_lock_irqsave(&sl811->lock, flags);
962  retval = usb_hcd_check_unlink_urb(hcd, urb, status);
963  if (retval)
964  goto fail;
965 
966  hep = urb->hcpriv;
967  ep = hep->hcpriv;
968  if (ep) {
969  /* finish right away if this urb can't be active ...
970  * note that some drivers wrongly expect delays
971  */
972  if (ep->hep->urb_list.next != &urb->urb_list) {
973  /* not front of queue? never active */
974 
975  /* for active transfers, we expect an IRQ */
976  } else if (sl811->active_a == ep) {
977  if (time_before_eq(sl811->jiffies_a, jiffies)) {
978  /* happens a lot with lowspeed?? */
979  DBG("giveup on DONE_A: ctrl %02x sts %02x\n",
980  sl811_read(sl811,
982  sl811_read(sl811,
984  sl811_write(sl811, SL811_EP_A(SL11H_HOSTCTLREG),
985  0);
986  sl811->active_a = NULL;
987  } else
988  urb = NULL;
989 #ifdef USE_B
990  } else if (sl811->active_b == ep) {
991  if (time_before_eq(sl811->jiffies_a, jiffies)) {
992  /* happens a lot with lowspeed?? */
993  DBG("giveup on DONE_B: ctrl %02x sts %02x\n",
994  sl811_read(sl811,
996  sl811_read(sl811,
998  sl811_write(sl811, SL811_EP_B(SL11H_HOSTCTLREG),
999  0);
1000  sl811->active_b = NULL;
1001  } else
1002  urb = NULL;
1003 #endif
1004  } else {
1005  /* front of queue for inactive endpoint */
1006  }
1007 
1008  if (urb)
1009  finish_request(sl811, ep, urb, 0);
1010  else
1011  VDBG("dequeue, urb %p active %s; wait4irq\n", urb,
1012  (sl811->active_a == ep) ? "A" : "B");
1013  } else
1014  retval = -EINVAL;
1015  fail:
1016  spin_unlock_irqrestore(&sl811->lock, flags);
1017  return retval;
1018 }
1019 
1020 static void
1021 sl811h_endpoint_disable(struct usb_hcd *hcd, struct usb_host_endpoint *hep)
1022 {
1023  struct sl811h_ep *ep = hep->hcpriv;
1024 
1025  if (!ep)
1026  return;
1027 
1028  /* assume we'd just wait for the irq */
1029  if (!list_empty(&hep->urb_list))
1030  msleep(3);
1031  if (!list_empty(&hep->urb_list))
1032  WARNING("ep %p not empty?\n", ep);
1033 
1034  kfree(ep);
1035  hep->hcpriv = NULL;
1036 }
1037 
1038 static int
1039 sl811h_get_frame(struct usb_hcd *hcd)
1040 {
1041  struct sl811 *sl811 = hcd_to_sl811(hcd);
1042 
1043  /* wrong except while periodic transfers are scheduled;
1044  * never matches the on-the-wire frame;
1045  * subject to overruns.
1046  */
1047  return sl811->frame;
1048 }
1049 
1050 
1051 /*-------------------------------------------------------------------------*/
1052 
1053 /* the virtual root hub timer IRQ checks for hub status */
1054 static int
1055 sl811h_hub_status_data(struct usb_hcd *hcd, char *buf)
1056 {
1057  struct sl811 *sl811 = hcd_to_sl811(hcd);
1058 #ifdef QUIRK3
1059  unsigned long flags;
1060 
1061  /* non-SMP HACK: use root hub timer as i/o watchdog
1062  * this seems essential when SOF IRQs aren't in use...
1063  */
1064  local_irq_save(flags);
1065  if (!timer_pending(&sl811->timer)) {
1066  if (sl811h_irq( /* ~0, */ hcd) != IRQ_NONE)
1067  sl811->stat_lost++;
1068  }
1069  local_irq_restore(flags);
1070 #endif
1071 
1072  if (!(sl811->port1 & (0xffff << 16)))
1073  return 0;
1074 
1075  /* tell khubd port 1 changed */
1076  *buf = (1 << 1);
1077  return 1;
1078 }
1079 
1080 static void
1081 sl811h_hub_descriptor (
1082  struct sl811 *sl811,
1083  struct usb_hub_descriptor *desc
1084 ) {
1085  u16 temp = 0;
1086 
1087  desc->bDescriptorType = 0x29;
1088  desc->bHubContrCurrent = 0;
1089 
1090  desc->bNbrPorts = 1;
1091  desc->bDescLength = 9;
1092 
1093  /* per-port power switching (gang of one!), or none */
1094  desc->bPwrOn2PwrGood = 0;
1095  if (sl811->board && sl811->board->port_power) {
1096  desc->bPwrOn2PwrGood = sl811->board->potpg;
1097  if (!desc->bPwrOn2PwrGood)
1098  desc->bPwrOn2PwrGood = 10;
1099  temp = 0x0001;
1100  } else
1101  temp = 0x0002;
1102 
1103  /* no overcurrent errors detection/handling */
1104  temp |= 0x0010;
1105 
1106  desc->wHubCharacteristics = cpu_to_le16(temp);
1107 
1108  /* ports removable, and legacy PortPwrCtrlMask */
1109  desc->u.hs.DeviceRemovable[0] = 0 << 1;
1110  desc->u.hs.DeviceRemovable[1] = ~0;
1111 }
1112 
1113 static void
1114 sl811h_timer(unsigned long _sl811)
1115 {
1116  struct sl811 *sl811 = (void *) _sl811;
1117  unsigned long flags;
1118  u8 irqstat;
1119  u8 signaling = sl811->ctrl1 & SL11H_CTL1MASK_FORCE;
1123 
1124  spin_lock_irqsave(&sl811->lock, flags);
1125 
1126  /* stop special signaling */
1127  sl811->ctrl1 &= ~SL11H_CTL1MASK_FORCE;
1128  sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1);
1129  udelay(3);
1130 
1131  irqstat = sl811_read(sl811, SL11H_IRQ_STATUS);
1132 
1133  switch (signaling) {
1134  case SL11H_CTL1MASK_SE0:
1135  DBG("end reset\n");
1136  sl811->port1 = (USB_PORT_STAT_C_RESET << 16)
1138  sl811->ctrl1 = 0;
1139  /* don't wrongly ack RD */
1140  if (irqstat & SL11H_INTMASK_INSRMV)
1141  irqstat &= ~SL11H_INTMASK_RD;
1142  break;
1143  case SL11H_CTL1MASK_K:
1144  DBG("end resume\n");
1145  sl811->port1 &= ~USB_PORT_STAT_SUSPEND;
1146  break;
1147  default:
1148  DBG("odd timer signaling: %02x\n", signaling);
1149  break;
1150  }
1151  sl811_write(sl811, SL11H_IRQ_STATUS, irqstat);
1152 
1153  if (irqstat & SL11H_INTMASK_RD) {
1154  /* usbcore nukes all pending transactions on disconnect */
1155  if (sl811->port1 & USB_PORT_STAT_CONNECTION)
1156  sl811->port1 |= (USB_PORT_STAT_C_CONNECTION << 16)
1157  | (USB_PORT_STAT_C_ENABLE << 16);
1158  sl811->port1 &= ~mask;
1160  } else {
1161  sl811->port1 |= mask;
1162  if (irqstat & SL11H_INTMASK_DP)
1163  sl811->port1 &= ~USB_PORT_STAT_LOW_SPEED;
1164  sl811->irq_enable = SL11H_INTMASK_INSRMV | SL11H_INTMASK_RD;
1165  }
1166 
1167  if (sl811->port1 & USB_PORT_STAT_CONNECTION) {
1169 
1170  sl811->irq_enable |= SL11H_INTMASK_DONE_A;
1171 #ifdef USE_B
1172  sl811->irq_enable |= SL11H_INTMASK_DONE_B;
1173 #endif
1174  if (sl811->port1 & USB_PORT_STAT_LOW_SPEED) {
1175  sl811->ctrl1 |= SL11H_CTL1MASK_LSPD;
1176  ctrl2 |= SL811HS_CTL2MASK_DSWAP;
1177  }
1178 
1179  /* start SOFs flowing, kickstarting with A registers */
1180  sl811->ctrl1 |= SL11H_CTL1MASK_SOF_ENA;
1181  sl811_write(sl811, SL11H_SOFLOWREG, 0xe0);
1182  sl811_write(sl811, SL811HS_CTLREG2, ctrl2);
1183 
1184  /* autoincrementing */
1185  sl811_write(sl811, SL811_EP_A(SL11H_BUFLNTHREG), 0);
1186  writeb(SL_SOF, sl811->data_reg);
1187  writeb(0, sl811->data_reg);
1188  sl811_write(sl811, SL811_EP_A(SL11H_HOSTCTLREG),
1189  SL11H_HCTLMASK_ARM);
1190 
1191  /* khubd provides debounce delay */
1192  } else {
1193  sl811->ctrl1 = 0;
1194  }
1195  sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1);
1196 
1197  /* reenable irqs */
1198  sl811_write(sl811, SL11H_IRQ_ENABLE, sl811->irq_enable);
1199  spin_unlock_irqrestore(&sl811->lock, flags);
1200 }
1201 
1202 static int
1203 sl811h_hub_control(
1204  struct usb_hcd *hcd,
1205  u16 typeReq,
1206  u16 wValue,
1207  u16 wIndex,
1208  char *buf,
1209  u16 wLength
1210 ) {
1211  struct sl811 *sl811 = hcd_to_sl811(hcd);
1212  int retval = 0;
1213  unsigned long flags;
1214 
1215  spin_lock_irqsave(&sl811->lock, flags);
1216 
1217  switch (typeReq) {
1218  case ClearHubFeature:
1219  case SetHubFeature:
1220  switch (wValue) {
1221  case C_HUB_OVER_CURRENT:
1222  case C_HUB_LOCAL_POWER:
1223  break;
1224  default:
1225  goto error;
1226  }
1227  break;
1228  case ClearPortFeature:
1229  if (wIndex != 1 || wLength != 0)
1230  goto error;
1231 
1232  switch (wValue) {
1233  case USB_PORT_FEAT_ENABLE:
1234  sl811->port1 &= USB_PORT_STAT_POWER;
1235  sl811->ctrl1 = 0;
1236  sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1);
1238  sl811_write(sl811, SL11H_IRQ_ENABLE,
1239  sl811->irq_enable);
1240  break;
1241  case USB_PORT_FEAT_SUSPEND:
1242  if (!(sl811->port1 & USB_PORT_STAT_SUSPEND))
1243  break;
1244 
1245  /* 20 msec of resume/K signaling, other irqs blocked */
1246  DBG("start resume...\n");
1247  sl811->irq_enable = 0;
1248  sl811_write(sl811, SL11H_IRQ_ENABLE,
1249  sl811->irq_enable);
1250  sl811->ctrl1 |= SL11H_CTL1MASK_K;
1251  sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1);
1252 
1253  mod_timer(&sl811->timer, jiffies
1254  + msecs_to_jiffies(20));
1255  break;
1256  case USB_PORT_FEAT_POWER:
1257  port_power(sl811, 0);
1258  break;
1263  case USB_PORT_FEAT_C_RESET:
1264  break;
1265  default:
1266  goto error;
1267  }
1268  sl811->port1 &= ~(1 << wValue);
1269  break;
1270  case GetHubDescriptor:
1271  sl811h_hub_descriptor(sl811, (struct usb_hub_descriptor *) buf);
1272  break;
1273  case GetHubStatus:
1274  put_unaligned_le32(0, buf);
1275  break;
1276  case GetPortStatus:
1277  if (wIndex != 1)
1278  goto error;
1279  put_unaligned_le32(sl811->port1, buf);
1280 
1281 #ifndef VERBOSE
1282  if (*(u16*)(buf+2)) /* only if wPortChange is interesting */
1283 #endif
1284  DBG("GetPortStatus %08x\n", sl811->port1);
1285  break;
1286  case SetPortFeature:
1287  if (wIndex != 1 || wLength != 0)
1288  goto error;
1289  switch (wValue) {
1290  case USB_PORT_FEAT_SUSPEND:
1291  if (sl811->port1 & USB_PORT_STAT_RESET)
1292  goto error;
1293  if (!(sl811->port1 & USB_PORT_STAT_ENABLE))
1294  goto error;
1295 
1296  DBG("suspend...\n");
1297  sl811->ctrl1 &= ~SL11H_CTL1MASK_SOF_ENA;
1298  sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1);
1299  break;
1300  case USB_PORT_FEAT_POWER:
1301  port_power(sl811, 1);
1302  break;
1303  case USB_PORT_FEAT_RESET:
1304  if (sl811->port1 & USB_PORT_STAT_SUSPEND)
1305  goto error;
1306  if (!(sl811->port1 & USB_PORT_STAT_POWER))
1307  break;
1308 
1309  /* 50 msec of reset/SE0 signaling, irqs blocked */
1310  sl811->irq_enable = 0;
1311  sl811_write(sl811, SL11H_IRQ_ENABLE,
1312  sl811->irq_enable);
1313  sl811->ctrl1 = SL11H_CTL1MASK_SE0;
1314  sl811_write(sl811, SL11H_CTLREG1, sl811->ctrl1);
1315  sl811->port1 |= USB_PORT_STAT_RESET;
1316  mod_timer(&sl811->timer, jiffies
1317  + msecs_to_jiffies(50));
1318  break;
1319  default:
1320  goto error;
1321  }
1322  sl811->port1 |= 1 << wValue;
1323  break;
1324 
1325  default:
1326 error:
1327  /* "protocol stall" on error */
1328  retval = -EPIPE;
1329  }
1330 
1331  spin_unlock_irqrestore(&sl811->lock, flags);
1332  return retval;
1333 }
1334 
1335 #ifdef CONFIG_PM
1336 
1337 static int
1338 sl811h_bus_suspend(struct usb_hcd *hcd)
1339 {
1340  // SOFs off
1341  DBG("%s\n", __func__);
1342  return 0;
1343 }
1344 
1345 static int
1346 sl811h_bus_resume(struct usb_hcd *hcd)
1347 {
1348  // SOFs on
1349  DBG("%s\n", __func__);
1350  return 0;
1351 }
1352 
1353 #else
1354 
1355 #define sl811h_bus_suspend NULL
1356 #define sl811h_bus_resume NULL
1357 
1358 #endif
1359 
1360 
1361 /*-------------------------------------------------------------------------*/
1362 
1363 #ifdef STUB_DEBUG_FILE
1364 
1365 static inline void create_debug_file(struct sl811 *sl811) { }
1366 static inline void remove_debug_file(struct sl811 *sl811) { }
1367 
1368 #else
1369 
1370 #include <linux/proc_fs.h>
1371 #include <linux/seq_file.h>
1372 
1373 static void dump_irq(struct seq_file *s, char *label, u8 mask)
1374 {
1375  seq_printf(s, "%s %02x%s%s%s%s%s%s\n", label, mask,
1376  (mask & SL11H_INTMASK_DONE_A) ? " done_a" : "",
1377  (mask & SL11H_INTMASK_DONE_B) ? " done_b" : "",
1378  (mask & SL11H_INTMASK_SOFINTR) ? " sof" : "",
1379  (mask & SL11H_INTMASK_INSRMV) ? " ins/rmv" : "",
1380  (mask & SL11H_INTMASK_RD) ? " rd" : "",
1381  (mask & SL11H_INTMASK_DP) ? " dp" : "");
1382 }
1383 
1384 static int proc_sl811h_show(struct seq_file *s, void *unused)
1385 {
1386  struct sl811 *sl811 = s->private;
1387  struct sl811h_ep *ep;
1388  unsigned i;
1389 
1390  seq_printf(s, "%s\n%s version %s\nportstatus[1] = %08x\n",
1391  sl811_to_hcd(sl811)->product_desc,
1392  hcd_name, DRIVER_VERSION,
1393  sl811->port1);
1394 
1395  seq_printf(s, "insert/remove: %ld\n", sl811->stat_insrmv);
1396  seq_printf(s, "current session: done_a %ld done_b %ld "
1397  "wake %ld sof %ld overrun %ld lost %ld\n\n",
1398  sl811->stat_a, sl811->stat_b,
1399  sl811->stat_wake, sl811->stat_sof,
1400  sl811->stat_overrun, sl811->stat_lost);
1401 
1402  spin_lock_irq(&sl811->lock);
1403 
1404  if (sl811->ctrl1 & SL11H_CTL1MASK_SUSPEND)
1405  seq_printf(s, "(suspended)\n\n");
1406  else {
1407  u8 t = sl811_read(sl811, SL11H_CTLREG1);
1408 
1409  seq_printf(s, "ctrl1 %02x%s%s%s%s\n", t,
1410  (t & SL11H_CTL1MASK_SOF_ENA) ? " sofgen" : "",
1411  ({char *s; switch (t & SL11H_CTL1MASK_FORCE) {
1412  case SL11H_CTL1MASK_NORMAL: s = ""; break;
1413  case SL11H_CTL1MASK_SE0: s = " se0/reset"; break;
1414  case SL11H_CTL1MASK_K: s = " k/resume"; break;
1415  default: s = "j"; break;
1416  }; s; }),
1417  (t & SL11H_CTL1MASK_LSPD) ? " lowspeed" : "",
1418  (t & SL11H_CTL1MASK_SUSPEND) ? " suspend" : "");
1419 
1420  dump_irq(s, "irq_enable",
1421  sl811_read(sl811, SL11H_IRQ_ENABLE));
1422  dump_irq(s, "irq_status",
1423  sl811_read(sl811, SL11H_IRQ_STATUS));
1424  seq_printf(s, "frame clocks remaining: %d\n",
1425  sl811_read(sl811, SL11H_SOFTMRREG) << 6);
1426  }
1427 
1428  seq_printf(s, "A: qh%p ctl %02x sts %02x\n", sl811->active_a,
1429  sl811_read(sl811, SL811_EP_A(SL11H_HOSTCTLREG)),
1430  sl811_read(sl811, SL811_EP_A(SL11H_PKTSTATREG)));
1431  seq_printf(s, "B: qh%p ctl %02x sts %02x\n", sl811->active_b,
1432  sl811_read(sl811, SL811_EP_B(SL11H_HOSTCTLREG)),
1433  sl811_read(sl811, SL811_EP_B(SL11H_PKTSTATREG)));
1434  seq_printf(s, "\n");
1435  list_for_each_entry (ep, &sl811->async, schedule) {
1436  struct urb *urb;
1437 
1438  seq_printf(s, "%s%sqh%p, ep%d%s, maxpacket %d"
1439  " nak %d err %d\n",
1440  (ep == sl811->active_a) ? "(A) " : "",
1441  (ep == sl811->active_b) ? "(B) " : "",
1442  ep, ep->epnum,
1443  ({ char *s; switch (ep->nextpid) {
1444  case USB_PID_IN: s = "in"; break;
1445  case USB_PID_OUT: s = "out"; break;
1446  case USB_PID_SETUP: s = "setup"; break;
1447  case USB_PID_ACK: s = "status"; break;
1448  default: s = "?"; break;
1449  }; s;}),
1450  ep->maxpacket,
1451  ep->nak_count, ep->error_count);
1452  list_for_each_entry (urb, &ep->hep->urb_list, urb_list) {
1453  seq_printf(s, " urb%p, %d/%d\n", urb,
1454  urb->actual_length,
1455  urb->transfer_buffer_length);
1456  }
1457  }
1458  if (!list_empty(&sl811->async))
1459  seq_printf(s, "\n");
1460 
1461  seq_printf(s, "periodic size= %d\n", PERIODIC_SIZE);
1462 
1463  for (i = 0; i < PERIODIC_SIZE; i++) {
1464  ep = sl811->periodic[i];
1465  if (!ep)
1466  continue;
1467  seq_printf(s, "%2d [%3d]:\n", i, sl811->load[i]);
1468 
1469  /* DUMB: prints shared entries multiple times */
1470  do {
1471  seq_printf(s,
1472  " %s%sqh%d/%p (%sdev%d ep%d%s max %d) "
1473  "err %d\n",
1474  (ep == sl811->active_a) ? "(A) " : "",
1475  (ep == sl811->active_b) ? "(B) " : "",
1476  ep->period, ep,
1477  (ep->udev->speed == USB_SPEED_FULL)
1478  ? "" : "ls ",
1479  ep->udev->devnum, ep->epnum,
1480  (ep->epnum == 0) ? ""
1481  : ((ep->nextpid == USB_PID_IN)
1482  ? "in"
1483  : "out"),
1484  ep->maxpacket, ep->error_count);
1485  ep = ep->next;
1486  } while (ep);
1487  }
1488 
1489  spin_unlock_irq(&sl811->lock);
1490  seq_printf(s, "\n");
1491 
1492  return 0;
1493 }
1494 
1495 static int proc_sl811h_open(struct inode *inode, struct file *file)
1496 {
1497  return single_open(file, proc_sl811h_show, PDE(inode)->data);
1498 }
1499 
1500 static const struct file_operations proc_ops = {
1501  .open = proc_sl811h_open,
1502  .read = seq_read,
1503  .llseek = seq_lseek,
1504  .release = single_release,
1505 };
1506 
1507 /* expect just one sl811 per system */
1508 static const char proc_filename[] = "driver/sl811h";
1509 
1510 static void create_debug_file(struct sl811 *sl811)
1511 {
1512  sl811->pde = proc_create_data(proc_filename, 0, NULL, &proc_ops, sl811);
1513 }
1514 
1515 static void remove_debug_file(struct sl811 *sl811)
1516 {
1517  if (sl811->pde)
1518  remove_proc_entry(proc_filename, NULL);
1519 }
1520 
1521 #endif
1522 
1523 /*-------------------------------------------------------------------------*/
1524 
1525 static void
1526 sl811h_stop(struct usb_hcd *hcd)
1527 {
1528  struct sl811 *sl811 = hcd_to_sl811(hcd);
1529  unsigned long flags;
1530 
1531  del_timer_sync(&hcd->rh_timer);
1532 
1533  spin_lock_irqsave(&sl811->lock, flags);
1534  port_power(sl811, 0);
1535  spin_unlock_irqrestore(&sl811->lock, flags);
1536 }
1537 
1538 static int
1539 sl811h_start(struct usb_hcd *hcd)
1540 {
1541  struct sl811 *sl811 = hcd_to_sl811(hcd);
1542 
1543  /* chip has been reset, VBUS power is off */
1544  hcd->state = HC_STATE_RUNNING;
1545 
1546  if (sl811->board) {
1547  if (!device_can_wakeup(hcd->self.controller))
1548  device_init_wakeup(hcd->self.controller,
1549  sl811->board->can_wakeup);
1550  hcd->power_budget = sl811->board->power * 2;
1551  }
1552 
1553  /* enable power and interrupts */
1554  port_power(sl811, 1);
1555 
1556  return 0;
1557 }
1558 
1559 /*-------------------------------------------------------------------------*/
1560 
1561 static struct hc_driver sl811h_hc_driver = {
1562  .description = hcd_name,
1563  .hcd_priv_size = sizeof(struct sl811),
1564 
1565  /*
1566  * generic hardware linkage
1567  */
1568  .irq = sl811h_irq,
1569  .flags = HCD_USB11 | HCD_MEMORY,
1570 
1571  /* Basic lifecycle operations */
1572  .start = sl811h_start,
1573  .stop = sl811h_stop,
1574 
1575  /*
1576  * managing i/o requests and associated device resources
1577  */
1578  .urb_enqueue = sl811h_urb_enqueue,
1579  .urb_dequeue = sl811h_urb_dequeue,
1580  .endpoint_disable = sl811h_endpoint_disable,
1581 
1582  /*
1583  * periodic schedule support
1584  */
1585  .get_frame_number = sl811h_get_frame,
1586 
1587  /*
1588  * root hub support
1589  */
1590  .hub_status_data = sl811h_hub_status_data,
1591  .hub_control = sl811h_hub_control,
1592  .bus_suspend = sl811h_bus_suspend,
1593  .bus_resume = sl811h_bus_resume,
1594 };
1595 
1596 /*-------------------------------------------------------------------------*/
1597 
1598 static int __devexit
1599 sl811h_remove(struct platform_device *dev)
1600 {
1601  struct usb_hcd *hcd = platform_get_drvdata(dev);
1602  struct sl811 *sl811 = hcd_to_sl811(hcd);
1603  struct resource *res;
1604 
1605  remove_debug_file(sl811);
1606  usb_remove_hcd(hcd);
1607 
1608  /* some platforms may use IORESOURCE_IO */
1609  res = platform_get_resource(dev, IORESOURCE_MEM, 1);
1610  if (res)
1611  iounmap(sl811->data_reg);
1612 
1613  res = platform_get_resource(dev, IORESOURCE_MEM, 0);
1614  if (res)
1615  iounmap(sl811->addr_reg);
1616 
1617  usb_put_hcd(hcd);
1618  return 0;
1619 }
1620 
1621 static int __devinit
1622 sl811h_probe(struct platform_device *dev)
1623 {
1624  struct usb_hcd *hcd;
1625  struct sl811 *sl811;
1626  struct resource *addr, *data, *ires;
1627  int irq;
1628  void __iomem *addr_reg;
1629  void __iomem *data_reg;
1630  int retval;
1631  u8 tmp, ioaddr = 0;
1632  unsigned long irqflags;
1633 
1634  if (usb_disabled())
1635  return -ENODEV;
1636 
1637  /* basic sanity checks first. board-specific init logic should
1638  * have initialized these three resources and probably board
1639  * specific platform_data. we don't probe for IRQs, and do only
1640  * minimal sanity checking.
1641  */
1642  ires = platform_get_resource(dev, IORESOURCE_IRQ, 0);
1643  if (dev->num_resources < 3 || !ires)
1644  return -ENODEV;
1645 
1646  irq = ires->start;
1647  irqflags = ires->flags & IRQF_TRIGGER_MASK;
1648 
1649  /* refuse to confuse usbcore */
1650  if (dev->dev.dma_mask) {
1651  DBG("no we won't dma\n");
1652  return -EINVAL;
1653  }
1654 
1655  /* the chip may be wired for either kind of addressing */
1656  addr = platform_get_resource(dev, IORESOURCE_MEM, 0);
1657  data = platform_get_resource(dev, IORESOURCE_MEM, 1);
1658  retval = -EBUSY;
1659  if (!addr || !data) {
1660  addr = platform_get_resource(dev, IORESOURCE_IO, 0);
1661  data = platform_get_resource(dev, IORESOURCE_IO, 1);
1662  if (!addr || !data)
1663  return -ENODEV;
1664  ioaddr = 1;
1665  /*
1666  * NOTE: 64-bit resource->start is getting truncated
1667  * to avoid compiler warning, assuming that ->start
1668  * is always 32-bit for this case
1669  */
1670  addr_reg = (void __iomem *) (unsigned long) addr->start;
1671  data_reg = (void __iomem *) (unsigned long) data->start;
1672  } else {
1673  addr_reg = ioremap(addr->start, 1);
1674  if (addr_reg == NULL) {
1675  retval = -ENOMEM;
1676  goto err2;
1677  }
1678 
1679  data_reg = ioremap(data->start, 1);
1680  if (data_reg == NULL) {
1681  retval = -ENOMEM;
1682  goto err4;
1683  }
1684  }
1685 
1686  /* allocate and initialize hcd */
1687  hcd = usb_create_hcd(&sl811h_hc_driver, &dev->dev, dev_name(&dev->dev));
1688  if (!hcd) {
1689  retval = -ENOMEM;
1690  goto err5;
1691  }
1692  hcd->rsrc_start = addr->start;
1693  sl811 = hcd_to_sl811(hcd);
1694 
1695  spin_lock_init(&sl811->lock);
1696  INIT_LIST_HEAD(&sl811->async);
1697  sl811->board = dev->dev.platform_data;
1698  init_timer(&sl811->timer);
1699  sl811->timer.function = sl811h_timer;
1700  sl811->timer.data = (unsigned long) sl811;
1701  sl811->addr_reg = addr_reg;
1702  sl811->data_reg = data_reg;
1703 
1704  spin_lock_irq(&sl811->lock);
1705  port_power(sl811, 0);
1706  spin_unlock_irq(&sl811->lock);
1707  msleep(200);
1708 
1709  tmp = sl811_read(sl811, SL11H_HWREVREG);
1710  switch (tmp >> 4) {
1711  case 1:
1712  hcd->product_desc = "SL811HS v1.2";
1713  break;
1714  case 2:
1715  hcd->product_desc = "SL811HS v1.5";
1716  break;
1717  default:
1718  /* reject case 0, SL11S is less functional */
1719  DBG("chiprev %02x\n", tmp);
1720  retval = -ENXIO;
1721  goto err6;
1722  }
1723 
1724  /* The chip's IRQ is level triggered, active high. A requirement
1725  * for platform device setup is to cope with things like signal
1726  * inverters (e.g. CF is active low) or working only with edge
1727  * triggers (e.g. most ARM CPUs). Initial driver stress testing
1728  * was on a system with single edge triggering, so most sorts of
1729  * triggering arrangement should work.
1730  *
1731  * Use resource IRQ flags if set by platform device setup.
1732  */
1733  irqflags |= IRQF_SHARED;
1734  retval = usb_add_hcd(hcd, irq, irqflags);
1735  if (retval != 0)
1736  goto err6;
1737 
1738  create_debug_file(sl811);
1739  return retval;
1740 
1741  err6:
1742  usb_put_hcd(hcd);
1743  err5:
1744  if (!ioaddr)
1745  iounmap(data_reg);
1746  err4:
1747  if (!ioaddr)
1748  iounmap(addr_reg);
1749  err2:
1750  DBG("init error, %d\n", retval);
1751  return retval;
1752 }
1753 
1754 #ifdef CONFIG_PM
1755 
1756 /* for this device there's no useful distinction between the controller
1757  * and its root hub, except that the root hub only gets direct PM calls
1758  * when CONFIG_USB_SUSPEND is enabled.
1759  */
1760 
1761 static int
1763 {
1764  struct usb_hcd *hcd = platform_get_drvdata(dev);
1765  struct sl811 *sl811 = hcd_to_sl811(hcd);
1766  int retval = 0;
1767 
1768  switch (state.event) {
1769  case PM_EVENT_FREEZE:
1770  retval = sl811h_bus_suspend(hcd);
1771  break;
1772  case PM_EVENT_SUSPEND:
1773  case PM_EVENT_HIBERNATE:
1774  case PM_EVENT_PRETHAW: /* explicitly discard hw state */
1775  port_power(sl811, 0);
1776  break;
1777  }
1778  return retval;
1779 }
1780 
1781 static int
1782 sl811h_resume(struct platform_device *dev)
1783 {
1784  struct usb_hcd *hcd = platform_get_drvdata(dev);
1785  struct sl811 *sl811 = hcd_to_sl811(hcd);
1786 
1787  /* with no "check to see if VBUS is still powered" board hook,
1788  * let's assume it'd only be powered to enable remote wakeup.
1789  */
1790  if (!sl811->port1 || !device_can_wakeup(&hcd->self.root_hub->dev)) {
1791  sl811->port1 = 0;
1792  port_power(sl811, 1);
1793  usb_root_hub_lost_power(hcd->self.root_hub);
1794  return 0;
1795  }
1796 
1797  return sl811h_bus_resume(hcd);
1798 }
1799 
1800 #else
1801 
1802 #define sl811h_suspend NULL
1803 #define sl811h_resume NULL
1804 
1805 #endif
1806 
1807 
1808 /* this driver is exported so sl811_cs can depend on it */
1810  .probe = sl811h_probe,
1811  .remove = __devexit_p(sl811h_remove),
1812 
1813  .suspend = sl811h_suspend,
1814  .resume = sl811h_resume,
1815  .driver = {
1816  .name = (char *) hcd_name,
1817  .owner = THIS_MODULE,
1818  },
1819 };
1820 EXPORT_SYMBOL(sl811h_driver);
1821 
1822 module_platform_driver(sl811h_driver);