Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.8.
   1/*
   2 * WUSB Wire Adapter
   3 * Data transfer and URB enqueing
   4 *
   5 * Copyright (C) 2005-2006 Intel Corporation
   6 * Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
   7 *
   8 * This program is free software; you can redistribute it and/or
   9 * modify it under the terms of the GNU General Public License version
  10 * 2 as published by the Free Software Foundation.
  11 *
  12 * This program is distributed in the hope that it will be useful,
  13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15 * GNU General Public License for more details.
  16 *
  17 * You should have received a copy of the GNU General Public License
  18 * along with this program; if not, write to the Free Software
  19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  20 * 02110-1301, USA.
  21 *
  22 *
  23 * How transfers work: get a buffer, break it up in segments (segment
  24 * size is a multiple of the maxpacket size). For each segment issue a
  25 * segment request (struct wa_xfer_*), then send the data buffer if
  26 * out or nothing if in (all over the DTO endpoint).
  27 *
  28 * For each submitted segment request, a notification will come over
  29 * the NEP endpoint and a transfer result (struct xfer_result) will
  30 * arrive in the DTI URB. Read it, get the xfer ID, see if there is
  31 * data coming (inbound transfer), schedule a read and handle it.
  32 *
  33 * Sounds simple, it is a pain to implement.
  34 *
  35 *
  36 * ENTRY POINTS
  37 *
  38 *   FIXME
  39 *
  40 * LIFE CYCLE / STATE DIAGRAM
  41 *
  42 *   FIXME
  43 *
  44 * THIS CODE IS DISGUSTING
  45 *
  46 *   Warned you are; it's my second try and still not happy with it.
  47 *
  48 * NOTES:
  49 *
  50 *   - No iso
  51 *
  52 *   - Supports DMA xfers, control, bulk and maybe interrupt
  53 *
  54 *   - Does not recycle unused rpipes
  55 *
  56 *     An rpipe is assigned to an endpoint the first time it is used,
  57 *     and then it's there, assigned, until the endpoint is disabled
  58 *     (destroyed [{h,d}wahc_op_ep_disable()]. The assignment of the
  59 *     rpipe to the endpoint is done under the wa->rpipe_sem semaphore
  60 *     (should be a mutex).
  61 *
  62 *     Two methods it could be done:
  63 *
  64 *     (a) set up a timer every time an rpipe's use count drops to 1
  65 *         (which means unused) or when a transfer ends. Reset the
  66 *         timer when a xfer is queued. If the timer expires, release
  67 *         the rpipe [see rpipe_ep_disable()].
  68 *
  69 *     (b) when looking for free rpipes to attach [rpipe_get_by_ep()],
  70 *         when none are found go over the list, check their endpoint
  71 *         and their activity record (if no last-xfer-done-ts in the
  72 *         last x seconds) take it
  73 *
  74 *     However, due to the fact that we have a set of limited
  75 *     resources (max-segments-at-the-same-time per xfer,
  76 *     xfers-per-ripe, blocks-per-rpipe, rpipes-per-host), at the end
  77 *     we are going to have to rebuild all this based on an scheduler,
  78 *     to where we have a list of transactions to do and based on the
  79 *     availability of the different required components (blocks,
  80 *     rpipes, segment slots, etc), we go scheduling them. Painful.
  81 */
  82#include <linux/spinlock.h>
  83#include <linux/slab.h>
  84#include <linux/hash.h>
  85#include <linux/ratelimit.h>
  86#include <linux/export.h>
  87#include <linux/scatterlist.h>
  88
  89#include "wa-hc.h"
  90#include "wusbhc.h"
  91
  92enum {
  93	/* [WUSB] section 8.3.3 allocates 7 bits for the segment index. */
  94	WA_SEGS_MAX = 128,
  95};
  96
  97enum wa_seg_status {
  98	WA_SEG_NOTREADY,
  99	WA_SEG_READY,
 100	WA_SEG_DELAYED,
 101	WA_SEG_SUBMITTED,
 102	WA_SEG_PENDING,
 103	WA_SEG_DTI_PENDING,
 104	WA_SEG_DONE,
 105	WA_SEG_ERROR,
 106	WA_SEG_ABORTED,
 107};
 108
 109static void wa_xfer_delayed_run(struct wa_rpipe *);
 110static int __wa_xfer_delayed_run(struct wa_rpipe *rpipe, int *dto_waiting);
 111
 112/*
 113 * Life cycle governed by 'struct urb' (the refcount of the struct is
 114 * that of the 'struct urb' and usb_free_urb() would free the whole
 115 * struct).
 116 */
 117struct wa_seg {
 118	struct urb tr_urb;		/* transfer request urb. */
 119	struct urb *isoc_pack_desc_urb;	/* for isoc packet descriptor. */
 120	struct urb *dto_urb;		/* for data output. */
 121	struct list_head list_node;	/* for rpipe->req_list */
 122	struct wa_xfer *xfer;		/* out xfer */
 123	u8 index;			/* which segment we are */
 124	int isoc_frame_count;	/* number of isoc frames in this segment. */
 125	int isoc_frame_offset;	/* starting frame offset in the xfer URB. */
 126	/* Isoc frame that the current transfer buffer corresponds to. */
 127	int isoc_frame_index;
 128	int isoc_size;	/* size of all isoc frames sent by this seg. */
 129	enum wa_seg_status status;
 130	ssize_t result;			/* bytes xfered or error */
 131	struct wa_xfer_hdr xfer_hdr;
 132};
 133
 134static inline void wa_seg_init(struct wa_seg *seg)
 135{
 136	usb_init_urb(&seg->tr_urb);
 137
 138	/* set the remaining memory to 0. */
 139	memset(((void *)seg) + sizeof(seg->tr_urb), 0,
 140		sizeof(*seg) - sizeof(seg->tr_urb));
 141}
 142
 143/*
 144 * Protected by xfer->lock
 145 *
 146 */
 147struct wa_xfer {
 148	struct kref refcnt;
 149	struct list_head list_node;
 150	spinlock_t lock;
 151	u32 id;
 152
 153	struct wahc *wa;		/* Wire adapter we are plugged to */
 154	struct usb_host_endpoint *ep;
 155	struct urb *urb;		/* URB we are transferring for */
 156	struct wa_seg **seg;		/* transfer segments */
 157	u8 segs, segs_submitted, segs_done;
 158	unsigned is_inbound:1;
 159	unsigned is_dma:1;
 160	size_t seg_size;
 161	int result;
 162
 163	gfp_t gfp;			/* allocation mask */
 164
 165	struct wusb_dev *wusb_dev;	/* for activity timestamps */
 166};
 167
 168static void __wa_populate_dto_urb_isoc(struct wa_xfer *xfer,
 169	struct wa_seg *seg, int curr_iso_frame);
 170static void wa_complete_remaining_xfer_segs(struct wa_xfer *xfer,
 171		int starting_index, enum wa_seg_status status);
 172
 173static inline void wa_xfer_init(struct wa_xfer *xfer)
 174{
 175	kref_init(&xfer->refcnt);
 176	INIT_LIST_HEAD(&xfer->list_node);
 177	spin_lock_init(&xfer->lock);
 178}
 179
 180/*
 181 * Destroy a transfer structure
 182 *
 183 * Note that freeing xfer->seg[cnt]->tr_urb will free the containing
 184 * xfer->seg[cnt] memory that was allocated by __wa_xfer_setup_segs.
 185 */
 186static void wa_xfer_destroy(struct kref *_xfer)
 187{
 188	struct wa_xfer *xfer = container_of(_xfer, struct wa_xfer, refcnt);
 189	if (xfer->seg) {
 190		unsigned cnt;
 191		for (cnt = 0; cnt < xfer->segs; cnt++) {
 192			struct wa_seg *seg = xfer->seg[cnt];
 193			if (seg) {
 194				usb_free_urb(seg->isoc_pack_desc_urb);
 195				if (seg->dto_urb) {
 196					kfree(seg->dto_urb->sg);
 197					usb_free_urb(seg->dto_urb);
 198				}
 199				usb_free_urb(&seg->tr_urb);
 200			}
 201		}
 202		kfree(xfer->seg);
 203	}
 204	kfree(xfer);
 205}
 206
 207static void wa_xfer_get(struct wa_xfer *xfer)
 208{
 209	kref_get(&xfer->refcnt);
 210}
 211
 212static void wa_xfer_put(struct wa_xfer *xfer)
 213{
 214	kref_put(&xfer->refcnt, wa_xfer_destroy);
 215}
 216
 217/*
 218 * Try to get exclusive access to the DTO endpoint resource.  Return true
 219 * if successful.
 220 */
 221static inline int __wa_dto_try_get(struct wahc *wa)
 222{
 223	return (test_and_set_bit(0, &wa->dto_in_use) == 0);
 224}
 225
 226/* Release the DTO endpoint resource. */
 227static inline void __wa_dto_put(struct wahc *wa)
 228{
 229	clear_bit_unlock(0, &wa->dto_in_use);
 230}
 231
 232/* Service RPIPEs that are waiting on the DTO resource. */
 233static void wa_check_for_delayed_rpipes(struct wahc *wa)
 234{
 235	unsigned long flags;
 236	int dto_waiting = 0;
 237	struct wa_rpipe *rpipe;
 238
 239	spin_lock_irqsave(&wa->rpipe_lock, flags);
 240	while (!list_empty(&wa->rpipe_delayed_list) && !dto_waiting) {
 241		rpipe = list_first_entry(&wa->rpipe_delayed_list,
 242				struct wa_rpipe, list_node);
 243		__wa_xfer_delayed_run(rpipe, &dto_waiting);
 244		/* remove this RPIPE from the list if it is not waiting. */
 245		if (!dto_waiting) {
 246			pr_debug("%s: RPIPE %d serviced and removed from delayed list.\n",
 247				__func__,
 248				le16_to_cpu(rpipe->descr.wRPipeIndex));
 249			list_del_init(&rpipe->list_node);
 250		}
 251	}
 252	spin_unlock_irqrestore(&wa->rpipe_lock, flags);
 253}
 254
 255/* add this RPIPE to the end of the delayed RPIPE list. */
 256static void wa_add_delayed_rpipe(struct wahc *wa, struct wa_rpipe *rpipe)
 257{
 258	unsigned long flags;
 259
 260	spin_lock_irqsave(&wa->rpipe_lock, flags);
 261	/* add rpipe to the list if it is not already on it. */
 262	if (list_empty(&rpipe->list_node)) {
 263		pr_debug("%s: adding RPIPE %d to the delayed list.\n",
 264			__func__, le16_to_cpu(rpipe->descr.wRPipeIndex));
 265		list_add_tail(&rpipe->list_node, &wa->rpipe_delayed_list);
 266	}
 267	spin_unlock_irqrestore(&wa->rpipe_lock, flags);
 268}
 269
 270/*
 271 * xfer is referenced
 272 *
 273 * xfer->lock has to be unlocked
 274 *
 275 * We take xfer->lock for setting the result; this is a barrier
 276 * against drivers/usb/core/hcd.c:unlink1() being called after we call
 277 * usb_hcd_giveback_urb() and wa_urb_dequeue() trying to get a
 278 * reference to the transfer.
 279 */
 280static void wa_xfer_giveback(struct wa_xfer *xfer)
 281{
 282	unsigned long flags;
 283
 284	spin_lock_irqsave(&xfer->wa->xfer_list_lock, flags);
 285	list_del_init(&xfer->list_node);
 286	usb_hcd_unlink_urb_from_ep(&(xfer->wa->wusb->usb_hcd), xfer->urb);
 287	spin_unlock_irqrestore(&xfer->wa->xfer_list_lock, flags);
 288	/* FIXME: segmentation broken -- kills DWA */
 289	wusbhc_giveback_urb(xfer->wa->wusb, xfer->urb, xfer->result);
 290	wa_put(xfer->wa);
 291	wa_xfer_put(xfer);
 292}
 293
 294/*
 295 * xfer is referenced
 296 *
 297 * xfer->lock has to be unlocked
 298 */
 299static void wa_xfer_completion(struct wa_xfer *xfer)
 300{
 301	if (xfer->wusb_dev)
 302		wusb_dev_put(xfer->wusb_dev);
 303	rpipe_put(xfer->ep->hcpriv);
 304	wa_xfer_giveback(xfer);
 305}
 306
 307/*
 308 * Initialize a transfer's ID
 309 *
 310 * We need to use a sequential number; if we use the pointer or the
 311 * hash of the pointer, it can repeat over sequential transfers and
 312 * then it will confuse the HWA....wonder why in hell they put a 32
 313 * bit handle in there then.
 314 */
 315static void wa_xfer_id_init(struct wa_xfer *xfer)
 316{
 317	xfer->id = atomic_add_return(1, &xfer->wa->xfer_id_count);
 318}
 319
 320/* Return the xfer's ID. */
 321static inline u32 wa_xfer_id(struct wa_xfer *xfer)
 322{
 323	return xfer->id;
 324}
 325
 326/* Return the xfer's ID in transport format (little endian). */
 327static inline __le32 wa_xfer_id_le32(struct wa_xfer *xfer)
 328{
 329	return cpu_to_le32(xfer->id);
 330}
 331
 332/*
 333 * If transfer is done, wrap it up and return true
 334 *
 335 * xfer->lock has to be locked
 336 */
 337static unsigned __wa_xfer_is_done(struct wa_xfer *xfer)
 338{
 339	struct device *dev = &xfer->wa->usb_iface->dev;
 340	unsigned result, cnt;
 341	struct wa_seg *seg;
 342	struct urb *urb = xfer->urb;
 343	unsigned found_short = 0;
 344
 345	result = xfer->segs_done == xfer->segs_submitted;
 346	if (result == 0)
 347		goto out;
 348	urb->actual_length = 0;
 349	for (cnt = 0; cnt < xfer->segs; cnt++) {
 350		seg = xfer->seg[cnt];
 351		switch (seg->status) {
 352		case WA_SEG_DONE:
 353			if (found_short && seg->result > 0) {
 354				dev_dbg(dev, "xfer %p ID %08X#%u: bad short segments (%zu)\n",
 355					xfer, wa_xfer_id(xfer), cnt,
 356					seg->result);
 357				urb->status = -EINVAL;
 358				goto out;
 359			}
 360			urb->actual_length += seg->result;
 361			if (!(usb_pipeisoc(xfer->urb->pipe))
 362				&& seg->result < xfer->seg_size
 363			    && cnt != xfer->segs-1)
 364				found_short = 1;
 365			dev_dbg(dev, "xfer %p ID %08X#%u: DONE short %d "
 366				"result %zu urb->actual_length %d\n",
 367				xfer, wa_xfer_id(xfer), seg->index, found_short,
 368				seg->result, urb->actual_length);
 369			break;
 370		case WA_SEG_ERROR:
 371			xfer->result = seg->result;
 372			dev_dbg(dev, "xfer %p ID %08X#%u: ERROR result %zi(0x%08zX)\n",
 373				xfer, wa_xfer_id(xfer), seg->index, seg->result,
 374				seg->result);
 375			goto out;
 376		case WA_SEG_ABORTED:
 377			xfer->result = seg->result;
 378			dev_dbg(dev, "xfer %p ID %08X#%u: ABORTED result %zi(0x%08zX)\n",
 379				xfer, wa_xfer_id(xfer), seg->index, seg->result,
 380				seg->result);
 381			goto out;
 382		default:
 383			dev_warn(dev, "xfer %p ID %08X#%u: is_done bad state %d\n",
 384				 xfer, wa_xfer_id(xfer), cnt, seg->status);
 385			xfer->result = -EINVAL;
 386			goto out;
 387		}
 388	}
 389	xfer->result = 0;
 390out:
 391	return result;
 392}
 393
 394/*
 395 * Mark the given segment as done.  Return true if this completes the xfer.
 396 * This should only be called for segs that have been submitted to an RPIPE.
 397 * Delayed segs are not marked as submitted so they do not need to be marked
 398 * as done when cleaning up.
 399 *
 400 * xfer->lock has to be locked
 401 */
 402static unsigned __wa_xfer_mark_seg_as_done(struct wa_xfer *xfer,
 403	struct wa_seg *seg, enum wa_seg_status status)
 404{
 405	seg->status = status;
 406	xfer->segs_done++;
 407
 408	/* check for done. */
 409	return __wa_xfer_is_done(xfer);
 410}
 411
 412/*
 413 * Search for a transfer list ID on the HCD's URB list
 414 *
 415 * For 32 bit architectures, we use the pointer itself; for 64 bits, a
 416 * 32-bit hash of the pointer.
 417 *
 418 * @returns NULL if not found.
 419 */
 420static struct wa_xfer *wa_xfer_get_by_id(struct wahc *wa, u32 id)
 421{
 422	unsigned long flags;
 423	struct wa_xfer *xfer_itr;
 424	spin_lock_irqsave(&wa->xfer_list_lock, flags);
 425	list_for_each_entry(xfer_itr, &wa->xfer_list, list_node) {
 426		if (id == xfer_itr->id) {
 427			wa_xfer_get(xfer_itr);
 428			goto out;
 429		}
 430	}
 431	xfer_itr = NULL;
 432out:
 433	spin_unlock_irqrestore(&wa->xfer_list_lock, flags);
 434	return xfer_itr;
 435}
 436
 437struct wa_xfer_abort_buffer {
 438	struct urb urb;
 439	struct wahc *wa;
 440	struct wa_xfer_abort cmd;
 441};
 442
 443static void __wa_xfer_abort_cb(struct urb *urb)
 444{
 445	struct wa_xfer_abort_buffer *b = urb->context;
 446	struct wahc *wa = b->wa;
 447
 448	/*
 449	 * If the abort request URB failed, then the HWA did not get the abort
 450	 * command.  Forcibly clean up the xfer without waiting for a Transfer
 451	 * Result from the HWA.
 452	 */
 453	if (urb->status < 0) {
 454		struct wa_xfer *xfer;
 455		struct device *dev = &wa->usb_iface->dev;
 456
 457		xfer = wa_xfer_get_by_id(wa, le32_to_cpu(b->cmd.dwTransferID));
 458		dev_err(dev, "%s: Transfer Abort request failed. result: %d\n",
 459			__func__, urb->status);
 460		if (xfer) {
 461			unsigned long flags;
 462			int done;
 463			struct wa_rpipe *rpipe = xfer->ep->hcpriv;
 464
 465			dev_err(dev, "%s: cleaning up xfer %p ID 0x%08X.\n",
 466				__func__, xfer, wa_xfer_id(xfer));
 467			spin_lock_irqsave(&xfer->lock, flags);
 468			/* mark all segs as aborted. */
 469			wa_complete_remaining_xfer_segs(xfer, 0,
 470				WA_SEG_ABORTED);
 471			done = __wa_xfer_is_done(xfer);
 472			spin_unlock_irqrestore(&xfer->lock, flags);
 473			if (done)
 474				wa_xfer_completion(xfer);
 475			wa_xfer_delayed_run(rpipe);
 476			wa_xfer_put(xfer);
 477		} else {
 478			dev_err(dev, "%s: xfer ID 0x%08X already gone.\n",
 479				 __func__, le32_to_cpu(b->cmd.dwTransferID));
 480		}
 481	}
 482
 483	wa_put(wa);	/* taken in __wa_xfer_abort */
 484	usb_put_urb(&b->urb);
 485}
 486
 487/*
 488 * Aborts an ongoing transaction
 489 *
 490 * Assumes the transfer is referenced and locked and in a submitted
 491 * state (mainly that there is an endpoint/rpipe assigned).
 492 *
 493 * The callback (see above) does nothing but freeing up the data by
 494 * putting the URB. Because the URB is allocated at the head of the
 495 * struct, the whole space we allocated is kfreed. *
 496 */
 497static int __wa_xfer_abort(struct wa_xfer *xfer)
 498{
 499	int result = -ENOMEM;
 500	struct device *dev = &xfer->wa->usb_iface->dev;
 501	struct wa_xfer_abort_buffer *b;
 502	struct wa_rpipe *rpipe = xfer->ep->hcpriv;
 503
 504	b = kmalloc(sizeof(*b), GFP_ATOMIC);
 505	if (b == NULL)
 506		goto error_kmalloc;
 507	b->cmd.bLength =  sizeof(b->cmd);
 508	b->cmd.bRequestType = WA_XFER_ABORT;
 509	b->cmd.wRPipe = rpipe->descr.wRPipeIndex;
 510	b->cmd.dwTransferID = wa_xfer_id_le32(xfer);
 511	b->wa = wa_get(xfer->wa);
 512
 513	usb_init_urb(&b->urb);
 514	usb_fill_bulk_urb(&b->urb, xfer->wa->usb_dev,
 515		usb_sndbulkpipe(xfer->wa->usb_dev,
 516				xfer->wa->dto_epd->bEndpointAddress),
 517		&b->cmd, sizeof(b->cmd), __wa_xfer_abort_cb, b);
 518	result = usb_submit_urb(&b->urb, GFP_ATOMIC);
 519	if (result < 0)
 520		goto error_submit;
 521	return result;				/* callback frees! */
 522
 523
 524error_submit:
 525	wa_put(xfer->wa);
 526	if (printk_ratelimit())
 527		dev_err(dev, "xfer %p: Can't submit abort request: %d\n",
 528			xfer, result);
 529	kfree(b);
 530error_kmalloc:
 531	return result;
 532
 533}
 534
 535/*
 536 * Calculate the number of isoc frames starting from isoc_frame_offset
 537 * that will fit a in transfer segment.
 538 */
 539static int __wa_seg_calculate_isoc_frame_count(struct wa_xfer *xfer,
 540	int isoc_frame_offset, int *total_size)
 541{
 542	int segment_size = 0, frame_count = 0;
 543	int index = isoc_frame_offset;
 544	struct usb_iso_packet_descriptor *iso_frame_desc =
 545		xfer->urb->iso_frame_desc;
 546
 547	while ((index < xfer->urb->number_of_packets)
 548		&& ((segment_size + iso_frame_desc[index].length)
 549				<= xfer->seg_size)) {
 550		/*
 551		 * For Alereon HWA devices, only include an isoc frame in an
 552		 * out segment if it is physically contiguous with the previous
 553		 * frame.  This is required because those devices expect
 554		 * the isoc frames to be sent as a single USB transaction as
 555		 * opposed to one transaction per frame with standard HWA.
 556		 */
 557		if ((xfer->wa->quirks & WUSB_QUIRK_ALEREON_HWA_CONCAT_ISOC)
 558			&& (xfer->is_inbound == 0)
 559			&& (index > isoc_frame_offset)
 560			&& ((iso_frame_desc[index - 1].offset +
 561				iso_frame_desc[index - 1].length) !=
 562				iso_frame_desc[index].offset))
 563			break;
 564
 565		/* this frame fits. count it. */
 566		++frame_count;
 567		segment_size += iso_frame_desc[index].length;
 568
 569		/* move to the next isoc frame. */
 570		++index;
 571	}
 572
 573	*total_size = segment_size;
 574	return frame_count;
 575}
 576
 577/*
 578 *
 579 * @returns < 0 on error, transfer segment request size if ok
 580 */
 581static ssize_t __wa_xfer_setup_sizes(struct wa_xfer *xfer,
 582				     enum wa_xfer_type *pxfer_type)
 583{
 584	ssize_t result;
 585	struct device *dev = &xfer->wa->usb_iface->dev;
 586	size_t maxpktsize;
 587	struct urb *urb = xfer->urb;
 588	struct wa_rpipe *rpipe = xfer->ep->hcpriv;
 589
 590	switch (rpipe->descr.bmAttribute & 0x3) {
 591	case USB_ENDPOINT_XFER_CONTROL:
 592		*pxfer_type = WA_XFER_TYPE_CTL;
 593		result = sizeof(struct wa_xfer_ctl);
 594		break;
 595	case USB_ENDPOINT_XFER_INT:
 596	case USB_ENDPOINT_XFER_BULK:
 597		*pxfer_type = WA_XFER_TYPE_BI;
 598		result = sizeof(struct wa_xfer_bi);
 599		break;
 600	case USB_ENDPOINT_XFER_ISOC:
 601		*pxfer_type = WA_XFER_TYPE_ISO;
 602		result = sizeof(struct wa_xfer_hwaiso);
 603		break;
 604	default:
 605		/* never happens */
 606		BUG();
 607		result = -EINVAL;	/* shut gcc up */
 608	}
 609	xfer->is_inbound = urb->pipe & USB_DIR_IN ? 1 : 0;
 610	xfer->is_dma = urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP ? 1 : 0;
 611
 612	maxpktsize = le16_to_cpu(rpipe->descr.wMaxPacketSize);
 613	xfer->seg_size = le16_to_cpu(rpipe->descr.wBlocks)
 614		* 1 << (xfer->wa->wa_descr->bRPipeBlockSize - 1);
 615	/* Compute the segment size and make sure it is a multiple of
 616	 * the maxpktsize (WUSB1.0[8.3.3.1])...not really too much of
 617	 * a check (FIXME) */
 618	if (xfer->seg_size < maxpktsize) {
 619		dev_err(dev,
 620			"HW BUG? seg_size %zu smaller than maxpktsize %zu\n",
 621			xfer->seg_size, maxpktsize);
 622		result = -EINVAL;
 623		goto error;
 624	}
 625	xfer->seg_size = (xfer->seg_size / maxpktsize) * maxpktsize;
 626	if ((rpipe->descr.bmAttribute & 0x3) == USB_ENDPOINT_XFER_ISOC) {
 627		int index = 0;
 628
 629		xfer->segs = 0;
 630		/*
 631		 * loop over urb->number_of_packets to determine how many
 632		 * xfer segments will be needed to send the isoc frames.
 633		 */
 634		while (index < urb->number_of_packets) {
 635			int seg_size; /* don't care. */
 636			index += __wa_seg_calculate_isoc_frame_count(xfer,
 637					index, &seg_size);
 638			++xfer->segs;
 639		}
 640	} else {
 641		xfer->segs = DIV_ROUND_UP(urb->transfer_buffer_length,
 642						xfer->seg_size);
 643		if (xfer->segs == 0 && *pxfer_type == WA_XFER_TYPE_CTL)
 644			xfer->segs = 1;
 645	}
 646
 647	if (xfer->segs > WA_SEGS_MAX) {
 648		dev_err(dev, "BUG? oops, number of segments %zu bigger than %d\n",
 649			(urb->transfer_buffer_length/xfer->seg_size),
 650			WA_SEGS_MAX);
 651		result = -EINVAL;
 652		goto error;
 653	}
 654error:
 655	return result;
 656}
 657
 658static void __wa_setup_isoc_packet_descr(
 659		struct wa_xfer_packet_info_hwaiso *packet_desc,
 660		struct wa_xfer *xfer,
 661		struct wa_seg *seg) {
 662	struct usb_iso_packet_descriptor *iso_frame_desc =
 663		xfer->urb->iso_frame_desc;
 664	int frame_index;
 665
 666	/* populate isoc packet descriptor. */
 667	packet_desc->bPacketType = WA_XFER_ISO_PACKET_INFO;
 668	packet_desc->wLength = cpu_to_le16(sizeof(*packet_desc) +
 669		(sizeof(packet_desc->PacketLength[0]) *
 670			seg->isoc_frame_count));
 671	for (frame_index = 0; frame_index < seg->isoc_frame_count;
 672		++frame_index) {
 673		int offset_index = frame_index + seg->isoc_frame_offset;
 674		packet_desc->PacketLength[frame_index] =
 675			cpu_to_le16(iso_frame_desc[offset_index].length);
 676	}
 677}
 678
 679
 680/* Fill in the common request header and xfer-type specific data. */
 681static void __wa_xfer_setup_hdr0(struct wa_xfer *xfer,
 682				 struct wa_xfer_hdr *xfer_hdr0,
 683				 enum wa_xfer_type xfer_type,
 684				 size_t xfer_hdr_size)
 685{
 686	struct wa_rpipe *rpipe = xfer->ep->hcpriv;
 687	struct wa_seg *seg = xfer->seg[0];
 688
 689	xfer_hdr0 = &seg->xfer_hdr;
 690	xfer_hdr0->bLength = xfer_hdr_size;
 691	xfer_hdr0->bRequestType = xfer_type;
 692	xfer_hdr0->wRPipe = rpipe->descr.wRPipeIndex;
 693	xfer_hdr0->dwTransferID = wa_xfer_id_le32(xfer);
 694	xfer_hdr0->bTransferSegment = 0;
 695	switch (xfer_type) {
 696	case WA_XFER_TYPE_CTL: {
 697		struct wa_xfer_ctl *xfer_ctl =
 698			container_of(xfer_hdr0, struct wa_xfer_ctl, hdr);
 699		xfer_ctl->bmAttribute = xfer->is_inbound ? 1 : 0;
 700		memcpy(&xfer_ctl->baSetupData, xfer->urb->setup_packet,
 701		       sizeof(xfer_ctl->baSetupData));
 702		break;
 703	}
 704	case WA_XFER_TYPE_BI:
 705		break;
 706	case WA_XFER_TYPE_ISO: {
 707		struct wa_xfer_hwaiso *xfer_iso =
 708			container_of(xfer_hdr0, struct wa_xfer_hwaiso, hdr);
 709		struct wa_xfer_packet_info_hwaiso *packet_desc =
 710			((void *)xfer_iso) + xfer_hdr_size;
 711
 712		/* populate the isoc section of the transfer request. */
 713		xfer_iso->dwNumOfPackets = cpu_to_le32(seg->isoc_frame_count);
 714		/* populate isoc packet descriptor. */
 715		__wa_setup_isoc_packet_descr(packet_desc, xfer, seg);
 716		break;
 717	}
 718	default:
 719		BUG();
 720	};
 721}
 722
 723/*
 724 * Callback for the OUT data phase of the segment request
 725 *
 726 * Check wa_seg_tr_cb(); most comments also apply here because this
 727 * function does almost the same thing and they work closely
 728 * together.
 729 *
 730 * If the seg request has failed but this DTO phase has succeeded,
 731 * wa_seg_tr_cb() has already failed the segment and moved the
 732 * status to WA_SEG_ERROR, so this will go through 'case 0' and
 733 * effectively do nothing.
 734 */
 735static void wa_seg_dto_cb(struct urb *urb)
 736{
 737	struct wa_seg *seg = urb->context;
 738	struct wa_xfer *xfer = seg->xfer;
 739	struct wahc *wa;
 740	struct device *dev;
 741	struct wa_rpipe *rpipe;
 742	unsigned long flags;
 743	unsigned rpipe_ready = 0;
 744	int data_send_done = 1, release_dto = 0, holding_dto = 0;
 745	u8 done = 0;
 746	int result;
 747
 748	/* free the sg if it was used. */
 749	kfree(urb->sg);
 750	urb->sg = NULL;
 751
 752	spin_lock_irqsave(&xfer->lock, flags);
 753	wa = xfer->wa;
 754	dev = &wa->usb_iface->dev;
 755	if (usb_pipeisoc(xfer->urb->pipe)) {
 756		/* Alereon HWA sends all isoc frames in a single transfer. */
 757		if (wa->quirks & WUSB_QUIRK_ALEREON_HWA_CONCAT_ISOC)
 758			seg->isoc_frame_index += seg->isoc_frame_count;
 759		else
 760			seg->isoc_frame_index += 1;
 761		if (seg->isoc_frame_index < seg->isoc_frame_count) {
 762			data_send_done = 0;
 763			holding_dto = 1; /* checked in error cases. */
 764			/*
 765			 * if this is the last isoc frame of the segment, we
 766			 * can release DTO after sending this frame.
 767			 */
 768			if ((seg->isoc_frame_index + 1) >=
 769				seg->isoc_frame_count)
 770				release_dto = 1;
 771		}
 772		dev_dbg(dev, "xfer 0x%08X#%u: isoc frame = %d, holding_dto = %d, release_dto = %d.\n",
 773			wa_xfer_id(xfer), seg->index, seg->isoc_frame_index,
 774			holding_dto, release_dto);
 775	}
 776	spin_unlock_irqrestore(&xfer->lock, flags);
 777
 778	switch (urb->status) {
 779	case 0:
 780		spin_lock_irqsave(&xfer->lock, flags);
 781		seg->result += urb->actual_length;
 782		if (data_send_done) {
 783			dev_dbg(dev, "xfer 0x%08X#%u: data out done (%zu bytes)\n",
 784				wa_xfer_id(xfer), seg->index, seg->result);
 785			if (seg->status < WA_SEG_PENDING)
 786				seg->status = WA_SEG_PENDING;
 787		} else {
 788			/* should only hit this for isoc xfers. */
 789			/*
 790			 * Populate the dto URB with the next isoc frame buffer,
 791			 * send the URB and release DTO if we no longer need it.
 792			 */
 793			 __wa_populate_dto_urb_isoc(xfer, seg,
 794				seg->isoc_frame_offset + seg->isoc_frame_index);
 795
 796			/* resubmit the URB with the next isoc frame. */
 797			/* take a ref on resubmit. */
 798			wa_xfer_get(xfer);
 799			result = usb_submit_urb(seg->dto_urb, GFP_ATOMIC);
 800			if (result < 0) {
 801				dev_err(dev, "xfer 0x%08X#%u: DTO submit failed: %d\n",
 802				       wa_xfer_id(xfer), seg->index, result);
 803				spin_unlock_irqrestore(&xfer->lock, flags);
 804				goto error_dto_submit;
 805			}
 806		}
 807		spin_unlock_irqrestore(&xfer->lock, flags);
 808		if (release_dto) {
 809			__wa_dto_put(wa);
 810			wa_check_for_delayed_rpipes(wa);
 811		}
 812		break;
 813	case -ECONNRESET:	/* URB unlinked; no need to do anything */
 814	case -ENOENT:		/* as it was done by the who unlinked us */
 815		if (holding_dto) {
 816			__wa_dto_put(wa);
 817			wa_check_for_delayed_rpipes(wa);
 818		}
 819		break;
 820	default:		/* Other errors ... */
 821		dev_err(dev, "xfer 0x%08X#%u: data out error %d\n",
 822			wa_xfer_id(xfer), seg->index, urb->status);
 823		goto error_default;
 824	}
 825
 826	/* taken when this URB was submitted. */
 827	wa_xfer_put(xfer);
 828	return;
 829
 830error_dto_submit:
 831	/* taken on resubmit attempt. */
 832	wa_xfer_put(xfer);
 833error_default:
 834	spin_lock_irqsave(&xfer->lock, flags);
 835	rpipe = xfer->ep->hcpriv;
 836	if (edc_inc(&wa->nep_edc, EDC_MAX_ERRORS,
 837		    EDC_ERROR_TIMEFRAME)){
 838		dev_err(dev, "DTO: URB max acceptable errors exceeded, resetting device\n");
 839		wa_reset_all(wa);
 840	}
 841	if (seg->status != WA_SEG_ERROR) {
 842		seg->result = urb->status;
 843		__wa_xfer_abort(xfer);
 844		rpipe_ready = rpipe_avail_inc(rpipe);
 845		done = __wa_xfer_mark_seg_as_done(xfer, seg, WA_SEG_ERROR);
 846	}
 847	spin_unlock_irqrestore(&xfer->lock, flags);
 848	if (holding_dto) {
 849		__wa_dto_put(wa);
 850		wa_check_for_delayed_rpipes(wa);
 851	}
 852	if (done)
 853		wa_xfer_completion(xfer);
 854	if (rpipe_ready)
 855		wa_xfer_delayed_run(rpipe);
 856	/* taken when this URB was submitted. */
 857	wa_xfer_put(xfer);
 858}
 859
 860/*
 861 * Callback for the isoc packet descriptor phase of the segment request
 862 *
 863 * Check wa_seg_tr_cb(); most comments also apply here because this
 864 * function does almost the same thing and they work closely
 865 * together.
 866 *
 867 * If the seg request has failed but this phase has succeeded,
 868 * wa_seg_tr_cb() has already failed the segment and moved the
 869 * status to WA_SEG_ERROR, so this will go through 'case 0' and
 870 * effectively do nothing.
 871 */
 872static void wa_seg_iso_pack_desc_cb(struct urb *urb)
 873{
 874	struct wa_seg *seg = urb->context;
 875	struct wa_xfer *xfer = seg->xfer;
 876	struct wahc *wa;
 877	struct device *dev;
 878	struct wa_rpipe *rpipe;
 879	unsigned long flags;
 880	unsigned rpipe_ready = 0;
 881	u8 done = 0;
 882
 883	switch (urb->status) {
 884	case 0:
 885		spin_lock_irqsave(&xfer->lock, flags);
 886		wa = xfer->wa;
 887		dev = &wa->usb_iface->dev;
 888		dev_dbg(dev, "iso xfer %08X#%u: packet descriptor done\n",
 889			wa_xfer_id(xfer), seg->index);
 890		if (xfer->is_inbound && seg->status < WA_SEG_PENDING)
 891			seg->status = WA_SEG_PENDING;
 892		spin_unlock_irqrestore(&xfer->lock, flags);
 893		break;
 894	case -ECONNRESET:	/* URB unlinked; no need to do anything */
 895	case -ENOENT:		/* as it was done by the who unlinked us */
 896		break;
 897	default:		/* Other errors ... */
 898		spin_lock_irqsave(&xfer->lock, flags);
 899		wa = xfer->wa;
 900		dev = &wa->usb_iface->dev;
 901		rpipe = xfer->ep->hcpriv;
 902		pr_err_ratelimited("iso xfer %08X#%u: packet descriptor error %d\n",
 903				wa_xfer_id(xfer), seg->index, urb->status);
 904		if (edc_inc(&wa->nep_edc, EDC_MAX_ERRORS,
 905			    EDC_ERROR_TIMEFRAME)){
 906			dev_err(dev, "iso xfer: URB max acceptable errors exceeded, resetting device\n");
 907			wa_reset_all(wa);
 908		}
 909		if (seg->status != WA_SEG_ERROR) {
 910			usb_unlink_urb(seg->dto_urb);
 911			seg->result = urb->status;
 912			__wa_xfer_abort(xfer);
 913			rpipe_ready = rpipe_avail_inc(rpipe);
 914			done = __wa_xfer_mark_seg_as_done(xfer, seg,
 915					WA_SEG_ERROR);
 916		}
 917		spin_unlock_irqrestore(&xfer->lock, flags);
 918		if (done)
 919			wa_xfer_completion(xfer);
 920		if (rpipe_ready)
 921			wa_xfer_delayed_run(rpipe);
 922	}
 923	/* taken when this URB was submitted. */
 924	wa_xfer_put(xfer);
 925}
 926
 927/*
 928 * Callback for the segment request
 929 *
 930 * If successful transition state (unless already transitioned or
 931 * outbound transfer); otherwise, take a note of the error, mark this
 932 * segment done and try completion.
 933 *
 934 * Note we don't access until we are sure that the transfer hasn't
 935 * been cancelled (ECONNRESET, ENOENT), which could mean that
 936 * seg->xfer could be already gone.
 937 *
 938 * We have to check before setting the status to WA_SEG_PENDING
 939 * because sometimes the xfer result callback arrives before this
 940 * callback (geeeeeeze), so it might happen that we are already in
 941 * another state. As well, we don't set it if the transfer is not inbound,
 942 * as in that case, wa_seg_dto_cb will do it when the OUT data phase
 943 * finishes.
 944 */
 945static void wa_seg_tr_cb(struct urb *urb)
 946{
 947	struct wa_seg *seg = urb->context;
 948	struct wa_xfer *xfer = seg->xfer;
 949	struct wahc *wa;
 950	struct device *dev;
 951	struct wa_rpipe *rpipe;
 952	unsigned long flags;
 953	unsigned rpipe_ready;
 954	u8 done = 0;
 955
 956	switch (urb->status) {
 957	case 0:
 958		spin_lock_irqsave(&xfer->lock, flags);
 959		wa = xfer->wa;
 960		dev = &wa->usb_iface->dev;
 961		dev_dbg(dev, "xfer %p ID 0x%08X#%u: request done\n",
 962			xfer, wa_xfer_id(xfer), seg->index);
 963		if (xfer->is_inbound &&
 964			seg->status < WA_SEG_PENDING &&
 965			!(usb_pipeisoc(xfer->urb->pipe)))
 966			seg->status = WA_SEG_PENDING;
 967		spin_unlock_irqrestore(&xfer->lock, flags);
 968		break;
 969	case -ECONNRESET:	/* URB unlinked; no need to do anything */
 970	case -ENOENT:		/* as it was done by the who unlinked us */
 971		break;
 972	default:		/* Other errors ... */
 973		spin_lock_irqsave(&xfer->lock, flags);
 974		wa = xfer->wa;
 975		dev = &wa->usb_iface->dev;
 976		rpipe = xfer->ep->hcpriv;
 977		if (printk_ratelimit())
 978			dev_err(dev, "xfer %p ID 0x%08X#%u: request error %d\n",
 979				xfer, wa_xfer_id(xfer), seg->index,
 980				urb->status);
 981		if (edc_inc(&wa->nep_edc, EDC_MAX_ERRORS,
 982			    EDC_ERROR_TIMEFRAME)){
 983			dev_err(dev, "DTO: URB max acceptable errors "
 984				"exceeded, resetting device\n");
 985			wa_reset_all(wa);
 986		}
 987		usb_unlink_urb(seg->isoc_pack_desc_urb);
 988		usb_unlink_urb(seg->dto_urb);
 989		seg->result = urb->status;
 990		__wa_xfer_abort(xfer);
 991		rpipe_ready = rpipe_avail_inc(rpipe);
 992		done = __wa_xfer_mark_seg_as_done(xfer, seg, WA_SEG_ERROR);
 993		spin_unlock_irqrestore(&xfer->lock, flags);
 994		if (done)
 995			wa_xfer_completion(xfer);
 996		if (rpipe_ready)
 997			wa_xfer_delayed_run(rpipe);
 998	}
 999	/* taken when this URB was submitted. */
1000	wa_xfer_put(xfer);
1001}
1002
1003/*
1004 * Allocate an SG list to store bytes_to_transfer bytes and copy the
1005 * subset of the in_sg that matches the buffer subset
1006 * we are about to transfer.
1007 */
1008static struct scatterlist *wa_xfer_create_subset_sg(struct scatterlist *in_sg,
1009	const unsigned int bytes_transferred,
1010	const unsigned int bytes_to_transfer, int *out_num_sgs)
1011{
1012	struct scatterlist *out_sg;
1013	unsigned int bytes_processed = 0, offset_into_current_page_data = 0,
1014		nents;
1015	struct scatterlist *current_xfer_sg = in_sg;
1016	struct scatterlist *current_seg_sg, *last_seg_sg;
1017
1018	/* skip previously transferred pages. */
1019	while ((current_xfer_sg) &&
1020			(bytes_processed < bytes_transferred)) {
1021		bytes_processed += current_xfer_sg->length;
1022
1023		/* advance the sg if current segment starts on or past the
1024			next page. */
1025		if (bytes_processed <= bytes_transferred)
1026			current_xfer_sg = sg_next(current_xfer_sg);
1027	}
1028
1029	/* the data for the current segment starts in current_xfer_sg.
1030		calculate the offset. */
1031	if (bytes_processed > bytes_transferred) {
1032		offset_into_current_page_data = current_xfer_sg->length -
1033			(bytes_processed - bytes_transferred);
1034	}
1035
1036	/* calculate the number of pages needed by this segment. */
1037	nents = DIV_ROUND_UP((bytes_to_transfer +
1038		offset_into_current_page_data +
1039		current_xfer_sg->offset),
1040		PAGE_SIZE);
1041
1042	out_sg = kmalloc((sizeof(struct scatterlist) * nents), GFP_ATOMIC);
1043	if (out_sg) {
1044		sg_init_table(out_sg, nents);
1045
1046		/* copy the portion of the incoming SG that correlates to the
1047		 * data to be transferred by this segment to the segment SG. */
1048		last_seg_sg = current_seg_sg = out_sg;
1049		bytes_processed = 0;
1050
1051		/* reset nents and calculate the actual number of sg entries
1052			needed. */
1053		nents = 0;
1054		while ((bytes_processed < bytes_to_transfer) &&
1055				current_seg_sg && current_xfer_sg) {
1056			unsigned int page_len = min((current_xfer_sg->length -
1057				offset_into_current_page_data),
1058				(bytes_to_transfer - bytes_processed));
1059
1060			sg_set_page(current_seg_sg, sg_page(current_xfer_sg),
1061				page_len,
1062				current_xfer_sg->offset +
1063				offset_into_current_page_data);
1064
1065			bytes_processed += page_len;
1066
1067			last_seg_sg = current_seg_sg;
1068			current_seg_sg = sg_next(current_seg_sg);
1069			current_xfer_sg = sg_next(current_xfer_sg);
1070
1071			/* only the first page may require additional offset. */
1072			offset_into_current_page_data = 0;
1073			nents++;
1074		}
1075
1076		/* update num_sgs and terminate the list since we may have
1077		 *  concatenated pages. */
1078		sg_mark_end(last_seg_sg);
1079		*out_num_sgs = nents;
1080	}
1081
1082	return out_sg;
1083}
1084
1085/*
1086 * Populate DMA buffer info for the isoc dto urb.
1087 */
1088static void __wa_populate_dto_urb_isoc(struct wa_xfer *xfer,
1089	struct wa_seg *seg, int curr_iso_frame)
1090{
1091	seg->dto_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1092	seg->dto_urb->sg = NULL;
1093	seg->dto_urb->num_sgs = 0;
1094	/* dto urb buffer address pulled from iso_frame_desc. */
1095	seg->dto_urb->transfer_dma = xfer->urb->transfer_dma +
1096		xfer->urb->iso_frame_desc[curr_iso_frame].offset;
1097	/* The Alereon HWA sends a single URB with all isoc segs. */
1098	if (xfer->wa->quirks & WUSB_QUIRK_ALEREON_HWA_CONCAT_ISOC)
1099		seg->dto_urb->transfer_buffer_length = seg->isoc_size;
1100	else
1101		seg->dto_urb->transfer_buffer_length =
1102			xfer->urb->iso_frame_desc[curr_iso_frame].length;
1103}
1104
1105/*
1106 * Populate buffer ptr and size, DMA buffer or SG list for the dto urb.
1107 */
1108static int __wa_populate_dto_urb(struct wa_xfer *xfer,
1109	struct wa_seg *seg, size_t buf_itr_offset, size_t buf_itr_size)
1110{
1111	int result = 0;
1112
1113	if (xfer->is_dma) {
1114		seg->dto_urb->transfer_dma =
1115			xfer->urb->transfer_dma + buf_itr_offset;
1116		seg->dto_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1117		seg->dto_urb->sg = NULL;
1118		seg->dto_urb->num_sgs = 0;
1119	} else {
1120		/* do buffer or SG processing. */
1121		seg->dto_urb->transfer_flags &=
1122			~URB_NO_TRANSFER_DMA_MAP;
1123		/* this should always be 0 before a resubmit. */
1124		seg->dto_urb->num_mapped_sgs = 0;
1125
1126		if (xfer->urb->transfer_buffer) {
1127			seg->dto_urb->transfer_buffer =
1128				xfer->urb->transfer_buffer +
1129				buf_itr_offset;
1130			seg->dto_urb->sg = NULL;
1131			seg->dto_urb->num_sgs = 0;
1132		} else {
1133			seg->dto_urb->transfer_buffer = NULL;
1134
1135			/*
1136			 * allocate an SG list to store seg_size bytes
1137			 * and copy the subset of the xfer->urb->sg that
1138			 * matches the buffer subset we are about to
1139			 * read.
1140			 */
1141			seg->dto_urb->sg = wa_xfer_create_subset_sg(
1142				xfer->urb->sg,
1143				buf_itr_offset, buf_itr_size,
1144				&(seg->dto_urb->num_sgs));
1145			if (!(seg->dto_urb->sg))
1146				result = -ENOMEM;
1147		}
1148	}
1149	seg->dto_urb->transfer_buffer_length = buf_itr_size;
1150
1151	return result;
1152}
1153
1154/*
1155 * Allocate the segs array and initialize each of them
1156 *
1157 * The segments are freed by wa_xfer_destroy() when the xfer use count
1158 * drops to zero; however, because each segment is given the same life
1159 * cycle as the USB URB it contains, it is actually freed by
1160 * usb_put_urb() on the contained USB URB (twisted, eh?).
1161 */
1162static int __wa_xfer_setup_segs(struct wa_xfer *xfer, size_t xfer_hdr_size)
1163{
1164	int result, cnt, isoc_frame_offset = 0;
1165	size_t alloc_size = sizeof(*xfer->seg[0])
1166		- sizeof(xfer->seg[0]->xfer_hdr) + xfer_hdr_size;
1167	struct usb_device *usb_dev = xfer->wa->usb_dev;
1168	const struct usb_endpoint_descriptor *dto_epd = xfer->wa->dto_epd;
1169	struct wa_seg *seg;
1170	size_t buf_itr, buf_size, buf_itr_size;
1171
1172	result = -ENOMEM;
1173	xfer->seg = kcalloc(xfer->segs, sizeof(xfer->seg[0]), GFP_ATOMIC);
1174	if (xfer->seg == NULL)
1175		goto error_segs_kzalloc;
1176	buf_itr = 0;
1177	buf_size = xfer->urb->transfer_buffer_length;
1178	for (cnt = 0; cnt < xfer->segs; cnt++) {
1179		size_t iso_pkt_descr_size = 0;
1180		int seg_isoc_frame_count = 0, seg_isoc_size = 0;
1181
1182		/*
1183		 * Adjust the size of the segment object to contain space for
1184		 * the isoc packet descriptor buffer.
1185		 */
1186		if (usb_pipeisoc(xfer->urb->pipe)) {
1187			seg_isoc_frame_count =
1188				__wa_seg_calculate_isoc_frame_count(xfer,
1189					isoc_frame_offset, &seg_isoc_size);
1190
1191			iso_pkt_descr_size =
1192				sizeof(struct wa_xfer_packet_info_hwaiso) +
1193				(seg_isoc_frame_count * sizeof(__le16));
1194		}
1195		seg = xfer->seg[cnt] = kmalloc(alloc_size + iso_pkt_descr_size,
1196						GFP_ATOMIC);
1197		if (seg == NULL)
1198			goto error_seg_kmalloc;
1199		wa_seg_init(seg);
1200		seg->xfer = xfer;
1201		seg->index = cnt;
1202		usb_fill_bulk_urb(&seg->tr_urb, usb_dev,
1203				  usb_sndbulkpipe(usb_dev,
1204						  dto_epd->bEndpointAddress),
1205				  &seg->xfer_hdr, xfer_hdr_size,
1206				  wa_seg_tr_cb, seg);
1207		buf_itr_size = min(buf_size, xfer->seg_size);
1208
1209		if (usb_pipeisoc(xfer->urb->pipe)) {
1210			seg->isoc_frame_count = seg_isoc_frame_count;
1211			seg->isoc_frame_offset = isoc_frame_offset;
1212			seg->isoc_size = seg_isoc_size;
1213			/* iso packet descriptor. */
1214			seg->isoc_pack_desc_urb =
1215					usb_alloc_urb(0, GFP_ATOMIC);
1216			if (seg->isoc_pack_desc_urb == NULL)
1217				goto error_iso_pack_desc_alloc;
1218			/*
1219			 * The buffer for the isoc packet descriptor starts
1220			 * after the transfer request header in the
1221			 * segment object memory buffer.
1222			 */
1223			usb_fill_bulk_urb(
1224				seg->isoc_pack_desc_urb, usb_dev,
1225				usb_sndbulkpipe(usb_dev,
1226					dto_epd->bEndpointAddress),
1227				(void *)(&seg->xfer_hdr) +
1228					xfer_hdr_size,
1229				iso_pkt_descr_size,
1230				wa_seg_iso_pack_desc_cb, seg);
1231
1232			/* adjust starting frame offset for next seg. */
1233			isoc_frame_offset += seg_isoc_frame_count;
1234		}
1235
1236		if (xfer->is_inbound == 0 && buf_size > 0) {
1237			/* outbound data. */
1238			seg->dto_urb = usb_alloc_urb(0, GFP_ATOMIC);
1239			if (seg->dto_urb == NULL)
1240				goto error_dto_alloc;
1241			usb_fill_bulk_urb(
1242				seg->dto_urb, usb_dev,
1243				usb_sndbulkpipe(usb_dev,
1244						dto_epd->bEndpointAddress),
1245				NULL, 0, wa_seg_dto_cb, seg);
1246
1247			if (usb_pipeisoc(xfer->urb->pipe)) {
1248				/*
1249				 * Fill in the xfer buffer information for the
1250				 * first isoc frame.  Subsequent frames in this
1251				 * segment will be filled in and sent from the
1252				 * DTO completion routine, if needed.
1253				 */
1254				__wa_populate_dto_urb_isoc(xfer, seg,
1255					seg->isoc_frame_offset);
1256			} else {
1257				/* fill in the xfer buffer information. */
1258				result = __wa_populate_dto_urb(xfer, seg,
1259							buf_itr, buf_itr_size);
1260				if (result < 0)
1261					goto error_seg_outbound_populate;
1262
1263				buf_itr += buf_itr_size;
1264				buf_size -= buf_itr_size;
1265			}
1266		}
1267		seg->status = WA_SEG_READY;
1268	}
1269	return 0;
1270
1271	/*
1272	 * Free the memory for the current segment which failed to init.
1273	 * Use the fact that cnt is left at were it failed.  The remaining
1274	 * segments will be cleaned up by wa_xfer_destroy.
1275	 */
1276error_seg_outbound_populate:
1277	usb_free_urb(xfer->seg[cnt]->dto_urb);
1278error_dto_alloc:
1279	usb_free_urb(xfer->seg[cnt]->isoc_pack_desc_urb);
1280error_iso_pack_desc_alloc:
1281	kfree(xfer->seg[cnt]);
1282	xfer->seg[cnt] = NULL;
1283error_seg_kmalloc:
1284error_segs_kzalloc:
1285	return result;
1286}
1287
1288/*
1289 * Allocates all the stuff needed to submit a transfer
1290 *
1291 * Breaks the whole data buffer in a list of segments, each one has a
1292 * structure allocated to it and linked in xfer->seg[index]
1293 *
1294 * FIXME: merge setup_segs() and the last part of this function, no
1295 *        need to do two for loops when we could run everything in a
1296 *        single one
1297 */
1298static int __wa_xfer_setup(struct wa_xfer *xfer, struct urb *urb)
1299{
1300	int result;
1301	struct device *dev = &xfer->wa->usb_iface->dev;
1302	enum wa_xfer_type xfer_type = 0; /* shut up GCC */
1303	size_t xfer_hdr_size, cnt, transfer_size;
1304	struct wa_xfer_hdr *xfer_hdr0, *xfer_hdr;
1305
1306	result = __wa_xfer_setup_sizes(xfer, &xfer_type);
1307	if (result < 0)
1308		goto error_setup_sizes;
1309	xfer_hdr_size = result;
1310	result = __wa_xfer_setup_segs(xfer, xfer_hdr_size);
1311	if (result < 0) {
1312		dev_err(dev, "xfer %p: Failed to allocate %d segments: %d\n",
1313			xfer, xfer->segs, result);
1314		goto error_setup_segs;
1315	}
1316	/* Fill the first header */
1317	xfer_hdr0 = &xfer->seg[0]->xfer_hdr;
1318	wa_xfer_id_init(xfer);
1319	__wa_xfer_setup_hdr0(xfer, xfer_hdr0, xfer_type, xfer_hdr_size);
1320
1321	/* Fill remaining headers */
1322	xfer_hdr = xfer_hdr0;
1323	if (xfer_type == WA_XFER_TYPE_ISO) {
1324		xfer_hdr0->dwTransferLength =
1325			cpu_to_le32(xfer->seg[0]->isoc_size);
1326		for (cnt = 1; cnt < xfer->segs; cnt++) {
1327			struct wa_xfer_packet_info_hwaiso *packet_desc;
1328			struct wa_seg *seg = xfer->seg[cnt];
1329			struct wa_xfer_hwaiso *xfer_iso;
1330
1331			xfer_hdr = &seg->xfer_hdr;
1332			xfer_iso = container_of(xfer_hdr,
1333						struct wa_xfer_hwaiso, hdr);
1334			packet_desc = ((void *)xfer_hdr) + xfer_hdr_size;
1335			/*
1336			 * Copy values from the 0th header. Segment specific
1337			 * values are set below.
1338			 */
1339			memcpy(xfer_hdr, xfer_hdr0, xfer_hdr_size);
1340			xfer_hdr->bTransferSegment = cnt;
1341			xfer_hdr->dwTransferLength =
1342				cpu_to_le32(seg->isoc_size);
1343			xfer_iso->dwNumOfPackets =
1344					cpu_to_le32(seg->isoc_frame_count);
1345			__wa_setup_isoc_packet_descr(packet_desc, xfer, seg);
1346			seg->status = WA_SEG_READY;
1347		}
1348	} else {
1349		transfer_size = urb->transfer_buffer_length;
1350		xfer_hdr0->dwTransferLength = transfer_size > xfer->seg_size ?
1351			cpu_to_le32(xfer->seg_size) :
1352			cpu_to_le32(transfer_size);
1353		transfer_size -=  xfer->seg_size;
1354		for (cnt = 1; cnt < xfer->segs; cnt++) {
1355			xfer_hdr = &xfer->seg[cnt]->xfer_hdr;
1356			memcpy(xfer_hdr, xfer_hdr0, xfer_hdr_size);
1357			xfer_hdr->bTransferSegment = cnt;
1358			xfer_hdr->dwTransferLength =
1359				transfer_size > xfer->seg_size ?
1360					cpu_to_le32(xfer->seg_size)
1361					: cpu_to_le32(transfer_size);
1362			xfer->seg[cnt]->status = WA_SEG_READY;
1363			transfer_size -=  xfer->seg_size;
1364		}
1365	}
1366	xfer_hdr->bTransferSegment |= 0x80;	/* this is the last segment */
1367	result = 0;
1368error_setup_segs:
1369error_setup_sizes:
1370	return result;
1371}
1372
1373/*
1374 *
1375 *
1376 * rpipe->seg_lock is held!
1377 */
1378static int __wa_seg_submit(struct wa_rpipe *rpipe, struct wa_xfer *xfer,
1379			   struct wa_seg *seg, int *dto_done)
1380{
1381	int result;
1382
1383	/* default to done unless we encounter a multi-frame isoc segment. */
1384	*dto_done = 1;
1385
1386	/*
1387	 * Take a ref for each segment urb so the xfer cannot disappear until
1388	 * all of the callbacks run.
1389	 */
1390	wa_xfer_get(xfer);
1391	/* submit the transfer request. */
1392	seg->status = WA_SEG_SUBMITTED;
1393	result = usb_submit_urb(&seg->tr_urb, GFP_ATOMIC);
1394	if (result < 0) {
1395		pr_err("%s: xfer %p#%u: REQ submit failed: %d\n",
1396		       __func__, xfer, seg->index, result);
1397		wa_xfer_put(xfer);
1398		goto error_tr_submit;
1399	}
1400	/* submit the isoc packet descriptor if present. */
1401	if (seg->isoc_pack_desc_urb) {
1402		wa_xfer_get(xfer);
1403		result = usb_submit_urb(seg->isoc_pack_desc_urb, GFP_ATOMIC);
1404		seg->isoc_frame_index = 0;
1405		if (result < 0) {
1406			pr_err("%s: xfer %p#%u: ISO packet descriptor submit failed: %d\n",
1407			       __func__, xfer, seg->index, result);
1408			wa_xfer_put(xfer);
1409			goto error_iso_pack_desc_submit;
1410		}
1411	}
1412	/* submit the out data if this is an out request. */
1413	if (seg->dto_urb) {
1414		struct wahc *wa = xfer->wa;
1415		wa_xfer_get(xfer);
1416		result = usb_submit_urb(seg->dto_urb, GFP_ATOMIC);
1417		if (result < 0) {
1418			pr_err("%s: xfer %p#%u: DTO submit failed: %d\n",
1419			       __func__, xfer, seg->index, result);
1420			wa_xfer_put(xfer);
1421			goto error_dto_submit;
1422		}
1423		/*
1424		 * If this segment contains more than one isoc frame, hold
1425		 * onto the dto resource until we send all frames.
1426		 * Only applies to non-Alereon devices.
1427		 */
1428		if (((wa->quirks & WUSB_QUIRK_ALEREON_HWA_CONCAT_ISOC) == 0)
1429			&& (seg->isoc_frame_count > 1))
1430			*dto_done = 0;
1431	}
1432	rpipe_avail_dec(rpipe);
1433	return 0;
1434
1435error_dto_submit:
1436	usb_unlink_urb(seg->isoc_pack_desc_urb);
1437error_iso_pack_desc_submit:
1438	usb_unlink_urb(&seg->tr_urb);
1439error_tr_submit:
1440	seg->status = WA_SEG_ERROR;
1441	seg->result = result;
1442	*dto_done = 1;
1443	return result;
1444}
1445
1446/*
1447 * Execute more queued request segments until the maximum concurrent allowed.
1448 * Return true if the DTO resource was acquired and released.
1449 *
1450 * The ugly unlock/lock sequence on the error path is needed as the
1451 * xfer->lock normally nests the seg_lock and not viceversa.
1452 */
1453static int __wa_xfer_delayed_run(struct wa_rpipe *rpipe, int *dto_waiting)
1454{
1455	int result, dto_acquired = 0, dto_done = 0;
1456	struct device *dev = &rpipe->wa->usb_iface->dev;
1457	struct wa_seg *seg;
1458	struct wa_xfer *xfer;
1459	unsigned long flags;
1460
1461	*dto_waiting = 0;
1462
1463	spin_lock_irqsave(&rpipe->seg_lock, flags);
1464	while (atomic_read(&rpipe->segs_available) > 0
1465	      && !list_empty(&rpipe->seg_list)
1466	      && (dto_acquired = __wa_dto_try_get(rpipe->wa))) {
1467		seg = list_first_entry(&(rpipe->seg_list), struct wa_seg,
1468				 list_node);
1469		list_del(&seg->list_node);
1470		xfer = seg->xfer;
1471		/*
1472		 * Get a reference to the xfer in case the callbacks for the
1473		 * URBs submitted by __wa_seg_submit attempt to complete
1474		 * the xfer before this function completes.
1475		 */
1476		wa_xfer_get(xfer);
1477		result = __wa_seg_submit(rpipe, xfer, seg, &dto_done);
1478		/* release the dto resource if this RPIPE is done with it. */
1479		if (dto_done)
1480			__wa_dto_put(rpipe->wa);
1481		dev_dbg(dev, "xfer %p ID %08X#%u submitted from delayed [%d segments available] %d\n",
1482			xfer, wa_xfer_id(xfer), seg->index,
1483			atomic_read(&rpipe->segs_available), result);
1484		if (unlikely(result < 0)) {
1485			int done;
1486
1487			spin_unlock_irqrestore(&rpipe->seg_lock, flags);
1488			spin_lock_irqsave(&xfer->lock, flags);
1489			__wa_xfer_abort(xfer);
1490			/*
1491			 * This seg was marked as submitted when it was put on
1492			 * the RPIPE seg_list.  Mark it done.
1493			 */
1494			xfer->segs_done++;
1495			done = __wa_xfer_is_done(xfer);
1496			spin_unlock_irqrestore(&xfer->lock, flags);
1497			if (done)
1498				wa_xfer_completion(xfer);
1499			spin_lock_irqsave(&rpipe->seg_lock, flags);
1500		}
1501		wa_xfer_put(xfer);
1502	}
1503	/*
1504	 * Mark this RPIPE as waiting if dto was not acquired, there are
1505	 * delayed segs and no active transfers to wake us up later.
1506	 */
1507	if (!dto_acquired && !list_empty(&rpipe->seg_list)
1508		&& (atomic_read(&rpipe->segs_available) ==
1509			le16_to_cpu(rpipe->descr.wRequests)))
1510		*dto_waiting = 1;
1511
1512	spin_unlock_irqrestore(&rpipe->seg_lock, flags);
1513
1514	return dto_done;
1515}
1516
1517static void wa_xfer_delayed_run(struct wa_rpipe *rpipe)
1518{
1519	int dto_waiting;
1520	int dto_done = __wa_xfer_delayed_run(rpipe, &dto_waiting);
1521
1522	/*
1523	 * If this RPIPE is waiting on the DTO resource, add it to the tail of
1524	 * the waiting list.
1525	 * Otherwise, if the WA DTO resource was acquired and released by
1526	 *  __wa_xfer_delayed_run, another RPIPE may have attempted to acquire
1527	 * DTO and failed during that time.  Check the delayed list and process
1528	 * any waiters.  Start searching from the next RPIPE index.
1529	 */
1530	if (dto_waiting)
1531		wa_add_delayed_rpipe(rpipe->wa, rpipe);
1532	else if (dto_done)
1533		wa_check_for_delayed_rpipes(rpipe->wa);
1534}
1535
1536/*
1537 *
1538 * xfer->lock is taken
1539 *
1540 * On failure submitting we just stop submitting and return error;
1541 * wa_urb_enqueue_b() will execute the completion path
1542 */
1543static int __wa_xfer_submit(struct wa_xfer *xfer)
1544{
1545	int result, dto_acquired = 0, dto_done = 0, dto_waiting = 0;
1546	struct wahc *wa = xfer->wa;
1547	struct device *dev = &wa->usb_iface->dev;
1548	unsigned cnt;
1549	struct wa_seg *seg;
1550	unsigned long flags;
1551	struct wa_rpipe *rpipe = xfer->ep->hcpriv;
1552	size_t maxrequests = le16_to_cpu(rpipe->descr.wRequests);
1553	u8 available;
1554	u8 empty;
1555
1556	spin_lock_irqsave(&wa->xfer_list_lock, flags);
1557	list_add_tail(&xfer->list_node, &wa->xfer_list);
1558	spin_unlock_irqrestore(&wa->xfer_list_lock, flags);
1559
1560	BUG_ON(atomic_read(&rpipe->segs_available) > maxrequests);
1561	result = 0;
1562	spin_lock_irqsave(&rpipe->seg_lock, flags);
1563	for (cnt = 0; cnt < xfer->segs; cnt++) {
1564		int delay_seg = 1;
1565
1566		available = atomic_read(&rpipe->segs_available);
1567		empty = list_empty(&rpipe->seg_list);
1568		seg = xfer->seg[cnt];
1569		if (available && empty) {
1570			/*
1571			 * Only attempt to acquire DTO if we have a segment
1572			 * to send.
1573			 */
1574			dto_acquired = __wa_dto_try_get(rpipe->wa);
1575			if (dto_acquired) {
1576				delay_seg = 0;
1577				result = __wa_seg_submit(rpipe, xfer, seg,
1578							&dto_done);
1579				dev_dbg(dev, "xfer %p ID 0x%08X#%u: available %u empty %u submitted\n",
1580					xfer, wa_xfer_id(xfer), cnt, available,
1581					empty);
1582				if (dto_done)
1583					__wa_dto_put(rpipe->wa);
1584
1585				if (result < 0) {
1586					__wa_xfer_abort(xfer);
1587					goto error_seg_submit;
1588				}
1589			}
1590		}
1591
1592		if (delay_seg) {
1593			dev_dbg(dev, "xfer %p ID 0x%08X#%u: available %u empty %u delayed\n",
1594				xfer, wa_xfer_id(xfer), cnt, available,  empty);
1595			seg->status = WA_SEG_DELAYED;
1596			list_add_tail(&seg->list_node, &rpipe->seg_list);
1597		}
1598		xfer->segs_submitted++;
1599	}
1600error_seg_submit:
1601	/*
1602	 * Mark this RPIPE as waiting if dto was not acquired, there are
1603	 * delayed segs and no active transfers to wake us up later.
1604	 */
1605	if (!dto_acquired && !list_empty(&rpipe->seg_list)
1606		&& (atomic_read(&rpipe->segs_available) ==
1607			le16_to_cpu(rpipe->descr.wRequests)))
1608		dto_waiting = 1;
1609	spin_unlock_irqrestore(&rpipe->seg_lock, flags);
1610
1611	if (dto_waiting)
1612		wa_add_delayed_rpipe(rpipe->wa, rpipe);
1613	else if (dto_done)
1614		wa_check_for_delayed_rpipes(rpipe->wa);
1615
1616	return result;
1617}
1618
1619/*
1620 * Second part of a URB/transfer enqueuement
1621 *
1622 * Assumes this comes from wa_urb_enqueue() [maybe through
1623 * wa_urb_enqueue_run()]. At this point:
1624 *
1625 * xfer->wa	filled and refcounted
1626 * xfer->ep	filled with rpipe refcounted if
1627 *              delayed == 0
1628 * xfer->urb 	filled and refcounted (this is the case when called
1629 *              from wa_urb_enqueue() as we come from usb_submit_urb()
1630 *              and when called by wa_urb_enqueue_run(), as we took an
1631 *              extra ref dropped by _run() after we return).
1632 * xfer->gfp	filled
1633 *
1634 * If we fail at __wa_xfer_submit(), then we just check if we are done
1635 * and if so, we run the completion procedure. However, if we are not
1636 * yet done, we do nothing and wait for the completion handlers from
1637 * the submitted URBs or from the xfer-result path to kick in. If xfer
1638 * result never kicks in, the xfer will timeout from the USB code and
1639 * dequeue() will be called.
1640 */
1641static int wa_urb_enqueue_b(struct wa_xfer *xfer)
1642{
1643	int result;
1644	unsigned long flags;
1645	struct urb *urb = xfer->urb;
1646	struct wahc *wa = xfer->wa;
1647	struct wusbhc *wusbhc = wa->wusb;
1648	struct wusb_dev *wusb_dev;
1649	unsigned done;
1650
1651	result = rpipe_get_by_ep(wa, xfer->ep, urb, xfer->gfp);
1652	if (result < 0) {
1653		pr_err("%s: error_rpipe_get\n", __func__);
1654		goto error_rpipe_get;
1655	}
1656	result = -ENODEV;
1657	/* FIXME: segmentation broken -- kills DWA */
1658	mutex_lock(&wusbhc->mutex);		/* get a WUSB dev */
1659	if (urb->dev == NULL) {
1660		mutex_unlock(&wusbhc->mutex);
1661		pr_err("%s: error usb dev gone\n", __func__);
1662		goto error_dev_gone;
1663	}
1664	wusb_dev = __wusb_dev_get_by_usb_dev(wusbhc, urb->dev);
1665	if (wusb_dev == NULL) {
1666		mutex_unlock(&wusbhc->mutex);
1667		dev_err(&(urb->dev->dev), "%s: error wusb dev gone\n",
1668			__func__);
1669		goto error_dev_gone;
1670	}
1671	mutex_unlock(&wusbhc->mutex);
1672
1673	spin_lock_irqsave(&xfer->lock, flags);
1674	xfer->wusb_dev = wusb_dev;
1675	result = urb->status;
1676	if (urb->status != -EINPROGRESS) {
1677		dev_err(&(urb->dev->dev), "%s: error_dequeued\n", __func__);
1678		goto error_dequeued;
1679	}
1680
1681	result = __wa_xfer_setup(xfer, urb);
1682	if (result < 0) {
1683		dev_err(&(urb->dev->dev), "%s: error_xfer_setup\n", __func__);
1684		goto error_xfer_setup;
1685	}
1686	/*
1687	 * Get a xfer reference since __wa_xfer_submit starts asynchronous
1688	 * operations that may try to complete the xfer before this function
1689	 * exits.
1690	 */
1691	wa_xfer_get(xfer);
1692	result = __wa_xfer_submit(xfer);
1693	if (result < 0) {
1694		dev_err(&(urb->dev->dev), "%s: error_xfer_submit\n", __func__);
1695		goto error_xfer_submit;
1696	}
1697	spin_unlock_irqrestore(&xfer->lock, flags);
1698	wa_xfer_put(xfer);
1699	return 0;
1700
1701	/*
1702	 * this is basically wa_xfer_completion() broken up wa_xfer_giveback()
1703	 * does a wa_xfer_put() that will call wa_xfer_destroy() and undo
1704	 * setup().
1705	 */
1706error_xfer_setup:
1707error_dequeued:
1708	spin_unlock_irqrestore(&xfer->lock, flags);
1709	/* FIXME: segmentation broken, kills DWA */
1710	if (wusb_dev)
1711		wusb_dev_put(wusb_dev);
1712error_dev_gone:
1713	rpipe_put(xfer->ep->hcpriv);
1714error_rpipe_get:
1715	xfer->result = result;
1716	return result;
1717
1718error_xfer_submit:
1719	done = __wa_xfer_is_done(xfer);
1720	xfer->result = result;
1721	spin_unlock_irqrestore(&xfer->lock, flags);
1722	if (done)
1723		wa_xfer_completion(xfer);
1724	wa_xfer_put(xfer);
1725	/* return success since the completion routine will run. */
1726	return 0;
1727}
1728
1729/*
1730 * Execute the delayed transfers in the Wire Adapter @wa
1731 *
1732 * We need to be careful here, as dequeue() could be called in the
1733 * middle.  That's why we do the whole thing under the
1734 * wa->xfer_list_lock. If dequeue() jumps in, it first locks xfer->lock
1735 * and then checks the list -- so as we would be acquiring in inverse
1736 * order, we move the delayed list to a separate list while locked and then
1737 * submit them without the list lock held.
1738 */
1739void wa_urb_enqueue_run(struct work_struct *ws)
1740{
1741	struct wahc *wa = container_of(ws, struct wahc, xfer_enqueue_work);
1742	struct wa_xfer *xfer, *next;
1743	struct urb *urb;
1744	LIST_HEAD(tmp_list);
1745
1746	/* Create a copy of the wa->xfer_delayed_list while holding the lock */
1747	spin_lock_irq(&wa->xfer_list_lock);
1748	list_cut_position(&tmp_list, &wa->xfer_delayed_list,
1749			wa->xfer_delayed_list.prev);
1750	spin_unlock_irq(&wa->xfer_list_lock);
1751
1752	/*
1753	 * enqueue from temp list without list lock held since wa_urb_enqueue_b
1754	 * can take xfer->lock as well as lock mutexes.
1755	 */
1756	list_for_each_entry_safe(xfer, next, &tmp_list, list_node) {
1757		list_del_init(&xfer->list_node);
1758
1759		urb = xfer->urb;
1760		if (wa_urb_enqueue_b(xfer) < 0)
1761			wa_xfer_giveback(xfer);
1762		usb_put_urb(urb);	/* taken when queuing */
1763	}
1764}
1765EXPORT_SYMBOL_GPL(wa_urb_enqueue_run);
1766
1767/*
1768 * Process the errored transfers on the Wire Adapter outside of interrupt.
1769 */
1770void wa_process_errored_transfers_run(struct work_struct *ws)
1771{
1772	struct wahc *wa = container_of(ws, struct wahc, xfer_error_work);
1773	struct wa_xfer *xfer, *next;
1774	LIST_HEAD(tmp_list);
1775
1776	pr_info("%s: Run delayed STALL processing.\n", __func__);
1777
1778	/* Create a copy of the wa->xfer_errored_list while holding the lock */
1779	spin_lock_irq(&wa->xfer_list_lock);
1780	list_cut_position(&tmp_list, &wa->xfer_errored_list,
1781			wa->xfer_errored_list.prev);
1782	spin_unlock_irq(&wa->xfer_list_lock);
1783
1784	/*
1785	 * run rpipe_clear_feature_stalled from temp list without list lock
1786	 * held.
1787	 */
1788	list_for_each_entry_safe(xfer, next, &tmp_list, list_node) {
1789		struct usb_host_endpoint *ep;
1790		unsigned long flags;
1791		struct wa_rpipe *rpipe;
1792
1793		spin_lock_irqsave(&xfer->lock, flags);
1794		ep = xfer->ep;
1795		rpipe = ep->hcpriv;
1796		spin_unlock_irqrestore(&xfer->lock, flags);
1797
1798		/* clear RPIPE feature stalled without holding a lock. */
1799		rpipe_clear_feature_stalled(wa, ep);
1800
1801		/* complete the xfer. This removes it from the tmp list. */
1802		wa_xfer_completion(xfer);
1803
1804		/* check for work. */
1805		wa_xfer_delayed_run(rpipe);
1806	}
1807}
1808EXPORT_SYMBOL_GPL(wa_process_errored_transfers_run);
1809
1810/*
1811 * Submit a transfer to the Wire Adapter in a delayed way
1812 *
1813 * The process of enqueuing involves possible sleeps() [see
1814 * enqueue_b(), for the rpipe_get() and the mutex_lock()]. If we are
1815 * in an atomic section, we defer the enqueue_b() call--else we call direct.
1816 *
1817 * @urb: We own a reference to it done by the HCI Linux USB stack that
1818 *       will be given up by calling usb_hcd_giveback_urb() or by
1819 *       returning error from this function -> ergo we don't have to
1820 *       refcount it.
1821 */
1822int wa_urb_enqueue(struct wahc *wa, struct usb_host_endpoint *ep,
1823		   struct urb *urb, gfp_t gfp)
1824{
1825	int result;
1826	struct device *dev = &wa->usb_iface->dev;
1827	struct wa_xfer *xfer;
1828	unsigned long my_flags;
1829	unsigned cant_sleep = irqs_disabled() | in_atomic();
1830
1831	if ((urb->transfer_buffer == NULL)
1832	    && (urb->sg == NULL)
1833	    && !(urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)
1834	    && urb->transfer_buffer_length != 0) {
1835		dev_err(dev, "BUG? urb %p: NULL xfer buffer & NODMA\n", urb);
1836		dump_stack();
1837	}
1838
1839	spin_lock_irqsave(&wa->xfer_list_lock, my_flags);
1840	result = usb_hcd_link_urb_to_ep(&(wa->wusb->usb_hcd), urb);
1841	spin_unlock_irqrestore(&wa->xfer_list_lock, my_flags);
1842	if (result < 0)
1843		goto error_link_urb;
1844
1845	result = -ENOMEM;
1846	xfer = kzalloc(sizeof(*xfer), gfp);
1847	if (xfer == NULL)
1848		goto error_kmalloc;
1849
1850	result = -ENOENT;
1851	if (urb->status != -EINPROGRESS)	/* cancelled */
1852		goto error_dequeued;		/* before starting? */
1853	wa_xfer_init(xfer);
1854	xfer->wa = wa_get(wa);
1855	xfer->urb = urb;
1856	xfer->gfp = gfp;
1857	xfer->ep = ep;
1858	urb->hcpriv = xfer;
1859
1860	dev_dbg(dev, "xfer %p urb %p pipe 0x%02x [%d bytes] %s %s %s\n",
1861		xfer, urb, urb->pipe, urb->transfer_buffer_length,
1862		urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP ? "dma" : "nodma",
1863		urb->pipe & USB_DIR_IN ? "inbound" : "outbound",
1864		cant_sleep ? "deferred" : "inline");
1865
1866	if (cant_sleep) {
1867		usb_get_urb(urb);
1868		spin_lock_irqsave(&wa->xfer_list_lock, my_flags);
1869		list_add_tail(&xfer->list_node, &wa->xfer_delayed_list);
1870		spin_unlock_irqrestore(&wa->xfer_list_lock, my_flags);
1871		queue_work(wusbd, &wa->xfer_enqueue_work);
1872	} else {
1873		result = wa_urb_enqueue_b(xfer);
1874		if (result < 0) {
1875			/*
1876			 * URB submit/enqueue failed.  Clean up, return an
1877			 * error and do not run the callback.  This avoids
1878			 * an infinite submit/complete loop.
1879			 */
1880			dev_err(dev, "%s: URB enqueue failed: %d\n",
1881			   __func__, result);
1882			wa_put(xfer->wa);
1883			wa_xfer_put(xfer);
1884			spin_lock_irqsave(&wa->xfer_list_lock, my_flags);
1885			usb_hcd_unlink_urb_from_ep(&(wa->wusb->usb_hcd), urb);
1886			spin_unlock_irqrestore(&wa->xfer_list_lock, my_flags);
1887			return result;
1888		}
1889	}
1890	return 0;
1891
1892error_dequeued:
1893	kfree(xfer);
1894error_kmalloc:
1895	spin_lock_irqsave(&wa->xfer_list_lock, my_flags);
1896	usb_hcd_unlink_urb_from_ep(&(wa->wusb->usb_hcd), urb);
1897	spin_unlock_irqrestore(&wa->xfer_list_lock, my_flags);
1898error_link_urb:
1899	return result;
1900}
1901EXPORT_SYMBOL_GPL(wa_urb_enqueue);
1902
1903/*
1904 * Dequeue a URB and make sure uwb_hcd_giveback_urb() [completion
1905 * handler] is called.
1906 *
1907 * Until a transfer goes successfully through wa_urb_enqueue() it
1908 * needs to be dequeued with completion calling; when stuck in delayed
1909 * or before wa_xfer_setup() is called, we need to do completion.
1910 *
1911 *  not setup  If there is no hcpriv yet, that means that that enqueue
1912 *             still had no time to set the xfer up. Because
1913 *             urb->status should be other than -EINPROGRESS,
1914 *             enqueue() will catch that and bail out.
1915 *
1916 * If the transfer has gone through setup, we just need to clean it
1917 * up. If it has gone through submit(), we have to abort it [with an
1918 * asynch request] and then make sure we cancel each segment.
1919 *
1920 */
1921int wa_urb_dequeue(struct wahc *wa, struct urb *urb, int status)
1922{
1923	unsigned long flags, flags2;
1924	struct wa_xfer *xfer;
1925	struct wa_seg *seg;
1926	struct wa_rpipe *rpipe;
1927	unsigned cnt, done = 0, xfer_abort_pending;
1928	unsigned rpipe_ready = 0;
1929	int result;
1930
1931	/* check if it is safe to unlink. */
1932	spin_lock_irqsave(&wa->xfer_list_lock, flags);
1933	result = usb_hcd_check_unlink_urb(&(wa->wusb->usb_hcd), urb, status);
1934	if ((result == 0) && urb->hcpriv) {
1935		/*
1936		 * Get a xfer ref to prevent a race with wa_xfer_giveback
1937		 * cleaning up the xfer while we are working with it.
1938		 */
1939		wa_xfer_get(urb->hcpriv);
1940	}
1941	spin_unlock_irqrestore(&wa->xfer_list_lock, flags);
1942	if (result)
1943		return result;
1944
1945	xfer = urb->hcpriv;
1946	if (xfer == NULL)
1947		return -ENOENT;
1948	spin_lock_irqsave(&xfer->lock, flags);
1949	pr_debug("%s: DEQUEUE xfer id 0x%08X\n", __func__, wa_xfer_id(xfer));
1950	rpipe = xfer->ep->hcpriv;
1951	if (rpipe == NULL) {
1952		pr_debug("%s: xfer %p id 0x%08X has no RPIPE.  %s",
1953			__func__, xfer, wa_xfer_id(xfer),
1954			"Probably already aborted.\n" );
1955		result = -ENOENT;
1956		goto out_unlock;
1957	}
1958	/*
1959	 * Check for done to avoid racing with wa_xfer_giveback and completing
1960	 * twice.
1961	 */
1962	if (__wa_xfer_is_done(xfer)) {
1963		pr_debug("%s: xfer %p id 0x%08X already done.\n", __func__,
1964			xfer, wa_xfer_id(xfer));
1965		result = -ENOENT;
1966		goto out_unlock;
1967	}
1968	/* Check the delayed list -> if there, release and complete */
1969	spin_lock_irqsave(&wa->xfer_list_lock, flags2);
1970	if (!list_empty(&xfer->list_node) && xfer->seg == NULL)
1971		goto dequeue_delayed;
1972	spin_unlock_irqrestore(&wa->xfer_list_lock, flags2);
1973	if (xfer->seg == NULL)  	/* still hasn't reached */
1974		goto out_unlock;	/* setup(), enqueue_b() completes */
1975	/* Ok, the xfer is in flight already, it's been setup and submitted.*/
1976	xfer_abort_pending = __wa_xfer_abort(xfer) >= 0;
1977	/*
1978	 * grab the rpipe->seg_lock here to prevent racing with
1979	 * __wa_xfer_delayed_run.
1980	 */
1981	spin_lock(&rpipe->seg_lock);
1982	for (cnt = 0; cnt < xfer->segs; cnt++) {
1983		seg = xfer->seg[cnt];
1984		pr_debug("%s: xfer id 0x%08X#%d status = %d\n",
1985			__func__, wa_xfer_id(xfer), cnt, seg->status);
1986		switch (seg->status) {
1987		case WA_SEG_NOTREADY:
1988		case WA_SEG_READY:
1989			printk(KERN_ERR "xfer %p#%u: dequeue bad state %u\n",
1990			       xfer, cnt, seg->status);
1991			WARN_ON(1);
1992			break;
1993		case WA_SEG_DELAYED:
1994			/*
1995			 * delete from rpipe delayed list.  If no segments on
1996			 * this xfer have been submitted, __wa_xfer_is_done will
1997			 * trigger a giveback below.  Otherwise, the submitted
1998			 * segments will be completed in the DTI interrupt.
1999			 */
2000			seg->status = WA_SEG_ABORTED;
2001			seg->result = -ENOENT;
2002			list_del(&seg->list_node);
2003			xfer->segs_done++;
2004			break;
2005		case WA_SEG_DONE:
2006		case WA_SEG_ERROR:
2007		case WA_SEG_ABORTED:
2008			break;
2009			/*
2010			 * The buf_in data for a segment in the
2011			 * WA_SEG_DTI_PENDING state is actively being read.
2012			 * Let wa_buf_in_cb handle it since it will be called
2013			 * and will increment xfer->segs_done.  Cleaning up
2014			 * here could cause wa_buf_in_cb to access the xfer
2015			 * after it has been completed/freed.
2016			 */
2017		case WA_SEG_DTI_PENDING:
2018			break;
2019			/*
2020			 * In the states below, the HWA device already knows
2021			 * about the transfer.  If an abort request was sent,
2022			 * allow the HWA to process it and wait for the
2023			 * results.  Otherwise, the DTI state and seg completed
2024			 * counts can get out of sync.
2025			 */
2026		case WA_SEG_SUBMITTED:
2027		case WA_SEG_PENDING:
2028			/*
2029			 * Check if the abort was successfully sent.  This could
2030			 * be false if the HWA has been removed but we haven't
2031			 * gotten the disconnect notification yet.
2032			 */
2033			if (!xfer_abort_pending) {
2034				seg->status = WA_SEG_ABORTED;
2035				rpipe_ready = rpipe_avail_inc(rpipe);
2036				xfer->segs_done++;
2037			}
2038			break;
2039		}
2040	}
2041	spin_unlock(&rpipe->seg_lock);
2042	xfer->result = urb->status;	/* -ENOENT or -ECONNRESET */
2043	done = __wa_xfer_is_done(xfer);
2044	spin_unlock_irqrestore(&xfer->lock, flags);
2045	if (done)
2046		wa_xfer_completion(xfer);
2047	if (rpipe_ready)
2048		wa_xfer_delayed_run(rpipe);
2049	wa_xfer_put(xfer);
2050	return result;
2051
2052out_unlock:
2053	spin_unlock_irqrestore(&xfer->lock, flags);
2054	wa_xfer_put(xfer);
2055	return result;
2056
2057dequeue_delayed:
2058	list_del_init(&xfer->list_node);
2059	spin_unlock_irqrestore(&wa->xfer_list_lock, flags2);
2060	xfer->result = urb->status;
2061	spin_unlock_irqrestore(&xfer->lock, flags);
2062	wa_xfer_giveback(xfer);
2063	wa_xfer_put(xfer);
2064	usb_put_urb(urb);		/* we got a ref in enqueue() */
2065	return 0;
2066}
2067EXPORT_SYMBOL_GPL(wa_urb_dequeue);
2068
2069/*
2070 * Translation from WA status codes (WUSB1.0 Table 8.15) to errno
2071 * codes
2072 *
2073 * Positive errno values are internal inconsistencies and should be
2074 * flagged louder. Negative are to be passed up to the user in the
2075 * normal way.
2076 *
2077 * @status: USB WA status code -- high two bits are stripped.
2078 */
2079static int wa_xfer_status_to_errno(u8 status)
2080{
2081	int errno;
2082	u8 real_status = status;
2083	static int xlat[] = {
2084		[WA_XFER_STATUS_SUCCESS] = 		0,
2085		[WA_XFER_STATUS_HALTED] = 		-EPIPE,
2086		[WA_XFER_STATUS_DATA_BUFFER_ERROR] = 	-ENOBUFS,
2087		[WA_XFER_STATUS_BABBLE] = 		-EOVERFLOW,
2088		[WA_XFER_RESERVED] = 			EINVAL,
2089		[WA_XFER_STATUS_NOT_FOUND] =		0,
2090		[WA_XFER_STATUS_INSUFFICIENT_RESOURCE] = -ENOMEM,
2091		[WA_XFER_STATUS_TRANSACTION_ERROR] = 	-EILSEQ,
2092		[WA_XFER_STATUS_ABORTED] =		-ENOENT,
2093		[WA_XFER_STATUS_RPIPE_NOT_READY] = 	EINVAL,
2094		[WA_XFER_INVALID_FORMAT] = 		EINVAL,
2095		[WA_XFER_UNEXPECTED_SEGMENT_NUMBER] = 	EINVAL,
2096		[WA_XFER_STATUS_RPIPE_TYPE_MISMATCH] = 	EINVAL,
2097	};
2098	status &= 0x3f;
2099
2100	if (status == 0)
2101		return 0;
2102	if (status >= ARRAY_SIZE(xlat)) {
2103		printk_ratelimited(KERN_ERR "%s(): BUG? "
2104			       "Unknown WA transfer status 0x%02x\n",
2105			       __func__, real_status);
2106		return -EINVAL;
2107	}
2108	errno = xlat[status];
2109	if (unlikely(errno > 0)) {
2110		printk_ratelimited(KERN_ERR "%s(): BUG? "
2111			       "Inconsistent WA status: 0x%02x\n",
2112			       __func__, real_status);
2113		errno = -errno;
2114	}
2115	return errno;
2116}
2117
2118/*
2119 * If a last segment flag and/or a transfer result error is encountered,
2120 * no other segment transfer results will be returned from the device.
2121 * Mark the remaining submitted or pending xfers as completed so that
2122 * the xfer will complete cleanly.
2123 *
2124 * xfer->lock must be held
2125 *
2126 */
2127static void wa_complete_remaining_xfer_segs(struct wa_xfer *xfer,
2128		int starting_index, enum wa_seg_status status)
2129{
2130	int index;
2131	struct wa_rpipe *rpipe = xfer->ep->hcpriv;
2132
2133	for (index = starting_index; index < xfer->segs_submitted; index++) {
2134		struct wa_seg *current_seg = xfer->seg[index];
2135
2136		BUG_ON(current_seg == NULL);
2137
2138		switch (current_seg->status) {
2139		case WA_SEG_SUBMITTED:
2140		case WA_SEG_PENDING:
2141		case WA_SEG_DTI_PENDING:
2142			rpipe_avail_inc(rpipe);
2143		/*
2144		 * do not increment RPIPE avail for the WA_SEG_DELAYED case
2145		 * since it has not been submitted to the RPIPE.
2146		 */
2147		case WA_SEG_DELAYED:
2148			xfer->segs_done++;
2149			current_seg->status = status;
2150			break;
2151		case WA_SEG_ABORTED:
2152			break;
2153		default:
2154			WARN(1, "%s: xfer 0x%08X#%d. bad seg status = %d\n",
2155				__func__, wa_xfer_id(xfer), index,
2156				current_seg->status);
2157			break;
2158		}
2159	}
2160}
2161
2162/* Populate the given urb based on the current isoc transfer state. */
2163static int __wa_populate_buf_in_urb_isoc(struct wahc *wa,
2164	struct urb *buf_in_urb, struct wa_xfer *xfer, struct wa_seg *seg)
2165{
2166	int urb_start_frame = seg->isoc_frame_index + seg->isoc_frame_offset;
2167	int seg_index, total_len = 0, urb_frame_index = urb_start_frame;
2168	struct usb_iso_packet_descriptor *iso_frame_desc =
2169						xfer->urb->iso_frame_desc;
2170	const int dti_packet_size = usb_endpoint_maxp(wa->dti_epd);
2171	int next_frame_contiguous;
2172	struct usb_iso_packet_descriptor *iso_frame;
2173
2174	BUG_ON(buf_in_urb->status == -EINPROGRESS);
2175
2176	/*
2177	 * If the current frame actual_length is contiguous with the next frame
2178	 * and actual_length is a multiple of the DTI endpoint max packet size,
2179	 * combine the current frame with the next frame in a single URB.  This
2180	 * reduces the number of URBs that must be submitted in that case.
2181	 */
2182	seg_index = seg->isoc_frame_index;
2183	do {
2184		next_frame_contiguous = 0;
2185
2186		iso_frame = &iso_frame_desc[urb_frame_index];
2187		total_len += iso_frame->actual_length;
2188		++urb_frame_index;
2189		++seg_index;
2190
2191		if (seg_index < seg->isoc_frame_count) {
2192			struct usb_iso_packet_descriptor *next_iso_frame;
2193
2194			next_iso_frame = &iso_frame_desc[urb_frame_index];
2195
2196			if ((iso_frame->offset + iso_frame->actual_length) ==
2197				next_iso_frame->offset)
2198				next_frame_contiguous = 1;
2199		}
2200	} while (next_frame_contiguous
2201			&& ((iso_frame->actual_length % dti_packet_size) == 0));
2202
2203	/* this should always be 0 before a resubmit. */
2204	buf_in_urb->num_mapped_sgs	= 0;
2205	buf_in_urb->transfer_dma = xfer->urb->transfer_dma +
2206		iso_frame_desc[urb_start_frame].offset;
2207	buf_in_urb->transfer_buffer_length = total_len;
2208	buf_in_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
2209	buf_in_urb->transfer_buffer = NULL;
2210	buf_in_urb->sg = NULL;
2211	buf_in_urb->num_sgs = 0;
2212	buf_in_urb->context = seg;
2213
2214	/* return the number of frames included in this URB. */
2215	return seg_index - seg->isoc_frame_index;
2216}
2217
2218/* Populate the given urb based on the current transfer state. */
2219static int wa_populate_buf_in_urb(struct urb *buf_in_urb, struct wa_xfer *xfer,
2220	unsigned int seg_idx, unsigned int bytes_transferred)
2221{
2222	int result = 0;
2223	struct wa_seg *seg = xfer->seg[seg_idx];
2224
2225	BUG_ON(buf_in_urb->status == -EINPROGRESS);
2226	/* this should always be 0 before a resubmit. */
2227	buf_in_urb->num_mapped_sgs	= 0;
2228
2229	if (xfer->is_dma) {
2230		buf_in_urb->transfer_dma = xfer->urb->transfer_dma
2231			+ (seg_idx * xfer->seg_size);
2232		buf_in_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
2233		buf_in_urb->transfer_buffer = NULL;
2234		buf_in_urb->sg = NULL;
2235		buf_in_urb->num_sgs = 0;
2236	} else {
2237		/* do buffer or SG processing. */
2238		buf_in_urb->transfer_flags &= ~URB_NO_TRANSFER_DMA_MAP;
2239
2240		if (xfer->urb->transfer_buffer) {
2241			buf_in_urb->transfer_buffer =
2242				xfer->urb->transfer_buffer
2243				+ (seg_idx * xfer->seg_size);
2244			buf_in_urb->sg = NULL;
2245			buf_in_urb->num_sgs = 0;
2246		} else {
2247			/* allocate an SG list to store seg_size bytes
2248				and copy the subset of the xfer->urb->sg
2249				that matches the buffer subset we are
2250				about to read. */
2251			buf_in_urb->sg = wa_xfer_create_subset_sg(
2252				xfer->urb->sg,
2253				seg_idx * xfer->seg_size,
2254				bytes_transferred,
2255				&(buf_in_urb->num_sgs));
2256
2257			if (!(buf_in_urb->sg)) {
2258				buf_in_urb->num_sgs	= 0;
2259				result = -ENOMEM;
2260			}
2261			buf_in_urb->transfer_buffer = NULL;
2262		}
2263	}
2264	buf_in_urb->transfer_buffer_length = bytes_transferred;
2265	buf_in_urb->context = seg;
2266
2267	return result;
2268}
2269
2270/*
2271 * Process a xfer result completion message
2272 *
2273 * inbound transfers: need to schedule a buf_in_urb read
2274 *
2275 * FIXME: this function needs to be broken up in parts
2276 */
2277static void wa_xfer_result_chew(struct wahc *wa, struct wa_xfer *xfer,
2278		struct wa_xfer_result *xfer_result)
2279{
2280	int result;
2281	struct device *dev = &wa->usb_iface->dev;
2282	unsigned long flags;
2283	unsigned int seg_idx;
2284	struct wa_seg *seg;
2285	struct wa_rpipe *rpipe;
2286	unsigned done = 0;
2287	u8 usb_status;
2288	unsigned rpipe_ready = 0;
2289	unsigned bytes_transferred = le32_to_cpu(xfer_result->dwTransferLength);
2290	struct urb *buf_in_urb = &(wa->buf_in_urbs[0]);
2291
2292	spin_lock_irqsave(&xfer->lock, flags);
2293	seg_idx = xfer_result->bTransferSegment & 0x7f;
2294	if (unlikely(seg_idx >= xfer->segs))
2295		goto error_bad_seg;
2296	seg = xfer->seg[seg_idx];
2297	rpipe = xfer->ep->hcpriv;
2298	usb_status = xfer_result->bTransferStatus;
2299	dev_dbg(dev, "xfer %p ID 0x%08X#%u: bTransferStatus 0x%02x (seg status %u)\n",
2300		xfer, wa_xfer_id(xfer), seg_idx, usb_status, seg->status);
2301	if (seg->status == WA_SEG_ABORTED
2302	    || seg->status == WA_SEG_ERROR)	/* already handled */
2303		goto segment_aborted;
2304	if (seg->status == WA_SEG_SUBMITTED)	/* ops, got here */
2305		seg->status = WA_SEG_PENDING;	/* before wa_seg{_dto}_cb() */
2306	if (seg->status != WA_SEG_PENDING) {
2307		if (printk_ratelimit())
2308			dev_err(dev, "xfer %p#%u: Bad segment state %u\n",
2309				xfer, seg_idx, seg->status);
2310		seg->status = WA_SEG_PENDING;	/* workaround/"fix" it */
2311	}
2312	if (usb_status & 0x80) {
2313		seg->result = wa_xfer_status_to_errno(usb_status);
2314		dev_err(dev, "DTI: xfer %p 0x%08X:#%u failed (0x%02x)\n",
2315			xfer, xfer->id, seg->index, usb_status);
2316		seg->status = ((usb_status & 0x7F) == WA_XFER_STATUS_ABORTED) ?
2317			WA_SEG_ABORTED : WA_SEG_ERROR;
2318		goto error_complete;
2319	}
2320	/* FIXME: we ignore warnings, tally them for stats */
2321	if (usb_status & 0x40) 		/* Warning?... */
2322		usb_status = 0;		/* ... pass */
2323	/*
2324	 * If the last segment bit is set, complete the remaining segments.
2325	 * When the current segment is completed, either in wa_buf_in_cb for
2326	 * transfers with data or below for no data, the xfer will complete.
2327	 */
2328	if (xfer_result->bTransferSegment & 0x80)
2329		wa_complete_remaining_xfer_segs(xfer, seg->index + 1,
2330			WA_SEG_DONE);
2331	if (usb_pipeisoc(xfer->urb->pipe)
2332		&& (le32_to_cpu(xfer_result->dwNumOfPackets) > 0)) {
2333		/* set up WA state to read the isoc packet status next. */
2334		wa->dti_isoc_xfer_in_progress = wa_xfer_id(xfer);
2335		wa->dti_isoc_xfer_seg = seg_idx;
2336		wa->dti_state = WA_DTI_ISOC_PACKET_STATUS_PENDING;
2337	} else if (xfer->is_inbound && !usb_pipeisoc(xfer->urb->pipe)
2338			&& (bytes_transferred > 0)) {
2339		/* IN data phase: read to buffer */
2340		seg->status = WA_SEG_DTI_PENDING;
2341		result = wa_populate_buf_in_urb(buf_in_urb, xfer, seg_idx,
2342			bytes_transferred);
2343		if (result < 0)
2344			goto error_buf_in_populate;
2345		++(wa->active_buf_in_urbs);
2346		result = usb_submit_urb(buf_in_urb, GFP_ATOMIC);
2347		if (result < 0) {
2348			--(wa->active_buf_in_urbs);
2349			goto error_submit_buf_in;
2350		}
2351	} else {
2352		/* OUT data phase or no data, complete it -- */
2353		seg->result = bytes_transferred;
2354		rpipe_ready = rpipe_avail_inc(rpipe);
2355		done = __wa_xfer_mark_seg_as_done(xfer, seg, WA_SEG_DONE);
2356	}
2357	spin_unlock_irqrestore(&xfer->lock, flags);
2358	if (done)
2359		wa_xfer_completion(xfer);
2360	if (rpipe_ready)
2361		wa_xfer_delayed_run(rpipe);
2362	return;
2363
2364error_submit_buf_in:
2365	if (edc_inc(&wa->dti_edc, EDC_MAX_ERRORS, EDC_ERROR_TIMEFRAME)) {
2366		dev_err(dev, "DTI: URB max acceptable errors "
2367			"exceeded, resetting device\n");
2368		wa_reset_all(wa);
2369	}
2370	if (printk_ratelimit())
2371		dev_err(dev, "xfer %p#%u: can't submit DTI data phase: %d\n",
2372			xfer, seg_idx, result);
2373	seg->result = result;
2374	kfree(buf_in_urb->sg);
2375	buf_in_urb->sg = NULL;
2376error_buf_in_populate:
2377	__wa_xfer_abort(xfer);
2378	seg->status = WA_SEG_ERROR;
2379error_complete:
2380	xfer->segs_done++;
2381	rpipe_ready = rpipe_avail_inc(rpipe);
2382	wa_complete_remaining_xfer_segs(xfer, seg->index + 1, seg->status);
2383	done = __wa_xfer_is_done(xfer);
2384	/*
2385	 * queue work item to clear STALL for control endpoints.
2386	 * Otherwise, let endpoint_reset take care of it.
2387	 */
2388	if (((usb_status & 0x3f) == WA_XFER_STATUS_HALTED) &&
2389		usb_endpoint_xfer_control(&xfer->ep->desc) &&
2390		done) {
2391
2392		dev_info(dev, "Control EP stall.  Queue delayed work.\n");
2393		spin_lock(&wa->xfer_list_lock);
2394		/* move xfer from xfer_list to xfer_errored_list. */
2395		list_move_tail(&xfer->list_node, &wa->xfer_errored_list);
2396		spin_unlock(&wa->xfer_list_lock);
2397		spin_unlock_irqrestore(&xfer->lock, flags);
2398		queue_work(wusbd, &wa->xfer_error_work);
2399	} else {
2400		spin_unlock_irqrestore(&xfer->lock, flags);
2401		if (done)
2402			wa_xfer_completion(xfer);
2403		if (rpipe_ready)
2404			wa_xfer_delayed_run(rpipe);
2405	}
2406
2407	return;
2408
2409error_bad_seg:
2410	spin_unlock_irqrestore(&xfer->lock, flags);
2411	wa_urb_dequeue(wa, xfer->urb, -ENOENT);
2412	if (printk_ratelimit())
2413		dev_err(dev, "xfer %p#%u: bad segment\n", xfer, seg_idx);
2414	if (edc_inc(&wa->dti_edc, EDC_MAX_ERRORS, EDC_ERROR_TIMEFRAME)) {
2415		dev_err(dev, "DTI: URB max acceptable errors "
2416			"exceeded, resetting device\n");
2417		wa_reset_all(wa);
2418	}
2419	return;
2420
2421segment_aborted:
2422	/* nothing to do, as the aborter did the completion */
2423	spin_unlock_irqrestore(&xfer->lock, flags);
2424}
2425
2426/*
2427 * Process a isochronous packet status message
2428 *
2429 * inbound transfers: need to schedule a buf_in_urb read
2430 */
2431static int wa_process_iso_packet_status(struct wahc *wa, struct urb *urb)
2432{
2433	struct device *dev = &wa->usb_iface->dev;
2434	struct wa_xfer_packet_status_hwaiso *packet_status;
2435	struct wa_xfer_packet_status_len_hwaiso *status_array;
2436	struct wa_xfer *xfer;
2437	unsigned long flags;
2438	struct wa_seg *seg;
2439	struct wa_rpipe *rpipe;
2440	unsigned done = 0, dti_busy = 0, data_frame_count = 0, seg_index;
2441	unsigned first_frame_index = 0, rpipe_ready = 0;
2442	int expected_size;
2443
2444	/* We have a xfer result buffer; check it */
2445	dev_dbg(dev, "DTI: isoc packet status %d bytes at %p\n",
2446		urb->actual_length, urb->transfer_buffer);
2447	packet_status = (struct wa_xfer_packet_status_hwaiso *)(wa->dti_buf);
2448	if (packet_status->bPacketType != WA_XFER_ISO_PACKET_STATUS) {
2449		dev_err(dev, "DTI Error: isoc packet status--bad type 0x%02x\n",
2450			packet_status->bPacketType);
2451		goto error_parse_buffer;
2452	}
2453	xfer = wa_xfer_get_by_id(wa, wa->dti_isoc_xfer_in_progress);
2454	if (xfer == NULL) {
2455		dev_err(dev, "DTI Error: isoc packet status--unknown xfer 0x%08x\n",
2456			wa->dti_isoc_xfer_in_progress);
2457		goto error_parse_buffer;
2458	}
2459	spin_lock_irqsave(&xfer->lock, flags);
2460	if (unlikely(wa->dti_isoc_xfer_seg >= xfer->segs))
2461		goto error_bad_seg;
2462	seg = xfer->seg[wa->dti_isoc_xfer_seg];
2463	rpipe = xfer->ep->hcpriv;
2464	expected_size = sizeof(*packet_status) +
2465			(sizeof(packet_status->PacketStatus[0]) *
2466			seg->isoc_frame_count);
2467	if (urb->actual_length != expected_size) {
2468		dev_err(dev, "DTI Error: isoc packet status--bad urb length (%d bytes vs %d needed)\n",
2469			urb->actual_length, expected_size);
2470		goto error_bad_seg;
2471	}
2472	if (le16_to_cpu(packet_status->wLength) != expected_size) {
2473		dev_err(dev, "DTI Error: isoc packet status--bad length %u\n",
2474			le16_to_cpu(packet_status->wLength));
2475		goto error_bad_seg;
2476	}
2477	/* write isoc packet status and lengths back to the xfer urb. */
2478	status_array = packet_status->PacketStatus;
2479	xfer->urb->start_frame =
2480		wa->wusb->usb_hcd.driver->get_frame_number(&wa->wusb->usb_hcd);
2481	for (seg_index = 0; seg_index < seg->isoc_frame_count; ++seg_index) {
2482		struct usb_iso_packet_descriptor *iso_frame_desc =
2483			xfer->urb->iso_frame_desc;
2484		const int xfer_frame_index =
2485			seg->isoc_frame_offset + seg_index;
2486
2487		iso_frame_desc[xfer_frame_index].status =
2488			wa_xfer_status_to_errno(
2489			le16_to_cpu(status_array[seg_index].PacketStatus));
2490		iso_frame_desc[xfer_frame_index].actual_length =
2491			le16_to_cpu(status_array[seg_index].PacketLength);
2492		/* track the number of frames successfully transferred. */
2493		if (iso_frame_desc[xfer_frame_index].actual_length > 0) {
2494			/* save the starting frame index for buf_in_urb. */
2495			if (!data_frame_count)
2496				first_frame_index = seg_index;
2497			++data_frame_count;
2498		}
2499	}
2500
2501	if (xfer->is_inbound && data_frame_count) {
2502		int result, total_frames_read = 0, urb_index = 0;
2503		struct urb *buf_in_urb;
2504
2505		/* IN data phase: read to buffer */
2506		seg->status = WA_SEG_DTI_PENDING;
2507
2508		/* start with the first frame with data. */
2509		seg->isoc_frame_index = first_frame_index;
2510		/* submit up to WA_MAX_BUF_IN_URBS read URBs. */
2511		do {
2512			int urb_frame_index, urb_frame_count;
2513			struct usb_iso_packet_descriptor *iso_frame_desc;
2514
2515			buf_in_urb = &(wa->buf_in_urbs[urb_index]);
2516			urb_frame_count = __wa_populate_buf_in_urb_isoc(wa,
2517				buf_in_urb, xfer, seg);
2518			/* advance frame index to start of next read URB. */
2519			seg->isoc_frame_index += urb_frame_count;
2520			total_frames_read += urb_frame_count;
2521
2522			++(wa->active_buf_in_urbs);
2523			result = usb_submit_urb(buf_in_urb, GFP_ATOMIC);
2524
2525			/* skip 0-byte frames. */
2526			urb_frame_index =
2527				seg->isoc_frame_offset + seg->isoc_frame_index;
2528			iso_frame_desc =
2529				&(xfer->urb->iso_frame_desc[urb_frame_index]);
2530			while ((seg->isoc_frame_index <
2531						seg->isoc_frame_count) &&
2532				 (iso_frame_desc->actual_length == 0)) {
2533				++(seg->isoc_frame_index);
2534				++iso_frame_desc;
2535			}
2536			++urb_index;
2537
2538		} while ((result == 0) && (urb_index < WA_MAX_BUF_IN_URBS)
2539				&& (seg->isoc_frame_index <
2540						seg->isoc_frame_count));
2541
2542		if (result < 0) {
2543			--(wa->active_buf_in_urbs);
2544			dev_err(dev, "DTI Error: Could not submit buf in URB (%d)",
2545				result);
2546			wa_reset_all(wa);
2547		} else if (data_frame_count > total_frames_read)
2548			/* If we need to read more frames, set DTI busy. */
2549			dti_busy = 1;
2550	} else {
2551		/* OUT transfer or no more IN data, complete it -- */
2552		rpipe_ready = rpipe_avail_inc(rpipe);
2553		done = __wa_xfer_mark_seg_as_done(xfer, seg, WA_SEG_DONE);
2554	}
2555	spin_unlock_irqrestore(&xfer->lock, flags);
2556	if (dti_busy)
2557		wa->dti_state = WA_DTI_BUF_IN_DATA_PENDING;
2558	else
2559		wa->dti_state = WA_DTI_TRANSFER_RESULT_PENDING;
2560	if (done)
2561		wa_xfer_completion(xfer);
2562	if (rpipe_ready)
2563		wa_xfer_delayed_run(rpipe);
2564	wa_xfer_put(xfer);
2565	return dti_busy;
2566
2567error_bad_seg:
2568	spin_unlock_irqrestore(&xfer->lock, flags);
2569	wa_xfer_put(xfer);
2570error_parse_buffer:
2571	return dti_busy;
2572}
2573
2574/*
2575 * Callback for the IN data phase
2576 *
2577 * If successful transition state; otherwise, take a note of the
2578 * error, mark this segment done and try completion.
2579 *
2580 * Note we don't access until we are sure that the transfer hasn't
2581 * been cancelled (ECONNRESET, ENOENT), which could mean that
2582 * seg->xfer could be already gone.
2583 */
2584static void wa_buf_in_cb(struct urb *urb)
2585{
2586	struct wa_seg *seg = urb->context;
2587	struct wa_xfer *xfer = seg->xfer;
2588	struct wahc *wa;
2589	struct device *dev;
2590	struct wa_rpipe *rpipe;
2591	unsigned rpipe_ready = 0, isoc_data_frame_count = 0;
2592	unsigned long flags;
2593	int resubmit_dti = 0, active_buf_in_urbs;
2594	u8 done = 0;
2595
2596	/* free the sg if it was used. */
2597	kfree(urb->sg);
2598	urb->sg = NULL;
2599
2600	spin_lock_irqsave(&xfer->lock, flags);
2601	wa = xfer->wa;
2602	dev = &wa->usb_iface->dev;
2603	--(wa->active_buf_in_urbs);
2604	active_buf_in_urbs = wa->active_buf_in_urbs;
2605
2606	if (usb_pipeisoc(xfer->urb->pipe)) {
2607		struct usb_iso_packet_descriptor *iso_frame_desc =
2608			xfer->urb->iso_frame_desc;
2609		int	seg_index;
2610
2611		/*
2612		 * Find the next isoc frame with data and count how many
2613		 * frames with data remain.
2614		 */
2615		seg_index = seg->isoc_frame_index;
2616		while (seg_index < seg->isoc_frame_count) {
2617			const int urb_frame_index =
2618				seg->isoc_frame_offset + seg_index;
2619
2620			if (iso_frame_desc[urb_frame_index].actual_length > 0) {
2621				/* save the index of the next frame with data */
2622				if (!isoc_data_frame_count)
2623					seg->isoc_frame_index = seg_index;
2624				++isoc_data_frame_count;
2625			}
2626			++seg_index;
2627		}
2628	}
2629	spin_unlock_irqrestore(&xfer->lock, flags);
2630
2631	switch (urb->status) {
2632	case 0:
2633		spin_lock_irqsave(&xfer->lock, flags);
2634
2635		seg->result += urb->actual_length;
2636		if (isoc_data_frame_count > 0) {
2637			int result, urb_frame_count;
2638
2639			/* submit a read URB for the next frame with data. */
2640			urb_frame_count = __wa_populate_buf_in_urb_isoc(wa, urb,
2641				 xfer, seg);
2642			/* advance index to start of next read URB. */
2643			seg->isoc_frame_index += urb_frame_count;
2644			++(wa->active_buf_in_urbs);
2645			result = usb_submit_urb(urb, GFP_ATOMIC);
2646			if (result < 0) {
2647				--(wa->active_buf_in_urbs);
2648				dev_err(dev, "DTI Error: Could not submit buf in URB (%d)",
2649					result);
2650				wa_reset_all(wa);
2651			}
2652			/*
2653			 * If we are in this callback and
2654			 * isoc_data_frame_count > 0, it means that the dti_urb
2655			 * submission was delayed in wa_dti_cb.  Once
2656			 * we submit the last buf_in_urb, we can submit the
2657			 * delayed dti_urb.
2658			 */
2659			  resubmit_dti = (isoc_data_frame_count ==
2660							urb_frame_count);
2661		} else if (active_buf_in_urbs == 0) {
2662			rpipe = xfer->ep->hcpriv;
2663			dev_dbg(dev,
2664				"xfer %p 0x%08X#%u: data in done (%zu bytes)\n",
2665				xfer, wa_xfer_id(xfer), seg->index,
2666				seg->result);
2667			rpipe_ready = rpipe_avail_inc(rpipe);
2668			done = __wa_xfer_mark_seg_as_done(xfer, seg,
2669					WA_SEG_DONE);
2670		}
2671		spin_unlock_irqrestore(&xfer->lock, flags);
2672		if (done)
2673			wa_xfer_completion(xfer);
2674		if (rpipe_ready)
2675			wa_xfer_delayed_run(rpipe);
2676		break;
2677	case -ECONNRESET:	/* URB unlinked; no need to do anything */
2678	case -ENOENT:		/* as it was done by the who unlinked us */
2679		break;
2680	default:		/* Other errors ... */
2681		/*
2682		 * Error on data buf read.  Only resubmit DTI if it hasn't
2683		 * already been done by previously hitting this error or by a
2684		 * successful completion of the previous buf_in_urb.
2685		 */
2686		resubmit_dti = wa->dti_state != WA_DTI_TRANSFER_RESULT_PENDING;
2687		spin_lock_irqsave(&xfer->lock, flags);
2688		rpipe = xfer->ep->hcpriv;
2689		if (printk_ratelimit())
2690			dev_err(dev, "xfer %p 0x%08X#%u: data in error %d\n",
2691				xfer, wa_xfer_id(xfer), seg->index,
2692				urb->status);
2693		if (edc_inc(&wa->nep_edc, EDC_MAX_ERRORS,
2694			    EDC_ERROR_TIMEFRAME)){
2695			dev_err(dev, "DTO: URB max acceptable errors "
2696				"exceeded, resetting device\n");
2697			wa_reset_all(wa);
2698		}
2699		seg->result = urb->status;
2700		rpipe_ready = rpipe_avail_inc(rpipe);
2701		if (active_buf_in_urbs == 0)
2702			done = __wa_xfer_mark_seg_as_done(xfer, seg,
2703				WA_SEG_ERROR);
2704		else
2705			__wa_xfer_abort(xfer);
2706		spin_unlock_irqrestore(&xfer->lock, flags);
2707		if (done)
2708			wa_xfer_completion(xfer);
2709		if (rpipe_ready)
2710			wa_xfer_delayed_run(rpipe);
2711	}
2712
2713	if (resubmit_dti) {
2714		int result;
2715
2716		wa->dti_state = WA_DTI_TRANSFER_RESULT_PENDING;
2717
2718		result = usb_submit_urb(wa->dti_urb, GFP_ATOMIC);
2719		if (result < 0) {
2720			dev_err(dev, "DTI Error: Could not submit DTI URB (%d)\n",
2721				result);
2722			wa_reset_all(wa);
2723		}
2724	}
2725}
2726
2727/*
2728 * Handle an incoming transfer result buffer
2729 *
2730 * Given a transfer result buffer, it completes the transfer (possibly
2731 * scheduling and buffer in read) and then resubmits the DTI URB for a
2732 * new transfer result read.
2733 *
2734 *
2735 * The xfer_result DTI URB state machine
2736 *
2737 * States: OFF | RXR (Read-Xfer-Result) | RBI (Read-Buffer-In)
2738 *
2739 * We start in OFF mode, the first xfer_result notification [through
2740 * wa_handle_notif_xfer()] moves us to RXR by posting the DTI-URB to
2741 * read.
2742 *
2743 * We receive a buffer -- if it is not a xfer_result, we complain and
2744 * repost the DTI-URB. If it is a xfer_result then do the xfer seg
2745 * request accounting. If it is an IN segment, we move to RBI and post
2746 * a BUF-IN-URB to the right buffer. The BUF-IN-URB callback will
2747 * repost the DTI-URB and move to RXR state. if there was no IN
2748 * segment, it will repost the DTI-URB.
2749 *
2750 * We go back to OFF when we detect a ENOENT or ESHUTDOWN (or too many
2751 * errors) in the URBs.
2752 */
2753static void wa_dti_cb(struct urb *urb)
2754{
2755	int result, dti_busy = 0;
2756	struct wahc *wa = urb->context;
2757	struct device *dev = &wa->usb_iface->dev;
2758	u32 xfer_id;
2759	u8 usb_status;
2760
2761	BUG_ON(wa->dti_urb != urb);
2762	switch (wa->dti_urb->status) {
2763	case 0:
2764		if (wa->dti_state == WA_DTI_TRANSFER_RESULT_PENDING) {
2765			struct wa_xfer_result *xfer_result;
2766			struct wa_xfer *xfer;
2767
2768			/* We have a xfer result buffer; check it */
2769			dev_dbg(dev, "DTI: xfer result %d bytes at %p\n",
2770				urb->actual_length, urb->transfer_buffer);
2771			if (urb->actual_length != sizeof(*xfer_result)) {
2772				dev_err(dev, "DTI Error: xfer result--bad size xfer result (%d bytes vs %zu needed)\n",
2773					urb->actual_length,
2774					sizeof(*xfer_result));
2775				break;
2776			}
2777			xfer_result = (struct wa_xfer_result *)(wa->dti_buf);
2778			if (xfer_result->hdr.bLength != sizeof(*xfer_result)) {
2779				dev_err(dev, "DTI Error: xfer result--bad header length %u\n",
2780					xfer_result->hdr.bLength);
2781				break;
2782			}
2783			if (xfer_result->hdr.bNotifyType != WA_XFER_RESULT) {
2784				dev_err(dev, "DTI Error: xfer result--bad header type 0x%02x\n",
2785					xfer_result->hdr.bNotifyType);
2786				break;
2787			}
2788			xfer_id = le32_to_cpu(xfer_result->dwTransferID);
2789			usb_status = xfer_result->bTransferStatus & 0x3f;
2790			if (usb_status == WA_XFER_STATUS_NOT_FOUND) {
2791				/* taken care of already */
2792				dev_dbg(dev, "%s: xfer 0x%08X#%u not found.\n",
2793					__func__, xfer_id,
2794					xfer_result->bTransferSegment & 0x7f);
2795				break;
2796			}
2797			xfer = wa_xfer_get_by_id(wa, xfer_id);
2798			if (xfer == NULL) {
2799				/* FIXME: transaction not found. */
2800				dev_err(dev, "DTI Error: xfer result--unknown xfer 0x%08x (status 0x%02x)\n",
2801					xfer_id, usb_status);
2802				break;
2803			}
2804			wa_xfer_result_chew(wa, xfer, xfer_result);
2805			wa_xfer_put(xfer);
2806		} else if (wa->dti_state == WA_DTI_ISOC_PACKET_STATUS_PENDING) {
2807			dti_busy = wa_process_iso_packet_status(wa, urb);
2808		} else {
2809			dev_err(dev, "DTI Error: unexpected EP state = %d\n",
2810				wa->dti_state);
2811		}
2812		break;
2813	case -ENOENT:		/* (we killed the URB)...so, no broadcast */
2814	case -ESHUTDOWN:	/* going away! */
2815		dev_dbg(dev, "DTI: going down! %d\n", urb->status);
2816		goto out;
2817	default:
2818		/* Unknown error */
2819		if (edc_inc(&wa->dti_edc, EDC_MAX_ERRORS,
2820			    EDC_ERROR_TIMEFRAME)) {
2821			dev_err(dev, "DTI: URB max acceptable errors "
2822				"exceeded, resetting device\n");
2823			wa_reset_all(wa);
2824			goto out;
2825		}
2826		if (printk_ratelimit())
2827			dev_err(dev, "DTI: URB error %d\n", urb->status);
2828		break;
2829	}
2830
2831	/* Resubmit the DTI URB if we are not busy processing isoc in frames. */
2832	if (!dti_busy) {
2833		result = usb_submit_urb(wa->dti_urb, GFP_ATOMIC);
2834		if (result < 0) {
2835			dev_err(dev, "DTI Error: Could not submit DTI URB (%d)\n",
2836				result);
2837			wa_reset_all(wa);
2838		}
2839	}
2840out:
2841	return;
2842}
2843
2844/*
2845 * Initialize the DTI URB for reading transfer result notifications and also
2846 * the buffer-in URB, for reading buffers. Then we just submit the DTI URB.
2847 */
2848int wa_dti_start(struct wahc *wa)
2849{
2850	const struct usb_endpoint_descriptor *dti_epd = wa->dti_epd;
2851	struct device *dev = &wa->usb_iface->dev;
2852	int result = -ENOMEM, index;
2853
2854	if (wa->dti_urb != NULL)	/* DTI URB already started */
2855		goto out;
2856
2857	wa->dti_urb = usb_alloc_urb(0, GFP_KERNEL);
2858	if (wa->dti_urb == NULL) {
2859		dev_err(dev, "Can't allocate DTI URB\n");
2860		goto error_dti_urb_alloc;
2861	}
2862	usb_fill_bulk_urb(
2863		wa->dti_urb, wa->usb_dev,
2864		usb_rcvbulkpipe(wa->usb_dev, 0x80 | dti_epd->bEndpointAddress),
2865		wa->dti_buf, wa->dti_buf_size,
2866		wa_dti_cb, wa);
2867
2868	/* init the buf in URBs */
2869	for (index = 0; index < WA_MAX_BUF_IN_URBS; ++index) {
2870		usb_fill_bulk_urb(
2871			&(wa->buf_in_urbs[index]), wa->usb_dev,
2872			usb_rcvbulkpipe(wa->usb_dev,
2873				0x80 | dti_epd->bEndpointAddress),
2874			NULL, 0, wa_buf_in_cb, wa);
2875	}
2876	result = usb_submit_urb(wa->dti_urb, GFP_KERNEL);
2877	if (result < 0) {
2878		dev_err(dev, "DTI Error: Could not submit DTI URB (%d) resetting\n",
2879			result);
2880		goto error_dti_urb_submit;
2881	}
2882out:
2883	return 0;
2884
2885error_dti_urb_submit:
2886	usb_put_urb(wa->dti_urb);
2887	wa->dti_urb = NULL;
2888error_dti_urb_alloc:
2889	return result;
2890}
2891EXPORT_SYMBOL_GPL(wa_dti_start);
2892/*
2893 * Transfer complete notification
2894 *
2895 * Called from the notif.c code. We get a notification on EP2 saying
2896 * that some endpoint has some transfer result data available. We are
2897 * about to read it.
2898 *
2899 * To speed up things, we always have a URB reading the DTI URB; we
2900 * don't really set it up and start it until the first xfer complete
2901 * notification arrives, which is what we do here.
2902 *
2903 * Follow up in wa_dti_cb(), as that's where the whole state
2904 * machine starts.
2905 *
2906 * @wa shall be referenced
2907 */
2908void wa_handle_notif_xfer(struct wahc *wa, struct wa_notif_hdr *notif_hdr)
2909{
2910	struct device *dev = &wa->usb_iface->dev;
2911	struct wa_notif_xfer *notif_xfer;
2912	const struct usb_endpoint_descriptor *dti_epd = wa->dti_epd;
2913
2914	notif_xfer = container_of(notif_hdr, struct wa_notif_xfer, hdr);
2915	BUG_ON(notif_hdr->bNotifyType != WA_NOTIF_TRANSFER);
2916
2917	if ((0x80 | notif_xfer->bEndpoint) != dti_epd->bEndpointAddress) {
2918		/* FIXME: hardcoded limitation, adapt */
2919		dev_err(dev, "BUG: DTI ep is %u, not %u (hack me)\n",
2920			notif_xfer->bEndpoint, dti_epd->bEndpointAddress);
2921		goto error;
2922	}
2923
2924	/* attempt to start the DTI ep processing. */
2925	if (wa_dti_start(wa) < 0)
2926		goto error;
2927
2928	return;
2929
2930error:
2931	wa_reset_all(wa);
2932}