diff options
Diffstat (limited to 'drivers/usb/storage/transport.c')
-rw-r--r-- | drivers/usb/storage/transport.c | 1215 |
1 files changed, 1215 insertions, 0 deletions
diff --git a/drivers/usb/storage/transport.c b/drivers/usb/storage/transport.c new file mode 100644 index 000000000000..d2c3d2fa082e --- /dev/null +++ b/drivers/usb/storage/transport.c | |||
@@ -0,0 +1,1215 @@ | |||
1 | /* Driver for USB Mass Storage compliant devices | ||
2 | * | ||
3 | * $Id: transport.c,v 1.47 2002/04/22 03:39:43 mdharm Exp $ | ||
4 | * | ||
5 | * Current development and maintenance by: | ||
6 | * (c) 1999-2002 Matthew Dharm (mdharm-usb@one-eyed-alien.net) | ||
7 | * | ||
8 | * Developed with the assistance of: | ||
9 | * (c) 2000 David L. Brown, Jr. (usb-storage@davidb.org) | ||
10 | * (c) 2000 Stephen J. Gowdy (SGowdy@lbl.gov) | ||
11 | * (c) 2002 Alan Stern <stern@rowland.org> | ||
12 | * | ||
13 | * Initial work by: | ||
14 | * (c) 1999 Michael Gee (michael@linuxspecific.com) | ||
15 | * | ||
16 | * This driver is based on the 'USB Mass Storage Class' document. This | ||
17 | * describes in detail the protocol used to communicate with such | ||
18 | * devices. Clearly, the designers had SCSI and ATAPI commands in | ||
19 | * mind when they created this document. The commands are all very | ||
20 | * similar to commands in the SCSI-II and ATAPI specifications. | ||
21 | * | ||
22 | * It is important to note that in a number of cases this class | ||
23 | * exhibits class-specific exemptions from the USB specification. | ||
24 | * Notably the usage of NAK, STALL and ACK differs from the norm, in | ||
25 | * that they are used to communicate wait, failed and OK on commands. | ||
26 | * | ||
27 | * Also, for certain devices, the interrupt endpoint is used to convey | ||
28 | * status of a command. | ||
29 | * | ||
30 | * Please see http://www.one-eyed-alien.net/~mdharm/linux-usb for more | ||
31 | * information about this driver. | ||
32 | * | ||
33 | * This program is free software; you can redistribute it and/or modify it | ||
34 | * under the terms of the GNU General Public License as published by the | ||
35 | * Free Software Foundation; either version 2, or (at your option) any | ||
36 | * later version. | ||
37 | * | ||
38 | * This program is distributed in the hope that it will be useful, but | ||
39 | * WITHOUT ANY WARRANTY; without even the implied warranty of | ||
40 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
41 | * General Public License for more details. | ||
42 | * | ||
43 | * You should have received a copy of the GNU General Public License along | ||
44 | * with this program; if not, write to the Free Software Foundation, Inc., | ||
45 | * 675 Mass Ave, Cambridge, MA 02139, USA. | ||
46 | */ | ||
47 | |||
48 | #include <linux/config.h> | ||
49 | #include <linux/sched.h> | ||
50 | #include <linux/errno.h> | ||
51 | #include <linux/slab.h> | ||
52 | |||
53 | #include <scsi/scsi.h> | ||
54 | #include <scsi/scsi_cmnd.h> | ||
55 | #include <scsi/scsi_device.h> | ||
56 | |||
57 | #include "usb.h" | ||
58 | #include "transport.h" | ||
59 | #include "protocol.h" | ||
60 | #include "scsiglue.h" | ||
61 | #include "debug.h" | ||
62 | |||
63 | |||
64 | /*********************************************************************** | ||
65 | * Data transfer routines | ||
66 | ***********************************************************************/ | ||
67 | |||
68 | /* | ||
69 | * This is subtle, so pay attention: | ||
70 | * --------------------------------- | ||
71 | * We're very concerned about races with a command abort. Hanging this code | ||
72 | * is a sure fire way to hang the kernel. (Note that this discussion applies | ||
73 | * only to transactions resulting from a scsi queued-command, since only | ||
74 | * these transactions are subject to a scsi abort. Other transactions, such | ||
75 | * as those occurring during device-specific initialization, must be handled | ||
76 | * by a separate code path.) | ||
77 | * | ||
78 | * The abort function (usb_storage_command_abort() in scsiglue.c) first | ||
79 | * sets the machine state and the ABORTING bit in us->flags to prevent | ||
80 | * new URBs from being submitted. It then calls usb_stor_stop_transport() | ||
81 | * below, which atomically tests-and-clears the URB_ACTIVE bit in us->flags | ||
82 | * to see if the current_urb needs to be stopped. Likewise, the SG_ACTIVE | ||
83 | * bit is tested to see if the current_sg scatter-gather request needs to be | ||
84 | * stopped. The timeout callback routine does much the same thing. | ||
85 | * | ||
86 | * When a disconnect occurs, the DISCONNECTING bit in us->flags is set to | ||
87 | * prevent new URBs from being submitted, and usb_stor_stop_transport() is | ||
88 | * called to stop any ongoing requests. | ||
89 | * | ||
90 | * The submit function first verifies that the submitting is allowed | ||
91 | * (neither ABORTING nor DISCONNECTING bits are set) and that the submit | ||
92 | * completes without errors, and only then sets the URB_ACTIVE bit. This | ||
93 | * prevents the stop_transport() function from trying to cancel the URB | ||
94 | * while the submit call is underway. Next, the submit function must test | ||
95 | * the flags to see if an abort or disconnect occurred during the submission | ||
96 | * or before the URB_ACTIVE bit was set. If so, it's essential to cancel | ||
97 | * the URB if it hasn't been cancelled already (i.e., if the URB_ACTIVE bit | ||
98 | * is still set). Either way, the function must then wait for the URB to | ||
99 | * finish. Note that because the URB_ASYNC_UNLINK flag is set, the URB can | ||
100 | * still be in progress even after a call to usb_unlink_urb() returns. | ||
101 | * | ||
102 | * The idea is that (1) once the ABORTING or DISCONNECTING bit is set, | ||
103 | * either the stop_transport() function or the submitting function | ||
104 | * is guaranteed to call usb_unlink_urb() for an active URB, | ||
105 | * and (2) test_and_clear_bit() prevents usb_unlink_urb() from being | ||
106 | * called more than once or from being called during usb_submit_urb(). | ||
107 | */ | ||
108 | |||
109 | /* This is the completion handler which will wake us up when an URB | ||
110 | * completes. | ||
111 | */ | ||
112 | static void usb_stor_blocking_completion(struct urb *urb, struct pt_regs *regs) | ||
113 | { | ||
114 | struct completion *urb_done_ptr = (struct completion *)urb->context; | ||
115 | |||
116 | complete(urb_done_ptr); | ||
117 | } | ||
118 | |||
119 | /* This is the timeout handler which will cancel an URB when its timeout | ||
120 | * expires. | ||
121 | */ | ||
122 | static void timeout_handler(unsigned long us_) | ||
123 | { | ||
124 | struct us_data *us = (struct us_data *) us_; | ||
125 | |||
126 | if (test_and_clear_bit(US_FLIDX_URB_ACTIVE, &us->flags)) { | ||
127 | US_DEBUGP("Timeout -- cancelling URB\n"); | ||
128 | usb_unlink_urb(us->current_urb); | ||
129 | } | ||
130 | } | ||
131 | |||
132 | /* This is the common part of the URB message submission code | ||
133 | * | ||
134 | * All URBs from the usb-storage driver involved in handling a queued scsi | ||
135 | * command _must_ pass through this function (or something like it) for the | ||
136 | * abort mechanisms to work properly. | ||
137 | */ | ||
138 | static int usb_stor_msg_common(struct us_data *us, int timeout) | ||
139 | { | ||
140 | struct completion urb_done; | ||
141 | struct timer_list to_timer; | ||
142 | int status; | ||
143 | |||
144 | /* don't submit URBs during abort/disconnect processing */ | ||
145 | if (us->flags & ABORTING_OR_DISCONNECTING) | ||
146 | return -EIO; | ||
147 | |||
148 | /* set up data structures for the wakeup system */ | ||
149 | init_completion(&urb_done); | ||
150 | |||
151 | /* fill the common fields in the URB */ | ||
152 | us->current_urb->context = &urb_done; | ||
153 | us->current_urb->actual_length = 0; | ||
154 | us->current_urb->error_count = 0; | ||
155 | us->current_urb->status = 0; | ||
156 | |||
157 | /* we assume that if transfer_buffer isn't us->iobuf then it | ||
158 | * hasn't been mapped for DMA. Yes, this is clunky, but it's | ||
159 | * easier than always having the caller tell us whether the | ||
160 | * transfer buffer has already been mapped. */ | ||
161 | us->current_urb->transfer_flags = | ||
162 | URB_ASYNC_UNLINK | URB_NO_SETUP_DMA_MAP; | ||
163 | if (us->current_urb->transfer_buffer == us->iobuf) | ||
164 | us->current_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; | ||
165 | us->current_urb->transfer_dma = us->iobuf_dma; | ||
166 | us->current_urb->setup_dma = us->cr_dma; | ||
167 | |||
168 | /* submit the URB */ | ||
169 | status = usb_submit_urb(us->current_urb, GFP_NOIO); | ||
170 | if (status) { | ||
171 | /* something went wrong */ | ||
172 | return status; | ||
173 | } | ||
174 | |||
175 | /* since the URB has been submitted successfully, it's now okay | ||
176 | * to cancel it */ | ||
177 | set_bit(US_FLIDX_URB_ACTIVE, &us->flags); | ||
178 | |||
179 | /* did an abort/disconnect occur during the submission? */ | ||
180 | if (us->flags & ABORTING_OR_DISCONNECTING) { | ||
181 | |||
182 | /* cancel the URB, if it hasn't been cancelled already */ | ||
183 | if (test_and_clear_bit(US_FLIDX_URB_ACTIVE, &us->flags)) { | ||
184 | US_DEBUGP("-- cancelling URB\n"); | ||
185 | usb_unlink_urb(us->current_urb); | ||
186 | } | ||
187 | } | ||
188 | |||
189 | /* submit the timeout timer, if a timeout was requested */ | ||
190 | if (timeout > 0) { | ||
191 | init_timer(&to_timer); | ||
192 | to_timer.expires = jiffies + timeout; | ||
193 | to_timer.function = timeout_handler; | ||
194 | to_timer.data = (unsigned long) us; | ||
195 | add_timer(&to_timer); | ||
196 | } | ||
197 | |||
198 | /* wait for the completion of the URB */ | ||
199 | wait_for_completion(&urb_done); | ||
200 | clear_bit(US_FLIDX_URB_ACTIVE, &us->flags); | ||
201 | |||
202 | /* clean up the timeout timer */ | ||
203 | if (timeout > 0) | ||
204 | del_timer_sync(&to_timer); | ||
205 | |||
206 | /* return the URB status */ | ||
207 | return us->current_urb->status; | ||
208 | } | ||
209 | |||
210 | /* | ||
211 | * Transfer one control message, with timeouts, and allowing early | ||
212 | * termination. Return codes are usual -Exxx, *not* USB_STOR_XFER_xxx. | ||
213 | */ | ||
214 | int usb_stor_control_msg(struct us_data *us, unsigned int pipe, | ||
215 | u8 request, u8 requesttype, u16 value, u16 index, | ||
216 | void *data, u16 size, int timeout) | ||
217 | { | ||
218 | int status; | ||
219 | |||
220 | US_DEBUGP("%s: rq=%02x rqtype=%02x value=%04x index=%02x len=%u\n", | ||
221 | __FUNCTION__, request, requesttype, | ||
222 | value, index, size); | ||
223 | |||
224 | /* fill in the devrequest structure */ | ||
225 | us->cr->bRequestType = requesttype; | ||
226 | us->cr->bRequest = request; | ||
227 | us->cr->wValue = cpu_to_le16(value); | ||
228 | us->cr->wIndex = cpu_to_le16(index); | ||
229 | us->cr->wLength = cpu_to_le16(size); | ||
230 | |||
231 | /* fill and submit the URB */ | ||
232 | usb_fill_control_urb(us->current_urb, us->pusb_dev, pipe, | ||
233 | (unsigned char*) us->cr, data, size, | ||
234 | usb_stor_blocking_completion, NULL); | ||
235 | status = usb_stor_msg_common(us, timeout); | ||
236 | |||
237 | /* return the actual length of the data transferred if no error */ | ||
238 | if (status == 0) | ||
239 | status = us->current_urb->actual_length; | ||
240 | return status; | ||
241 | } | ||
242 | |||
243 | /* This is a version of usb_clear_halt() that allows early termination and | ||
244 | * doesn't read the status from the device -- this is because some devices | ||
245 | * crash their internal firmware when the status is requested after a halt. | ||
246 | * | ||
247 | * A definitive list of these 'bad' devices is too difficult to maintain or | ||
248 | * make complete enough to be useful. This problem was first observed on the | ||
249 | * Hagiwara FlashGate DUAL unit. However, bus traces reveal that neither | ||
250 | * MacOS nor Windows checks the status after clearing a halt. | ||
251 | * | ||
252 | * Since many vendors in this space limit their testing to interoperability | ||
253 | * with these two OSes, specification violations like this one are common. | ||
254 | */ | ||
255 | int usb_stor_clear_halt(struct us_data *us, unsigned int pipe) | ||
256 | { | ||
257 | int result; | ||
258 | int endp = usb_pipeendpoint(pipe); | ||
259 | |||
260 | if (usb_pipein (pipe)) | ||
261 | endp |= USB_DIR_IN; | ||
262 | |||
263 | result = usb_stor_control_msg(us, us->send_ctrl_pipe, | ||
264 | USB_REQ_CLEAR_FEATURE, USB_RECIP_ENDPOINT, | ||
265 | USB_ENDPOINT_HALT, endp, | ||
266 | NULL, 0, 3*HZ); | ||
267 | |||
268 | /* reset the endpoint toggle */ | ||
269 | usb_settoggle(us->pusb_dev, usb_pipeendpoint(pipe), | ||
270 | usb_pipeout(pipe), 0); | ||
271 | |||
272 | US_DEBUGP("%s: result = %d\n", __FUNCTION__, result); | ||
273 | return result; | ||
274 | } | ||
275 | |||
276 | |||
277 | /* | ||
278 | * Interpret the results of a URB transfer | ||
279 | * | ||
280 | * This function prints appropriate debugging messages, clears halts on | ||
281 | * non-control endpoints, and translates the status to the corresponding | ||
282 | * USB_STOR_XFER_xxx return code. | ||
283 | */ | ||
284 | static int interpret_urb_result(struct us_data *us, unsigned int pipe, | ||
285 | unsigned int length, int result, unsigned int partial) | ||
286 | { | ||
287 | US_DEBUGP("Status code %d; transferred %u/%u\n", | ||
288 | result, partial, length); | ||
289 | switch (result) { | ||
290 | |||
291 | /* no error code; did we send all the data? */ | ||
292 | case 0: | ||
293 | if (partial != length) { | ||
294 | US_DEBUGP("-- short transfer\n"); | ||
295 | return USB_STOR_XFER_SHORT; | ||
296 | } | ||
297 | |||
298 | US_DEBUGP("-- transfer complete\n"); | ||
299 | return USB_STOR_XFER_GOOD; | ||
300 | |||
301 | /* stalled */ | ||
302 | case -EPIPE: | ||
303 | /* for control endpoints, (used by CB[I]) a stall indicates | ||
304 | * a failed command */ | ||
305 | if (usb_pipecontrol(pipe)) { | ||
306 | US_DEBUGP("-- stall on control pipe\n"); | ||
307 | return USB_STOR_XFER_STALLED; | ||
308 | } | ||
309 | |||
310 | /* for other sorts of endpoint, clear the stall */ | ||
311 | US_DEBUGP("clearing endpoint halt for pipe 0x%x\n", pipe); | ||
312 | if (usb_stor_clear_halt(us, pipe) < 0) | ||
313 | return USB_STOR_XFER_ERROR; | ||
314 | return USB_STOR_XFER_STALLED; | ||
315 | |||
316 | /* timeout or excessively long NAK */ | ||
317 | case -ETIMEDOUT: | ||
318 | US_DEBUGP("-- timeout or NAK\n"); | ||
319 | return USB_STOR_XFER_ERROR; | ||
320 | |||
321 | /* babble - the device tried to send more than we wanted to read */ | ||
322 | case -EOVERFLOW: | ||
323 | US_DEBUGP("-- babble\n"); | ||
324 | return USB_STOR_XFER_LONG; | ||
325 | |||
326 | /* the transfer was cancelled by abort, disconnect, or timeout */ | ||
327 | case -ECONNRESET: | ||
328 | US_DEBUGP("-- transfer cancelled\n"); | ||
329 | return USB_STOR_XFER_ERROR; | ||
330 | |||
331 | /* short scatter-gather read transfer */ | ||
332 | case -EREMOTEIO: | ||
333 | US_DEBUGP("-- short read transfer\n"); | ||
334 | return USB_STOR_XFER_SHORT; | ||
335 | |||
336 | /* abort or disconnect in progress */ | ||
337 | case -EIO: | ||
338 | US_DEBUGP("-- abort or disconnect in progress\n"); | ||
339 | return USB_STOR_XFER_ERROR; | ||
340 | |||
341 | /* the catch-all error case */ | ||
342 | default: | ||
343 | US_DEBUGP("-- unknown error\n"); | ||
344 | return USB_STOR_XFER_ERROR; | ||
345 | } | ||
346 | } | ||
347 | |||
348 | /* | ||
349 | * Transfer one control message, without timeouts, but allowing early | ||
350 | * termination. Return codes are USB_STOR_XFER_xxx. | ||
351 | */ | ||
352 | int usb_stor_ctrl_transfer(struct us_data *us, unsigned int pipe, | ||
353 | u8 request, u8 requesttype, u16 value, u16 index, | ||
354 | void *data, u16 size) | ||
355 | { | ||
356 | int result; | ||
357 | |||
358 | US_DEBUGP("%s: rq=%02x rqtype=%02x value=%04x index=%02x len=%u\n", | ||
359 | __FUNCTION__, request, requesttype, | ||
360 | value, index, size); | ||
361 | |||
362 | /* fill in the devrequest structure */ | ||
363 | us->cr->bRequestType = requesttype; | ||
364 | us->cr->bRequest = request; | ||
365 | us->cr->wValue = cpu_to_le16(value); | ||
366 | us->cr->wIndex = cpu_to_le16(index); | ||
367 | us->cr->wLength = cpu_to_le16(size); | ||
368 | |||
369 | /* fill and submit the URB */ | ||
370 | usb_fill_control_urb(us->current_urb, us->pusb_dev, pipe, | ||
371 | (unsigned char*) us->cr, data, size, | ||
372 | usb_stor_blocking_completion, NULL); | ||
373 | result = usb_stor_msg_common(us, 0); | ||
374 | |||
375 | return interpret_urb_result(us, pipe, size, result, | ||
376 | us->current_urb->actual_length); | ||
377 | } | ||
378 | |||
379 | /* | ||
380 | * Receive one interrupt buffer, without timeouts, but allowing early | ||
381 | * termination. Return codes are USB_STOR_XFER_xxx. | ||
382 | * | ||
383 | * This routine always uses us->recv_intr_pipe as the pipe and | ||
384 | * us->ep_bInterval as the interrupt interval. | ||
385 | */ | ||
386 | static int usb_stor_intr_transfer(struct us_data *us, void *buf, | ||
387 | unsigned int length) | ||
388 | { | ||
389 | int result; | ||
390 | unsigned int pipe = us->recv_intr_pipe; | ||
391 | unsigned int maxp; | ||
392 | |||
393 | US_DEBUGP("%s: xfer %u bytes\n", __FUNCTION__, length); | ||
394 | |||
395 | /* calculate the max packet size */ | ||
396 | maxp = usb_maxpacket(us->pusb_dev, pipe, usb_pipeout(pipe)); | ||
397 | if (maxp > length) | ||
398 | maxp = length; | ||
399 | |||
400 | /* fill and submit the URB */ | ||
401 | usb_fill_int_urb(us->current_urb, us->pusb_dev, pipe, buf, | ||
402 | maxp, usb_stor_blocking_completion, NULL, | ||
403 | us->ep_bInterval); | ||
404 | result = usb_stor_msg_common(us, 0); | ||
405 | |||
406 | return interpret_urb_result(us, pipe, length, result, | ||
407 | us->current_urb->actual_length); | ||
408 | } | ||
409 | |||
410 | /* | ||
411 | * Transfer one buffer via bulk pipe, without timeouts, but allowing early | ||
412 | * termination. Return codes are USB_STOR_XFER_xxx. If the bulk pipe | ||
413 | * stalls during the transfer, the halt is automatically cleared. | ||
414 | */ | ||
415 | int usb_stor_bulk_transfer_buf(struct us_data *us, unsigned int pipe, | ||
416 | void *buf, unsigned int length, unsigned int *act_len) | ||
417 | { | ||
418 | int result; | ||
419 | |||
420 | US_DEBUGP("%s: xfer %u bytes\n", __FUNCTION__, length); | ||
421 | |||
422 | /* fill and submit the URB */ | ||
423 | usb_fill_bulk_urb(us->current_urb, us->pusb_dev, pipe, buf, length, | ||
424 | usb_stor_blocking_completion, NULL); | ||
425 | result = usb_stor_msg_common(us, 0); | ||
426 | |||
427 | /* store the actual length of the data transferred */ | ||
428 | if (act_len) | ||
429 | *act_len = us->current_urb->actual_length; | ||
430 | return interpret_urb_result(us, pipe, length, result, | ||
431 | us->current_urb->actual_length); | ||
432 | } | ||
433 | |||
434 | /* | ||
435 | * Transfer a scatter-gather list via bulk transfer | ||
436 | * | ||
437 | * This function does basically the same thing as usb_stor_bulk_transfer_buf() | ||
438 | * above, but it uses the usbcore scatter-gather library. | ||
439 | */ | ||
440 | static int usb_stor_bulk_transfer_sglist(struct us_data *us, unsigned int pipe, | ||
441 | struct scatterlist *sg, int num_sg, unsigned int length, | ||
442 | unsigned int *act_len) | ||
443 | { | ||
444 | int result; | ||
445 | |||
446 | /* don't submit s-g requests during abort/disconnect processing */ | ||
447 | if (us->flags & ABORTING_OR_DISCONNECTING) | ||
448 | return USB_STOR_XFER_ERROR; | ||
449 | |||
450 | /* initialize the scatter-gather request block */ | ||
451 | US_DEBUGP("%s: xfer %u bytes, %d entries\n", __FUNCTION__, | ||
452 | length, num_sg); | ||
453 | result = usb_sg_init(&us->current_sg, us->pusb_dev, pipe, 0, | ||
454 | sg, num_sg, length, SLAB_NOIO); | ||
455 | if (result) { | ||
456 | US_DEBUGP("usb_sg_init returned %d\n", result); | ||
457 | return USB_STOR_XFER_ERROR; | ||
458 | } | ||
459 | |||
460 | /* since the block has been initialized successfully, it's now | ||
461 | * okay to cancel it */ | ||
462 | set_bit(US_FLIDX_SG_ACTIVE, &us->flags); | ||
463 | |||
464 | /* did an abort/disconnect occur during the submission? */ | ||
465 | if (us->flags & ABORTING_OR_DISCONNECTING) { | ||
466 | |||
467 | /* cancel the request, if it hasn't been cancelled already */ | ||
468 | if (test_and_clear_bit(US_FLIDX_SG_ACTIVE, &us->flags)) { | ||
469 | US_DEBUGP("-- cancelling sg request\n"); | ||
470 | usb_sg_cancel(&us->current_sg); | ||
471 | } | ||
472 | } | ||
473 | |||
474 | /* wait for the completion of the transfer */ | ||
475 | usb_sg_wait(&us->current_sg); | ||
476 | clear_bit(US_FLIDX_SG_ACTIVE, &us->flags); | ||
477 | |||
478 | result = us->current_sg.status; | ||
479 | if (act_len) | ||
480 | *act_len = us->current_sg.bytes; | ||
481 | return interpret_urb_result(us, pipe, length, result, | ||
482 | us->current_sg.bytes); | ||
483 | } | ||
484 | |||
485 | /* | ||
486 | * Transfer an entire SCSI command's worth of data payload over the bulk | ||
487 | * pipe. | ||
488 | * | ||
489 | * Note that this uses usb_stor_bulk_transfer_buf() and | ||
490 | * usb_stor_bulk_transfer_sglist() to achieve its goals -- | ||
491 | * this function simply determines whether we're going to use | ||
492 | * scatter-gather or not, and acts appropriately. | ||
493 | */ | ||
494 | int usb_stor_bulk_transfer_sg(struct us_data* us, unsigned int pipe, | ||
495 | void *buf, unsigned int length_left, int use_sg, int *residual) | ||
496 | { | ||
497 | int result; | ||
498 | unsigned int partial; | ||
499 | |||
500 | /* are we scatter-gathering? */ | ||
501 | if (use_sg) { | ||
502 | /* use the usb core scatter-gather primitives */ | ||
503 | result = usb_stor_bulk_transfer_sglist(us, pipe, | ||
504 | (struct scatterlist *) buf, use_sg, | ||
505 | length_left, &partial); | ||
506 | length_left -= partial; | ||
507 | } else { | ||
508 | /* no scatter-gather, just make the request */ | ||
509 | result = usb_stor_bulk_transfer_buf(us, pipe, buf, | ||
510 | length_left, &partial); | ||
511 | length_left -= partial; | ||
512 | } | ||
513 | |||
514 | /* store the residual and return the error code */ | ||
515 | if (residual) | ||
516 | *residual = length_left; | ||
517 | return result; | ||
518 | } | ||
519 | |||
520 | /*********************************************************************** | ||
521 | * Transport routines | ||
522 | ***********************************************************************/ | ||
523 | |||
524 | /* Invoke the transport and basic error-handling/recovery methods | ||
525 | * | ||
526 | * This is used by the protocol layers to actually send the message to | ||
527 | * the device and receive the response. | ||
528 | */ | ||
529 | void usb_stor_invoke_transport(struct scsi_cmnd *srb, struct us_data *us) | ||
530 | { | ||
531 | int need_auto_sense; | ||
532 | int result; | ||
533 | |||
534 | /* send the command to the transport layer */ | ||
535 | srb->resid = 0; | ||
536 | result = us->transport(srb, us); | ||
537 | |||
538 | /* if the command gets aborted by the higher layers, we need to | ||
539 | * short-circuit all other processing | ||
540 | */ | ||
541 | if (test_bit(US_FLIDX_TIMED_OUT, &us->flags)) { | ||
542 | US_DEBUGP("-- command was aborted\n"); | ||
543 | goto Handle_Abort; | ||
544 | } | ||
545 | |||
546 | /* if there is a transport error, reset and don't auto-sense */ | ||
547 | if (result == USB_STOR_TRANSPORT_ERROR) { | ||
548 | US_DEBUGP("-- transport indicates error, resetting\n"); | ||
549 | us->transport_reset(us); | ||
550 | srb->result = DID_ERROR << 16; | ||
551 | return; | ||
552 | } | ||
553 | |||
554 | /* if the transport provided its own sense data, don't auto-sense */ | ||
555 | if (result == USB_STOR_TRANSPORT_NO_SENSE) { | ||
556 | srb->result = SAM_STAT_CHECK_CONDITION; | ||
557 | return; | ||
558 | } | ||
559 | |||
560 | srb->result = SAM_STAT_GOOD; | ||
561 | |||
562 | /* Determine if we need to auto-sense | ||
563 | * | ||
564 | * I normally don't use a flag like this, but it's almost impossible | ||
565 | * to understand what's going on here if I don't. | ||
566 | */ | ||
567 | need_auto_sense = 0; | ||
568 | |||
569 | /* | ||
570 | * If we're running the CB transport, which is incapable | ||
571 | * of determining status on its own, we will auto-sense | ||
572 | * unless the operation involved a data-in transfer. Devices | ||
573 | * can signal most data-in errors by stalling the bulk-in pipe. | ||
574 | */ | ||
575 | if ((us->protocol == US_PR_CB || us->protocol == US_PR_DPCM_USB) && | ||
576 | srb->sc_data_direction != DMA_FROM_DEVICE) { | ||
577 | US_DEBUGP("-- CB transport device requiring auto-sense\n"); | ||
578 | need_auto_sense = 1; | ||
579 | } | ||
580 | |||
581 | /* | ||
582 | * If we have a failure, we're going to do a REQUEST_SENSE | ||
583 | * automatically. Note that we differentiate between a command | ||
584 | * "failure" and an "error" in the transport mechanism. | ||
585 | */ | ||
586 | if (result == USB_STOR_TRANSPORT_FAILED) { | ||
587 | US_DEBUGP("-- transport indicates command failure\n"); | ||
588 | need_auto_sense = 1; | ||
589 | } | ||
590 | |||
591 | /* | ||
592 | * A short transfer on a command where we don't expect it | ||
593 | * is unusual, but it doesn't mean we need to auto-sense. | ||
594 | */ | ||
595 | if ((srb->resid > 0) && | ||
596 | !((srb->cmnd[0] == REQUEST_SENSE) || | ||
597 | (srb->cmnd[0] == INQUIRY) || | ||
598 | (srb->cmnd[0] == MODE_SENSE) || | ||
599 | (srb->cmnd[0] == LOG_SENSE) || | ||
600 | (srb->cmnd[0] == MODE_SENSE_10))) { | ||
601 | US_DEBUGP("-- unexpectedly short transfer\n"); | ||
602 | } | ||
603 | |||
604 | /* Now, if we need to do the auto-sense, let's do it */ | ||
605 | if (need_auto_sense) { | ||
606 | int temp_result; | ||
607 | void* old_request_buffer; | ||
608 | unsigned short old_sg; | ||
609 | unsigned old_request_bufflen; | ||
610 | unsigned char old_sc_data_direction; | ||
611 | unsigned char old_cmd_len; | ||
612 | unsigned char old_cmnd[MAX_COMMAND_SIZE]; | ||
613 | unsigned long old_serial_number; | ||
614 | int old_resid; | ||
615 | |||
616 | US_DEBUGP("Issuing auto-REQUEST_SENSE\n"); | ||
617 | |||
618 | /* save the old command */ | ||
619 | memcpy(old_cmnd, srb->cmnd, MAX_COMMAND_SIZE); | ||
620 | old_cmd_len = srb->cmd_len; | ||
621 | |||
622 | /* set the command and the LUN */ | ||
623 | memset(srb->cmnd, 0, MAX_COMMAND_SIZE); | ||
624 | srb->cmnd[0] = REQUEST_SENSE; | ||
625 | srb->cmnd[1] = old_cmnd[1] & 0xE0; | ||
626 | srb->cmnd[4] = 18; | ||
627 | |||
628 | /* FIXME: we must do the protocol translation here */ | ||
629 | if (us->subclass == US_SC_RBC || us->subclass == US_SC_SCSI) | ||
630 | srb->cmd_len = 6; | ||
631 | else | ||
632 | srb->cmd_len = 12; | ||
633 | |||
634 | /* set the transfer direction */ | ||
635 | old_sc_data_direction = srb->sc_data_direction; | ||
636 | srb->sc_data_direction = DMA_FROM_DEVICE; | ||
637 | |||
638 | /* use the new buffer we have */ | ||
639 | old_request_buffer = srb->request_buffer; | ||
640 | srb->request_buffer = srb->sense_buffer; | ||
641 | |||
642 | /* set the buffer length for transfer */ | ||
643 | old_request_bufflen = srb->request_bufflen; | ||
644 | srb->request_bufflen = 18; | ||
645 | |||
646 | /* set up for no scatter-gather use */ | ||
647 | old_sg = srb->use_sg; | ||
648 | srb->use_sg = 0; | ||
649 | |||
650 | /* change the serial number -- toggle the high bit*/ | ||
651 | old_serial_number = srb->serial_number; | ||
652 | srb->serial_number ^= 0x80000000; | ||
653 | |||
654 | /* issue the auto-sense command */ | ||
655 | old_resid = srb->resid; | ||
656 | srb->resid = 0; | ||
657 | temp_result = us->transport(us->srb, us); | ||
658 | |||
659 | /* let's clean up right away */ | ||
660 | srb->resid = old_resid; | ||
661 | srb->request_buffer = old_request_buffer; | ||
662 | srb->request_bufflen = old_request_bufflen; | ||
663 | srb->use_sg = old_sg; | ||
664 | srb->serial_number = old_serial_number; | ||
665 | srb->sc_data_direction = old_sc_data_direction; | ||
666 | srb->cmd_len = old_cmd_len; | ||
667 | memcpy(srb->cmnd, old_cmnd, MAX_COMMAND_SIZE); | ||
668 | |||
669 | if (test_bit(US_FLIDX_TIMED_OUT, &us->flags)) { | ||
670 | US_DEBUGP("-- auto-sense aborted\n"); | ||
671 | goto Handle_Abort; | ||
672 | } | ||
673 | if (temp_result != USB_STOR_TRANSPORT_GOOD) { | ||
674 | US_DEBUGP("-- auto-sense failure\n"); | ||
675 | |||
676 | /* we skip the reset if this happens to be a | ||
677 | * multi-target device, since failure of an | ||
678 | * auto-sense is perfectly valid | ||
679 | */ | ||
680 | if (!(us->flags & US_FL_SCM_MULT_TARG)) | ||
681 | us->transport_reset(us); | ||
682 | srb->result = DID_ERROR << 16; | ||
683 | return; | ||
684 | } | ||
685 | |||
686 | US_DEBUGP("-- Result from auto-sense is %d\n", temp_result); | ||
687 | US_DEBUGP("-- code: 0x%x, key: 0x%x, ASC: 0x%x, ASCQ: 0x%x\n", | ||
688 | srb->sense_buffer[0], | ||
689 | srb->sense_buffer[2] & 0xf, | ||
690 | srb->sense_buffer[12], | ||
691 | srb->sense_buffer[13]); | ||
692 | #ifdef CONFIG_USB_STORAGE_DEBUG | ||
693 | usb_stor_show_sense( | ||
694 | srb->sense_buffer[2] & 0xf, | ||
695 | srb->sense_buffer[12], | ||
696 | srb->sense_buffer[13]); | ||
697 | #endif | ||
698 | |||
699 | /* set the result so the higher layers expect this data */ | ||
700 | srb->result = SAM_STAT_CHECK_CONDITION; | ||
701 | |||
702 | /* If things are really okay, then let's show that. Zero | ||
703 | * out the sense buffer so the higher layers won't realize | ||
704 | * we did an unsolicited auto-sense. */ | ||
705 | if (result == USB_STOR_TRANSPORT_GOOD && | ||
706 | /* Filemark 0, ignore EOM, ILI 0, no sense */ | ||
707 | (srb->sense_buffer[2] & 0xaf) == 0 && | ||
708 | /* No ASC or ASCQ */ | ||
709 | srb->sense_buffer[12] == 0 && | ||
710 | srb->sense_buffer[13] == 0) { | ||
711 | srb->result = SAM_STAT_GOOD; | ||
712 | srb->sense_buffer[0] = 0x0; | ||
713 | } | ||
714 | } | ||
715 | |||
716 | /* Did we transfer less than the minimum amount required? */ | ||
717 | if (srb->result == SAM_STAT_GOOD && | ||
718 | srb->request_bufflen - srb->resid < srb->underflow) | ||
719 | srb->result = (DID_ERROR << 16) | (SUGGEST_RETRY << 24); | ||
720 | |||
721 | return; | ||
722 | |||
723 | /* abort processing: the bulk-only transport requires a reset | ||
724 | * following an abort */ | ||
725 | Handle_Abort: | ||
726 | srb->result = DID_ABORT << 16; | ||
727 | if (us->protocol == US_PR_BULK) | ||
728 | us->transport_reset(us); | ||
729 | } | ||
730 | |||
731 | /* Stop the current URB transfer */ | ||
732 | void usb_stor_stop_transport(struct us_data *us) | ||
733 | { | ||
734 | US_DEBUGP("%s called\n", __FUNCTION__); | ||
735 | |||
736 | /* If the state machine is blocked waiting for an URB, | ||
737 | * let's wake it up. The test_and_clear_bit() call | ||
738 | * guarantees that if a URB has just been submitted, | ||
739 | * it won't be cancelled more than once. */ | ||
740 | if (test_and_clear_bit(US_FLIDX_URB_ACTIVE, &us->flags)) { | ||
741 | US_DEBUGP("-- cancelling URB\n"); | ||
742 | usb_unlink_urb(us->current_urb); | ||
743 | } | ||
744 | |||
745 | /* If we are waiting for a scatter-gather operation, cancel it. */ | ||
746 | if (test_and_clear_bit(US_FLIDX_SG_ACTIVE, &us->flags)) { | ||
747 | US_DEBUGP("-- cancelling sg request\n"); | ||
748 | usb_sg_cancel(&us->current_sg); | ||
749 | } | ||
750 | } | ||
751 | |||
752 | /* | ||
753 | * Control/Bulk/Interrupt transport | ||
754 | */ | ||
755 | |||
756 | int usb_stor_CBI_transport(struct scsi_cmnd *srb, struct us_data *us) | ||
757 | { | ||
758 | unsigned int transfer_length = srb->request_bufflen; | ||
759 | unsigned int pipe = 0; | ||
760 | int result; | ||
761 | |||
762 | /* COMMAND STAGE */ | ||
763 | /* let's send the command via the control pipe */ | ||
764 | result = usb_stor_ctrl_transfer(us, us->send_ctrl_pipe, | ||
765 | US_CBI_ADSC, | ||
766 | USB_TYPE_CLASS | USB_RECIP_INTERFACE, 0, | ||
767 | us->ifnum, srb->cmnd, srb->cmd_len); | ||
768 | |||
769 | /* check the return code for the command */ | ||
770 | US_DEBUGP("Call to usb_stor_ctrl_transfer() returned %d\n", result); | ||
771 | |||
772 | /* if we stalled the command, it means command failed */ | ||
773 | if (result == USB_STOR_XFER_STALLED) { | ||
774 | return USB_STOR_TRANSPORT_FAILED; | ||
775 | } | ||
776 | |||
777 | /* Uh oh... serious problem here */ | ||
778 | if (result != USB_STOR_XFER_GOOD) { | ||
779 | return USB_STOR_TRANSPORT_ERROR; | ||
780 | } | ||
781 | |||
782 | /* DATA STAGE */ | ||
783 | /* transfer the data payload for this command, if one exists*/ | ||
784 | if (transfer_length) { | ||
785 | pipe = srb->sc_data_direction == DMA_FROM_DEVICE ? | ||
786 | us->recv_bulk_pipe : us->send_bulk_pipe; | ||
787 | result = usb_stor_bulk_transfer_sg(us, pipe, | ||
788 | srb->request_buffer, transfer_length, | ||
789 | srb->use_sg, &srb->resid); | ||
790 | US_DEBUGP("CBI data stage result is 0x%x\n", result); | ||
791 | |||
792 | /* if we stalled the data transfer it means command failed */ | ||
793 | if (result == USB_STOR_XFER_STALLED) | ||
794 | return USB_STOR_TRANSPORT_FAILED; | ||
795 | if (result > USB_STOR_XFER_STALLED) | ||
796 | return USB_STOR_TRANSPORT_ERROR; | ||
797 | } | ||
798 | |||
799 | /* STATUS STAGE */ | ||
800 | result = usb_stor_intr_transfer(us, us->iobuf, 2); | ||
801 | US_DEBUGP("Got interrupt data (0x%x, 0x%x)\n", | ||
802 | us->iobuf[0], us->iobuf[1]); | ||
803 | if (result != USB_STOR_XFER_GOOD) | ||
804 | return USB_STOR_TRANSPORT_ERROR; | ||
805 | |||
806 | /* UFI gives us ASC and ASCQ, like a request sense | ||
807 | * | ||
808 | * REQUEST_SENSE and INQUIRY don't affect the sense data on UFI | ||
809 | * devices, so we ignore the information for those commands. Note | ||
810 | * that this means we could be ignoring a real error on these | ||
811 | * commands, but that can't be helped. | ||
812 | */ | ||
813 | if (us->subclass == US_SC_UFI) { | ||
814 | if (srb->cmnd[0] == REQUEST_SENSE || | ||
815 | srb->cmnd[0] == INQUIRY) | ||
816 | return USB_STOR_TRANSPORT_GOOD; | ||
817 | if (us->iobuf[0]) | ||
818 | goto Failed; | ||
819 | return USB_STOR_TRANSPORT_GOOD; | ||
820 | } | ||
821 | |||
822 | /* If not UFI, we interpret the data as a result code | ||
823 | * The first byte should always be a 0x0. | ||
824 | * | ||
825 | * Some bogus devices don't follow that rule. They stuff the ASC | ||
826 | * into the first byte -- so if it's non-zero, call it a failure. | ||
827 | */ | ||
828 | if (us->iobuf[0]) { | ||
829 | US_DEBUGP("CBI IRQ data showed reserved bType 0x%x\n", | ||
830 | us->iobuf[0]); | ||
831 | goto Failed; | ||
832 | |||
833 | } | ||
834 | |||
835 | /* The second byte & 0x0F should be 0x0 for good, otherwise error */ | ||
836 | switch (us->iobuf[1] & 0x0F) { | ||
837 | case 0x00: | ||
838 | return USB_STOR_TRANSPORT_GOOD; | ||
839 | case 0x01: | ||
840 | goto Failed; | ||
841 | } | ||
842 | return USB_STOR_TRANSPORT_ERROR; | ||
843 | |||
844 | /* the CBI spec requires that the bulk pipe must be cleared | ||
845 | * following any data-in/out command failure (section 2.4.3.1.3) | ||
846 | */ | ||
847 | Failed: | ||
848 | if (pipe) | ||
849 | usb_stor_clear_halt(us, pipe); | ||
850 | return USB_STOR_TRANSPORT_FAILED; | ||
851 | } | ||
852 | |||
853 | /* | ||
854 | * Control/Bulk transport | ||
855 | */ | ||
856 | int usb_stor_CB_transport(struct scsi_cmnd *srb, struct us_data *us) | ||
857 | { | ||
858 | unsigned int transfer_length = srb->request_bufflen; | ||
859 | int result; | ||
860 | |||
861 | /* COMMAND STAGE */ | ||
862 | /* let's send the command via the control pipe */ | ||
863 | result = usb_stor_ctrl_transfer(us, us->send_ctrl_pipe, | ||
864 | US_CBI_ADSC, | ||
865 | USB_TYPE_CLASS | USB_RECIP_INTERFACE, 0, | ||
866 | us->ifnum, srb->cmnd, srb->cmd_len); | ||
867 | |||
868 | /* check the return code for the command */ | ||
869 | US_DEBUGP("Call to usb_stor_ctrl_transfer() returned %d\n", result); | ||
870 | |||
871 | /* if we stalled the command, it means command failed */ | ||
872 | if (result == USB_STOR_XFER_STALLED) { | ||
873 | return USB_STOR_TRANSPORT_FAILED; | ||
874 | } | ||
875 | |||
876 | /* Uh oh... serious problem here */ | ||
877 | if (result != USB_STOR_XFER_GOOD) { | ||
878 | return USB_STOR_TRANSPORT_ERROR; | ||
879 | } | ||
880 | |||
881 | /* DATA STAGE */ | ||
882 | /* transfer the data payload for this command, if one exists*/ | ||
883 | if (transfer_length) { | ||
884 | unsigned int pipe = srb->sc_data_direction == DMA_FROM_DEVICE ? | ||
885 | us->recv_bulk_pipe : us->send_bulk_pipe; | ||
886 | result = usb_stor_bulk_transfer_sg(us, pipe, | ||
887 | srb->request_buffer, transfer_length, | ||
888 | srb->use_sg, &srb->resid); | ||
889 | US_DEBUGP("CB data stage result is 0x%x\n", result); | ||
890 | |||
891 | /* if we stalled the data transfer it means command failed */ | ||
892 | if (result == USB_STOR_XFER_STALLED) | ||
893 | return USB_STOR_TRANSPORT_FAILED; | ||
894 | if (result > USB_STOR_XFER_STALLED) | ||
895 | return USB_STOR_TRANSPORT_ERROR; | ||
896 | } | ||
897 | |||
898 | /* STATUS STAGE */ | ||
899 | /* NOTE: CB does not have a status stage. Silly, I know. So | ||
900 | * we have to catch this at a higher level. | ||
901 | */ | ||
902 | return USB_STOR_TRANSPORT_GOOD; | ||
903 | } | ||
904 | |||
905 | /* | ||
906 | * Bulk only transport | ||
907 | */ | ||
908 | |||
909 | /* Determine what the maximum LUN supported is */ | ||
910 | int usb_stor_Bulk_max_lun(struct us_data *us) | ||
911 | { | ||
912 | int result; | ||
913 | |||
914 | /* issue the command */ | ||
915 | result = usb_stor_control_msg(us, us->recv_ctrl_pipe, | ||
916 | US_BULK_GET_MAX_LUN, | ||
917 | USB_DIR_IN | USB_TYPE_CLASS | | ||
918 | USB_RECIP_INTERFACE, | ||
919 | 0, us->ifnum, us->iobuf, 1, HZ); | ||
920 | |||
921 | US_DEBUGP("GetMaxLUN command result is %d, data is %d\n", | ||
922 | result, us->iobuf[0]); | ||
923 | |||
924 | /* if we have a successful request, return the result */ | ||
925 | if (result > 0) | ||
926 | return us->iobuf[0]; | ||
927 | |||
928 | /* | ||
929 | * Some devices (i.e. Iomega Zip100) need this -- apparently | ||
930 | * the bulk pipes get STALLed when the GetMaxLUN request is | ||
931 | * processed. This is, in theory, harmless to all other devices | ||
932 | * (regardless of if they stall or not). | ||
933 | */ | ||
934 | if (result == -EPIPE) { | ||
935 | usb_stor_clear_halt(us, us->recv_bulk_pipe); | ||
936 | usb_stor_clear_halt(us, us->send_bulk_pipe); | ||
937 | } | ||
938 | |||
939 | /* | ||
940 | * Some devices don't like GetMaxLUN. They may STALL the control | ||
941 | * pipe, they may return a zero-length result, they may do nothing at | ||
942 | * all and timeout, or they may fail in even more bizarrely creative | ||
943 | * ways. In these cases the best approach is to use the default | ||
944 | * value: only one LUN. | ||
945 | */ | ||
946 | return 0; | ||
947 | } | ||
948 | |||
949 | int usb_stor_Bulk_transport(struct scsi_cmnd *srb, struct us_data *us) | ||
950 | { | ||
951 | struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf; | ||
952 | struct bulk_cs_wrap *bcs = (struct bulk_cs_wrap *) us->iobuf; | ||
953 | unsigned int transfer_length = srb->request_bufflen; | ||
954 | unsigned int residue; | ||
955 | int result; | ||
956 | int fake_sense = 0; | ||
957 | unsigned int cswlen; | ||
958 | unsigned int cbwlen = US_BULK_CB_WRAP_LEN; | ||
959 | |||
960 | /* Take care of BULK32 devices; set extra byte to 0 */ | ||
961 | if ( unlikely(us->flags & US_FL_BULK32)) { | ||
962 | cbwlen = 32; | ||
963 | us->iobuf[31] = 0; | ||
964 | } | ||
965 | |||
966 | /* set up the command wrapper */ | ||
967 | bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN); | ||
968 | bcb->DataTransferLength = cpu_to_le32(transfer_length); | ||
969 | bcb->Flags = srb->sc_data_direction == DMA_FROM_DEVICE ? 1 << 7 : 0; | ||
970 | bcb->Tag = srb->serial_number; | ||
971 | bcb->Lun = srb->device->lun; | ||
972 | if (us->flags & US_FL_SCM_MULT_TARG) | ||
973 | bcb->Lun |= srb->device->id << 4; | ||
974 | bcb->Length = srb->cmd_len; | ||
975 | |||
976 | /* copy the command payload */ | ||
977 | memset(bcb->CDB, 0, sizeof(bcb->CDB)); | ||
978 | memcpy(bcb->CDB, srb->cmnd, bcb->Length); | ||
979 | |||
980 | /* send it to out endpoint */ | ||
981 | US_DEBUGP("Bulk Command S 0x%x T 0x%x L %d F %d Trg %d LUN %d CL %d\n", | ||
982 | le32_to_cpu(bcb->Signature), bcb->Tag, | ||
983 | le32_to_cpu(bcb->DataTransferLength), bcb->Flags, | ||
984 | (bcb->Lun >> 4), (bcb->Lun & 0x0F), | ||
985 | bcb->Length); | ||
986 | result = usb_stor_bulk_transfer_buf(us, us->send_bulk_pipe, | ||
987 | bcb, cbwlen, NULL); | ||
988 | US_DEBUGP("Bulk command transfer result=%d\n", result); | ||
989 | if (result != USB_STOR_XFER_GOOD) | ||
990 | return USB_STOR_TRANSPORT_ERROR; | ||
991 | |||
992 | /* DATA STAGE */ | ||
993 | /* send/receive data payload, if there is any */ | ||
994 | |||
995 | /* Some USB-IDE converter chips need a 100us delay between the | ||
996 | * command phase and the data phase. Some devices need a little | ||
997 | * more than that, probably because of clock rate inaccuracies. */ | ||
998 | if (unlikely(us->flags & US_FL_GO_SLOW)) | ||
999 | udelay(110); | ||
1000 | |||
1001 | if (transfer_length) { | ||
1002 | unsigned int pipe = srb->sc_data_direction == DMA_FROM_DEVICE ? | ||
1003 | us->recv_bulk_pipe : us->send_bulk_pipe; | ||
1004 | result = usb_stor_bulk_transfer_sg(us, pipe, | ||
1005 | srb->request_buffer, transfer_length, | ||
1006 | srb->use_sg, &srb->resid); | ||
1007 | US_DEBUGP("Bulk data transfer result 0x%x\n", result); | ||
1008 | if (result == USB_STOR_XFER_ERROR) | ||
1009 | return USB_STOR_TRANSPORT_ERROR; | ||
1010 | |||
1011 | /* If the device tried to send back more data than the | ||
1012 | * amount requested, the spec requires us to transfer | ||
1013 | * the CSW anyway. Since there's no point retrying the | ||
1014 | * the command, we'll return fake sense data indicating | ||
1015 | * Illegal Request, Invalid Field in CDB. | ||
1016 | */ | ||
1017 | if (result == USB_STOR_XFER_LONG) | ||
1018 | fake_sense = 1; | ||
1019 | } | ||
1020 | |||
1021 | /* See flow chart on pg 15 of the Bulk Only Transport spec for | ||
1022 | * an explanation of how this code works. | ||
1023 | */ | ||
1024 | |||
1025 | /* get CSW for device status */ | ||
1026 | US_DEBUGP("Attempting to get CSW...\n"); | ||
1027 | result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe, | ||
1028 | bcs, US_BULK_CS_WRAP_LEN, &cswlen); | ||
1029 | |||
1030 | /* Some broken devices add unnecessary zero-length packets to the | ||
1031 | * end of their data transfers. Such packets show up as 0-length | ||
1032 | * CSWs. If we encounter such a thing, try to read the CSW again. | ||
1033 | */ | ||
1034 | if (result == USB_STOR_XFER_SHORT && cswlen == 0) { | ||
1035 | US_DEBUGP("Received 0-length CSW; retrying...\n"); | ||
1036 | result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe, | ||
1037 | bcs, US_BULK_CS_WRAP_LEN, &cswlen); | ||
1038 | } | ||
1039 | |||
1040 | /* did the attempt to read the CSW fail? */ | ||
1041 | if (result == USB_STOR_XFER_STALLED) { | ||
1042 | |||
1043 | /* get the status again */ | ||
1044 | US_DEBUGP("Attempting to get CSW (2nd try)...\n"); | ||
1045 | result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe, | ||
1046 | bcs, US_BULK_CS_WRAP_LEN, NULL); | ||
1047 | } | ||
1048 | |||
1049 | /* if we still have a failure at this point, we're in trouble */ | ||
1050 | US_DEBUGP("Bulk status result = %d\n", result); | ||
1051 | if (result != USB_STOR_XFER_GOOD) | ||
1052 | return USB_STOR_TRANSPORT_ERROR; | ||
1053 | |||
1054 | /* check bulk status */ | ||
1055 | residue = le32_to_cpu(bcs->Residue); | ||
1056 | US_DEBUGP("Bulk Status S 0x%x T 0x%x R %u Stat 0x%x\n", | ||
1057 | le32_to_cpu(bcs->Signature), bcs->Tag, | ||
1058 | residue, bcs->Status); | ||
1059 | if (bcs->Tag != srb->serial_number || bcs->Status > US_BULK_STAT_PHASE) { | ||
1060 | US_DEBUGP("Bulk logical error\n"); | ||
1061 | return USB_STOR_TRANSPORT_ERROR; | ||
1062 | } | ||
1063 | |||
1064 | /* Some broken devices report odd signatures, so we do not check them | ||
1065 | * for validity against the spec. We store the first one we see, | ||
1066 | * and check subsequent transfers for validity against this signature. | ||
1067 | */ | ||
1068 | if (!us->bcs_signature) { | ||
1069 | us->bcs_signature = bcs->Signature; | ||
1070 | if (us->bcs_signature != cpu_to_le32(US_BULK_CS_SIGN)) | ||
1071 | US_DEBUGP("Learnt BCS signature 0x%08X\n", | ||
1072 | le32_to_cpu(us->bcs_signature)); | ||
1073 | } else if (bcs->Signature != us->bcs_signature) { | ||
1074 | US_DEBUGP("Signature mismatch: got %08X, expecting %08X\n", | ||
1075 | le32_to_cpu(bcs->Signature), | ||
1076 | le32_to_cpu(us->bcs_signature)); | ||
1077 | return USB_STOR_TRANSPORT_ERROR; | ||
1078 | } | ||
1079 | |||
1080 | /* try to compute the actual residue, based on how much data | ||
1081 | * was really transferred and what the device tells us */ | ||
1082 | if (residue) { | ||
1083 | if (!(us->flags & US_FL_IGNORE_RESIDUE)) { | ||
1084 | residue = min(residue, transfer_length); | ||
1085 | srb->resid = max(srb->resid, (int) residue); | ||
1086 | } | ||
1087 | } | ||
1088 | |||
1089 | /* based on the status code, we report good or bad */ | ||
1090 | switch (bcs->Status) { | ||
1091 | case US_BULK_STAT_OK: | ||
1092 | /* device babbled -- return fake sense data */ | ||
1093 | if (fake_sense) { | ||
1094 | memcpy(srb->sense_buffer, | ||
1095 | usb_stor_sense_invalidCDB, | ||
1096 | sizeof(usb_stor_sense_invalidCDB)); | ||
1097 | return USB_STOR_TRANSPORT_NO_SENSE; | ||
1098 | } | ||
1099 | |||
1100 | /* command good -- note that data could be short */ | ||
1101 | return USB_STOR_TRANSPORT_GOOD; | ||
1102 | |||
1103 | case US_BULK_STAT_FAIL: | ||
1104 | /* command failed */ | ||
1105 | return USB_STOR_TRANSPORT_FAILED; | ||
1106 | |||
1107 | case US_BULK_STAT_PHASE: | ||
1108 | /* phase error -- note that a transport reset will be | ||
1109 | * invoked by the invoke_transport() function | ||
1110 | */ | ||
1111 | return USB_STOR_TRANSPORT_ERROR; | ||
1112 | } | ||
1113 | |||
1114 | /* we should never get here, but if we do, we're in trouble */ | ||
1115 | return USB_STOR_TRANSPORT_ERROR; | ||
1116 | } | ||
1117 | |||
1118 | /*********************************************************************** | ||
1119 | * Reset routines | ||
1120 | ***********************************************************************/ | ||
1121 | |||
1122 | /* This is the common part of the device reset code. | ||
1123 | * | ||
1124 | * It's handy that every transport mechanism uses the control endpoint for | ||
1125 | * resets. | ||
1126 | * | ||
1127 | * Basically, we send a reset with a 20-second timeout, so we don't get | ||
1128 | * jammed attempting to do the reset. | ||
1129 | */ | ||
1130 | static int usb_stor_reset_common(struct us_data *us, | ||
1131 | u8 request, u8 requesttype, | ||
1132 | u16 value, u16 index, void *data, u16 size) | ||
1133 | { | ||
1134 | int result; | ||
1135 | int result2; | ||
1136 | int rc = FAILED; | ||
1137 | |||
1138 | /* Let the SCSI layer know we are doing a reset, set the | ||
1139 | * RESETTING bit, and clear the ABORTING bit so that the reset | ||
1140 | * may proceed. | ||
1141 | */ | ||
1142 | scsi_lock(us_to_host(us)); | ||
1143 | usb_stor_report_device_reset(us); | ||
1144 | set_bit(US_FLIDX_RESETTING, &us->flags); | ||
1145 | clear_bit(US_FLIDX_ABORTING, &us->flags); | ||
1146 | scsi_unlock(us_to_host(us)); | ||
1147 | |||
1148 | /* A 20-second timeout may seem rather long, but a LaCie | ||
1149 | * StudioDrive USB2 device takes 16+ seconds to get going | ||
1150 | * following a powerup or USB attach event. | ||
1151 | */ | ||
1152 | result = usb_stor_control_msg(us, us->send_ctrl_pipe, | ||
1153 | request, requesttype, value, index, data, size, | ||
1154 | 20*HZ); | ||
1155 | if (result < 0) { | ||
1156 | US_DEBUGP("Soft reset failed: %d\n", result); | ||
1157 | goto Done; | ||
1158 | } | ||
1159 | |||
1160 | /* Give the device some time to recover from the reset, | ||
1161 | * but don't delay disconnect processing. */ | ||
1162 | wait_event_interruptible_timeout(us->delay_wait, | ||
1163 | test_bit(US_FLIDX_DISCONNECTING, &us->flags), | ||
1164 | HZ*6); | ||
1165 | if (test_bit(US_FLIDX_DISCONNECTING, &us->flags)) { | ||
1166 | US_DEBUGP("Reset interrupted by disconnect\n"); | ||
1167 | goto Done; | ||
1168 | } | ||
1169 | |||
1170 | US_DEBUGP("Soft reset: clearing bulk-in endpoint halt\n"); | ||
1171 | result = usb_stor_clear_halt(us, us->recv_bulk_pipe); | ||
1172 | |||
1173 | US_DEBUGP("Soft reset: clearing bulk-out endpoint halt\n"); | ||
1174 | result2 = usb_stor_clear_halt(us, us->send_bulk_pipe); | ||
1175 | |||
1176 | /* return a result code based on the result of the control message */ | ||
1177 | if (result < 0 || result2 < 0) { | ||
1178 | US_DEBUGP("Soft reset failed\n"); | ||
1179 | goto Done; | ||
1180 | } | ||
1181 | US_DEBUGP("Soft reset done\n"); | ||
1182 | rc = SUCCESS; | ||
1183 | |||
1184 | Done: | ||
1185 | clear_bit(US_FLIDX_RESETTING, &us->flags); | ||
1186 | return rc; | ||
1187 | } | ||
1188 | |||
1189 | /* This issues a CB[I] Reset to the device in question | ||
1190 | */ | ||
1191 | #define CB_RESET_CMD_SIZE 12 | ||
1192 | |||
1193 | int usb_stor_CB_reset(struct us_data *us) | ||
1194 | { | ||
1195 | US_DEBUGP("%s called\n", __FUNCTION__); | ||
1196 | |||
1197 | memset(us->iobuf, 0xFF, CB_RESET_CMD_SIZE); | ||
1198 | us->iobuf[0] = SEND_DIAGNOSTIC; | ||
1199 | us->iobuf[1] = 4; | ||
1200 | return usb_stor_reset_common(us, US_CBI_ADSC, | ||
1201 | USB_TYPE_CLASS | USB_RECIP_INTERFACE, | ||
1202 | 0, us->ifnum, us->iobuf, CB_RESET_CMD_SIZE); | ||
1203 | } | ||
1204 | |||
1205 | /* This issues a Bulk-only Reset to the device in question, including | ||
1206 | * clearing the subsequent endpoint halts that may occur. | ||
1207 | */ | ||
1208 | int usb_stor_Bulk_reset(struct us_data *us) | ||
1209 | { | ||
1210 | US_DEBUGP("%s called\n", __FUNCTION__); | ||
1211 | |||
1212 | return usb_stor_reset_common(us, US_BULK_RESET_REQUEST, | ||
1213 | USB_TYPE_CLASS | USB_RECIP_INTERFACE, | ||
1214 | 0, us->ifnum, NULL, 0); | ||
1215 | } | ||