This source file includes following definitions.
- usb_stor_blocking_completion
- usb_stor_msg_common
- usb_stor_control_msg
- usb_stor_clear_halt
- interpret_urb_result
- usb_stor_ctrl_transfer
- usb_stor_intr_transfer
- usb_stor_bulk_transfer_buf
- usb_stor_bulk_transfer_sglist
- usb_stor_bulk_srb
- usb_stor_bulk_transfer_sg
- last_sector_hacks
- usb_stor_invoke_transport
- usb_stor_stop_transport
- usb_stor_CB_transport
- usb_stor_Bulk_max_lun
- usb_stor_Bulk_transport
- usb_stor_reset_common
- usb_stor_CB_reset
- usb_stor_Bulk_reset
- usb_stor_port_reset
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 #include <linux/sched.h>
32 #include <linux/gfp.h>
33 #include <linux/errno.h>
34 #include <linux/export.h>
35
36 #include <linux/usb/quirks.h>
37
38 #include <scsi/scsi.h>
39 #include <scsi/scsi_eh.h>
40 #include <scsi/scsi_device.h>
41
42 #include "usb.h"
43 #include "transport.h"
44 #include "protocol.h"
45 #include "scsiglue.h"
46 #include "debug.h"
47
48 #include <linux/blkdev.h>
49 #include "../../scsi/sd.h"
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101 static void usb_stor_blocking_completion(struct urb *urb)
102 {
103 struct completion *urb_done_ptr = urb->context;
104
105 complete(urb_done_ptr);
106 }
107
108
109
110
111
112
113
114
115 static int usb_stor_msg_common(struct us_data *us, int timeout)
116 {
117 struct completion urb_done;
118 long timeleft;
119 int status;
120
121
122 if (test_bit(US_FLIDX_ABORTING, &us->dflags))
123 return -EIO;
124
125
126 init_completion(&urb_done);
127
128
129 us->current_urb->context = &urb_done;
130 us->current_urb->transfer_flags = 0;
131
132
133
134
135
136
137
138 if (us->current_urb->transfer_buffer == us->iobuf)
139 us->current_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
140 us->current_urb->transfer_dma = us->iobuf_dma;
141
142
143 status = usb_submit_urb(us->current_urb, GFP_NOIO);
144 if (status) {
145
146 return status;
147 }
148
149
150
151
152
153 set_bit(US_FLIDX_URB_ACTIVE, &us->dflags);
154
155
156 if (test_bit(US_FLIDX_ABORTING, &us->dflags)) {
157
158
159 if (test_and_clear_bit(US_FLIDX_URB_ACTIVE, &us->dflags)) {
160 usb_stor_dbg(us, "-- cancelling URB\n");
161 usb_unlink_urb(us->current_urb);
162 }
163 }
164
165
166 timeleft = wait_for_completion_interruptible_timeout(
167 &urb_done, timeout ? : MAX_SCHEDULE_TIMEOUT);
168
169 clear_bit(US_FLIDX_URB_ACTIVE, &us->dflags);
170
171 if (timeleft <= 0) {
172 usb_stor_dbg(us, "%s -- cancelling URB\n",
173 timeleft == 0 ? "Timeout" : "Signal");
174 usb_kill_urb(us->current_urb);
175 }
176
177
178 return us->current_urb->status;
179 }
180
181
182
183
184
185 int usb_stor_control_msg(struct us_data *us, unsigned int pipe,
186 u8 request, u8 requesttype, u16 value, u16 index,
187 void *data, u16 size, int timeout)
188 {
189 int status;
190
191 usb_stor_dbg(us, "rq=%02x rqtype=%02x value=%04x index=%02x len=%u\n",
192 request, requesttype, value, index, size);
193
194
195 us->cr->bRequestType = requesttype;
196 us->cr->bRequest = request;
197 us->cr->wValue = cpu_to_le16(value);
198 us->cr->wIndex = cpu_to_le16(index);
199 us->cr->wLength = cpu_to_le16(size);
200
201
202 usb_fill_control_urb(us->current_urb, us->pusb_dev, pipe,
203 (unsigned char*) us->cr, data, size,
204 usb_stor_blocking_completion, NULL);
205 status = usb_stor_msg_common(us, timeout);
206
207
208 if (status == 0)
209 status = us->current_urb->actual_length;
210 return status;
211 }
212 EXPORT_SYMBOL_GPL(usb_stor_control_msg);
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227 int usb_stor_clear_halt(struct us_data *us, unsigned int pipe)
228 {
229 int result;
230 int endp = usb_pipeendpoint(pipe);
231
232 if (usb_pipein (pipe))
233 endp |= USB_DIR_IN;
234
235 result = usb_stor_control_msg(us, us->send_ctrl_pipe,
236 USB_REQ_CLEAR_FEATURE, USB_RECIP_ENDPOINT,
237 USB_ENDPOINT_HALT, endp,
238 NULL, 0, 3*HZ);
239
240 if (result >= 0)
241 usb_reset_endpoint(us->pusb_dev, endp);
242
243 usb_stor_dbg(us, "result = %d\n", result);
244 return result;
245 }
246 EXPORT_SYMBOL_GPL(usb_stor_clear_halt);
247
248
249
250
251
252
253
254
255
256 static int interpret_urb_result(struct us_data *us, unsigned int pipe,
257 unsigned int length, int result, unsigned int partial)
258 {
259 usb_stor_dbg(us, "Status code %d; transferred %u/%u\n",
260 result, partial, length);
261 switch (result) {
262
263
264 case 0:
265 if (partial != length) {
266 usb_stor_dbg(us, "-- short transfer\n");
267 return USB_STOR_XFER_SHORT;
268 }
269
270 usb_stor_dbg(us, "-- transfer complete\n");
271 return USB_STOR_XFER_GOOD;
272
273
274 case -EPIPE:
275
276
277
278
279 if (usb_pipecontrol(pipe)) {
280 usb_stor_dbg(us, "-- stall on control pipe\n");
281 return USB_STOR_XFER_STALLED;
282 }
283
284
285 usb_stor_dbg(us, "clearing endpoint halt for pipe 0x%x\n",
286 pipe);
287 if (usb_stor_clear_halt(us, pipe) < 0)
288 return USB_STOR_XFER_ERROR;
289 return USB_STOR_XFER_STALLED;
290
291
292 case -EOVERFLOW:
293 usb_stor_dbg(us, "-- babble\n");
294 return USB_STOR_XFER_LONG;
295
296
297 case -ECONNRESET:
298 usb_stor_dbg(us, "-- transfer cancelled\n");
299 return USB_STOR_XFER_ERROR;
300
301
302 case -EREMOTEIO:
303 usb_stor_dbg(us, "-- short read transfer\n");
304 return USB_STOR_XFER_SHORT;
305
306
307 case -EIO:
308 usb_stor_dbg(us, "-- abort or disconnect in progress\n");
309 return USB_STOR_XFER_ERROR;
310
311
312 default:
313 usb_stor_dbg(us, "-- unknown error\n");
314 return USB_STOR_XFER_ERROR;
315 }
316 }
317
318
319
320
321
322 int usb_stor_ctrl_transfer(struct us_data *us, unsigned int pipe,
323 u8 request, u8 requesttype, u16 value, u16 index,
324 void *data, u16 size)
325 {
326 int result;
327
328 usb_stor_dbg(us, "rq=%02x rqtype=%02x value=%04x index=%02x len=%u\n",
329 request, requesttype, value, index, size);
330
331
332 us->cr->bRequestType = requesttype;
333 us->cr->bRequest = request;
334 us->cr->wValue = cpu_to_le16(value);
335 us->cr->wIndex = cpu_to_le16(index);
336 us->cr->wLength = cpu_to_le16(size);
337
338
339 usb_fill_control_urb(us->current_urb, us->pusb_dev, pipe,
340 (unsigned char*) us->cr, data, size,
341 usb_stor_blocking_completion, NULL);
342 result = usb_stor_msg_common(us, 0);
343
344 return interpret_urb_result(us, pipe, size, result,
345 us->current_urb->actual_length);
346 }
347 EXPORT_SYMBOL_GPL(usb_stor_ctrl_transfer);
348
349
350
351
352
353
354
355
356 static int usb_stor_intr_transfer(struct us_data *us, void *buf,
357 unsigned int length)
358 {
359 int result;
360 unsigned int pipe = us->recv_intr_pipe;
361 unsigned int maxp;
362
363 usb_stor_dbg(us, "xfer %u bytes\n", length);
364
365
366 maxp = usb_maxpacket(us->pusb_dev, pipe, usb_pipeout(pipe));
367 if (maxp > length)
368 maxp = length;
369
370
371 usb_fill_int_urb(us->current_urb, us->pusb_dev, pipe, buf,
372 maxp, usb_stor_blocking_completion, NULL,
373 us->ep_bInterval);
374 result = usb_stor_msg_common(us, 0);
375
376 return interpret_urb_result(us, pipe, length, result,
377 us->current_urb->actual_length);
378 }
379
380
381
382
383
384
385 int usb_stor_bulk_transfer_buf(struct us_data *us, unsigned int pipe,
386 void *buf, unsigned int length, unsigned int *act_len)
387 {
388 int result;
389
390 usb_stor_dbg(us, "xfer %u bytes\n", length);
391
392
393 usb_fill_bulk_urb(us->current_urb, us->pusb_dev, pipe, buf, length,
394 usb_stor_blocking_completion, NULL);
395 result = usb_stor_msg_common(us, 0);
396
397
398 if (act_len)
399 *act_len = us->current_urb->actual_length;
400 return interpret_urb_result(us, pipe, length, result,
401 us->current_urb->actual_length);
402 }
403 EXPORT_SYMBOL_GPL(usb_stor_bulk_transfer_buf);
404
405
406
407
408
409
410
411 static int usb_stor_bulk_transfer_sglist(struct us_data *us, unsigned int pipe,
412 struct scatterlist *sg, int num_sg, unsigned int length,
413 unsigned int *act_len)
414 {
415 int result;
416
417
418 if (test_bit(US_FLIDX_ABORTING, &us->dflags))
419 return USB_STOR_XFER_ERROR;
420
421
422 usb_stor_dbg(us, "xfer %u bytes, %d entries\n", length, num_sg);
423 result = usb_sg_init(&us->current_sg, us->pusb_dev, pipe, 0,
424 sg, num_sg, length, GFP_NOIO);
425 if (result) {
426 usb_stor_dbg(us, "usb_sg_init returned %d\n", result);
427 return USB_STOR_XFER_ERROR;
428 }
429
430
431
432
433
434 set_bit(US_FLIDX_SG_ACTIVE, &us->dflags);
435
436
437 if (test_bit(US_FLIDX_ABORTING, &us->dflags)) {
438
439
440 if (test_and_clear_bit(US_FLIDX_SG_ACTIVE, &us->dflags)) {
441 usb_stor_dbg(us, "-- cancelling sg request\n");
442 usb_sg_cancel(&us->current_sg);
443 }
444 }
445
446
447 usb_sg_wait(&us->current_sg);
448 clear_bit(US_FLIDX_SG_ACTIVE, &us->dflags);
449
450 result = us->current_sg.status;
451 if (act_len)
452 *act_len = us->current_sg.bytes;
453 return interpret_urb_result(us, pipe, length, result,
454 us->current_sg.bytes);
455 }
456
457
458
459
460
461 int usb_stor_bulk_srb(struct us_data* us, unsigned int pipe,
462 struct scsi_cmnd* srb)
463 {
464 unsigned int partial;
465 int result = usb_stor_bulk_transfer_sglist(us, pipe, scsi_sglist(srb),
466 scsi_sg_count(srb), scsi_bufflen(srb),
467 &partial);
468
469 scsi_set_resid(srb, scsi_bufflen(srb) - partial);
470 return result;
471 }
472 EXPORT_SYMBOL_GPL(usb_stor_bulk_srb);
473
474
475
476
477
478
479
480
481
482
483 int usb_stor_bulk_transfer_sg(struct us_data* us, unsigned int pipe,
484 void *buf, unsigned int length_left, int use_sg, int *residual)
485 {
486 int result;
487 unsigned int partial;
488
489
490 if (use_sg) {
491
492 result = usb_stor_bulk_transfer_sglist(us, pipe,
493 (struct scatterlist *) buf, use_sg,
494 length_left, &partial);
495 length_left -= partial;
496 } else {
497
498 result = usb_stor_bulk_transfer_buf(us, pipe, buf,
499 length_left, &partial);
500 length_left -= partial;
501 }
502
503
504 if (residual)
505 *residual = length_left;
506 return result;
507 }
508 EXPORT_SYMBOL_GPL(usb_stor_bulk_transfer_sg);
509
510
511
512
513
514
515
516
517
518
519 static void last_sector_hacks(struct us_data *us, struct scsi_cmnd *srb)
520 {
521 struct gendisk *disk;
522 struct scsi_disk *sdkp;
523 u32 sector;
524
525
526 static unsigned char record_not_found[18] = {
527 [0] = 0x70,
528 [2] = MEDIUM_ERROR,
529 [7] = 0x0a,
530 [12] = 0x14
531 };
532
533
534
535
536
537
538
539 if (!us->use_last_sector_hacks)
540 return;
541
542
543 if (srb->cmnd[0] != READ_10 && srb->cmnd[0] != WRITE_10)
544 goto done;
545
546
547 sector = (srb->cmnd[2] << 24) | (srb->cmnd[3] << 16) |
548 (srb->cmnd[4] << 8) | (srb->cmnd[5]);
549 disk = srb->request->rq_disk;
550 if (!disk)
551 goto done;
552 sdkp = scsi_disk(disk);
553 if (!sdkp)
554 goto done;
555 if (sector + 1 != sdkp->capacity)
556 goto done;
557
558 if (srb->result == SAM_STAT_GOOD && scsi_get_resid(srb) == 0) {
559
560
561
562
563
564 us->use_last_sector_hacks = 0;
565
566 } else {
567
568
569
570
571
572
573
574
575
576 if (++us->last_sector_retries < 3)
577 return;
578 srb->result = SAM_STAT_CHECK_CONDITION;
579 memcpy(srb->sense_buffer, record_not_found,
580 sizeof(record_not_found));
581 }
582
583 done:
584
585
586
587
588
589 if (srb->cmnd[0] != TEST_UNIT_READY)
590 us->last_sector_retries = 0;
591 }
592
593
594
595
596
597
598
599 void usb_stor_invoke_transport(struct scsi_cmnd *srb, struct us_data *us)
600 {
601 int need_auto_sense;
602 int result;
603
604
605 scsi_set_resid(srb, 0);
606 result = us->transport(srb, us);
607
608
609
610
611
612 if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) {
613 usb_stor_dbg(us, "-- command was aborted\n");
614 srb->result = DID_ABORT << 16;
615 goto Handle_Errors;
616 }
617
618
619 if (result == USB_STOR_TRANSPORT_ERROR) {
620 usb_stor_dbg(us, "-- transport indicates error, resetting\n");
621 srb->result = DID_ERROR << 16;
622 goto Handle_Errors;
623 }
624
625
626 if (result == USB_STOR_TRANSPORT_NO_SENSE) {
627 srb->result = SAM_STAT_CHECK_CONDITION;
628 last_sector_hacks(us, srb);
629 return;
630 }
631
632 srb->result = SAM_STAT_GOOD;
633
634
635
636
637
638
639
640 need_auto_sense = 0;
641
642
643
644
645
646
647
648 if ((us->protocol == USB_PR_CB || us->protocol == USB_PR_DPCM_USB) &&
649 srb->sc_data_direction != DMA_FROM_DEVICE) {
650 usb_stor_dbg(us, "-- CB transport device requiring auto-sense\n");
651 need_auto_sense = 1;
652 }
653
654
655
656
657
658
659 if (result == USB_STOR_TRANSPORT_FAILED) {
660 usb_stor_dbg(us, "-- transport indicates command failure\n");
661 need_auto_sense = 1;
662 }
663
664
665
666
667
668
669
670 if (unlikely((srb->cmnd[0] == ATA_16 || srb->cmnd[0] == ATA_12) &&
671 result == USB_STOR_TRANSPORT_GOOD &&
672 !(us->fflags & US_FL_SANE_SENSE) &&
673 !(us->fflags & US_FL_BAD_SENSE) &&
674 !(srb->cmnd[2] & 0x20))) {
675 usb_stor_dbg(us, "-- SAT supported, increasing auto-sense\n");
676 us->fflags |= US_FL_SANE_SENSE;
677 }
678
679
680
681
682
683 if ((scsi_get_resid(srb) > 0) &&
684 !((srb->cmnd[0] == REQUEST_SENSE) ||
685 (srb->cmnd[0] == INQUIRY) ||
686 (srb->cmnd[0] == MODE_SENSE) ||
687 (srb->cmnd[0] == LOG_SENSE) ||
688 (srb->cmnd[0] == MODE_SENSE_10))) {
689 usb_stor_dbg(us, "-- unexpectedly short transfer\n");
690 }
691
692
693 if (need_auto_sense) {
694 int temp_result;
695 struct scsi_eh_save ses;
696 int sense_size = US_SENSE_SIZE;
697 struct scsi_sense_hdr sshdr;
698 const u8 *scdd;
699 u8 fm_ili;
700
701
702 if (us->fflags & US_FL_SANE_SENSE)
703 sense_size = ~0;
704 Retry_Sense:
705 usb_stor_dbg(us, "Issuing auto-REQUEST_SENSE\n");
706
707 scsi_eh_prep_cmnd(srb, &ses, NULL, 0, sense_size);
708
709
710 if (us->subclass == USB_SC_RBC || us->subclass == USB_SC_SCSI ||
711 us->subclass == USB_SC_CYP_ATACB)
712 srb->cmd_len = 6;
713 else
714 srb->cmd_len = 12;
715
716
717 scsi_set_resid(srb, 0);
718 temp_result = us->transport(us->srb, us);
719
720
721 scsi_eh_restore_cmnd(srb, &ses);
722
723 if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) {
724 usb_stor_dbg(us, "-- auto-sense aborted\n");
725 srb->result = DID_ABORT << 16;
726
727
728 if (sense_size != US_SENSE_SIZE) {
729 us->fflags &= ~US_FL_SANE_SENSE;
730 us->fflags |= US_FL_BAD_SENSE;
731 }
732 goto Handle_Errors;
733 }
734
735
736
737
738
739
740
741 if (temp_result == USB_STOR_TRANSPORT_FAILED &&
742 sense_size != US_SENSE_SIZE) {
743 usb_stor_dbg(us, "-- auto-sense failure, retry small sense\n");
744 sense_size = US_SENSE_SIZE;
745 us->fflags &= ~US_FL_SANE_SENSE;
746 us->fflags |= US_FL_BAD_SENSE;
747 goto Retry_Sense;
748 }
749
750
751 if (temp_result != USB_STOR_TRANSPORT_GOOD) {
752 usb_stor_dbg(us, "-- auto-sense failure\n");
753
754
755
756
757
758
759 srb->result = DID_ERROR << 16;
760 if (!(us->fflags & US_FL_SCM_MULT_TARG))
761 goto Handle_Errors;
762 return;
763 }
764
765
766
767
768
769
770 if (srb->sense_buffer[7] > (US_SENSE_SIZE - 8) &&
771 !(us->fflags & US_FL_SANE_SENSE) &&
772 !(us->fflags & US_FL_BAD_SENSE) &&
773 (srb->sense_buffer[0] & 0x7C) == 0x70) {
774 usb_stor_dbg(us, "-- SANE_SENSE support enabled\n");
775 us->fflags |= US_FL_SANE_SENSE;
776
777
778
779
780
781 usb_stor_dbg(us, "-- Sense data truncated to %i from %i\n",
782 US_SENSE_SIZE,
783 srb->sense_buffer[7] + 8);
784 srb->sense_buffer[7] = (US_SENSE_SIZE - 8);
785 }
786
787 scsi_normalize_sense(srb->sense_buffer, SCSI_SENSE_BUFFERSIZE,
788 &sshdr);
789
790 usb_stor_dbg(us, "-- Result from auto-sense is %d\n",
791 temp_result);
792 usb_stor_dbg(us, "-- code: 0x%x, key: 0x%x, ASC: 0x%x, ASCQ: 0x%x\n",
793 sshdr.response_code, sshdr.sense_key,
794 sshdr.asc, sshdr.ascq);
795 #ifdef CONFIG_USB_STORAGE_DEBUG
796 usb_stor_show_sense(us, sshdr.sense_key, sshdr.asc, sshdr.ascq);
797 #endif
798
799
800 srb->result = SAM_STAT_CHECK_CONDITION;
801
802 scdd = scsi_sense_desc_find(srb->sense_buffer,
803 SCSI_SENSE_BUFFERSIZE, 4);
804 fm_ili = (scdd ? scdd[3] : srb->sense_buffer[2]) & 0xA0;
805
806
807
808
809
810
811 if (sshdr.sense_key == 0 && sshdr.asc == 0 && sshdr.ascq == 0 &&
812 fm_ili == 0) {
813
814
815
816
817
818 if (result == USB_STOR_TRANSPORT_GOOD) {
819 srb->result = SAM_STAT_GOOD;
820 srb->sense_buffer[0] = 0x0;
821 }
822
823
824
825
826
827
828
829 else if (srb->cmnd[0] == ATA_16 ||
830 srb->cmnd[0] == ATA_12) {
831
832 }
833
834
835
836
837
838
839 else {
840 srb->result = DID_ERROR << 16;
841 if ((sshdr.response_code & 0x72) == 0x72)
842 srb->sense_buffer[1] = HARDWARE_ERROR;
843 else
844 srb->sense_buffer[2] = HARDWARE_ERROR;
845 }
846 }
847 }
848
849
850
851
852
853
854
855
856
857 if (unlikely((us->fflags & US_FL_INITIAL_READ10) &&
858 srb->cmnd[0] == READ_10)) {
859 if (srb->result == SAM_STAT_GOOD) {
860 set_bit(US_FLIDX_READ10_WORKED, &us->dflags);
861 } else if (test_bit(US_FLIDX_READ10_WORKED, &us->dflags)) {
862 clear_bit(US_FLIDX_READ10_WORKED, &us->dflags);
863 set_bit(US_FLIDX_REDO_READ10, &us->dflags);
864 }
865
866
867
868
869
870
871 if (test_bit(US_FLIDX_REDO_READ10, &us->dflags)) {
872 clear_bit(US_FLIDX_REDO_READ10, &us->dflags);
873 srb->result = DID_IMM_RETRY << 16;
874 srb->sense_buffer[0] = 0;
875 }
876 }
877
878
879 if ((srb->result == SAM_STAT_GOOD || srb->sense_buffer[2] == 0) &&
880 scsi_bufflen(srb) - scsi_get_resid(srb) < srb->underflow)
881 srb->result = DID_ERROR << 16;
882
883 last_sector_hacks(us, srb);
884 return;
885
886
887
888
889
890
891 Handle_Errors:
892
893
894
895
896
897 scsi_lock(us_to_host(us));
898 set_bit(US_FLIDX_RESETTING, &us->dflags);
899 clear_bit(US_FLIDX_ABORTING, &us->dflags);
900 scsi_unlock(us_to_host(us));
901
902
903
904
905
906 mutex_unlock(&us->dev_mutex);
907 result = usb_stor_port_reset(us);
908 mutex_lock(&us->dev_mutex);
909
910 if (result < 0) {
911 scsi_lock(us_to_host(us));
912 usb_stor_report_device_reset(us);
913 scsi_unlock(us_to_host(us));
914 us->transport_reset(us);
915 }
916 clear_bit(US_FLIDX_RESETTING, &us->dflags);
917 last_sector_hacks(us, srb);
918 }
919
920
921 void usb_stor_stop_transport(struct us_data *us)
922 {
923
924
925
926
927
928
929 if (test_and_clear_bit(US_FLIDX_URB_ACTIVE, &us->dflags)) {
930 usb_stor_dbg(us, "-- cancelling URB\n");
931 usb_unlink_urb(us->current_urb);
932 }
933
934
935 if (test_and_clear_bit(US_FLIDX_SG_ACTIVE, &us->dflags)) {
936 usb_stor_dbg(us, "-- cancelling sg request\n");
937 usb_sg_cancel(&us->current_sg);
938 }
939 }
940
941
942
943
944
945 int usb_stor_CB_transport(struct scsi_cmnd *srb, struct us_data *us)
946 {
947 unsigned int transfer_length = scsi_bufflen(srb);
948 unsigned int pipe = 0;
949 int result;
950
951
952
953
954
955
956
957 memcpy(us->iobuf, srb->cmnd, srb->cmd_len);
958 result = usb_stor_ctrl_transfer(us, us->send_ctrl_pipe,
959 US_CBI_ADSC,
960 USB_TYPE_CLASS | USB_RECIP_INTERFACE, 0,
961 us->ifnum, us->iobuf, srb->cmd_len);
962
963
964 usb_stor_dbg(us, "Call to usb_stor_ctrl_transfer() returned %d\n",
965 result);
966
967
968 if (result == USB_STOR_XFER_STALLED) {
969 return USB_STOR_TRANSPORT_FAILED;
970 }
971
972
973 if (result != USB_STOR_XFER_GOOD) {
974 return USB_STOR_TRANSPORT_ERROR;
975 }
976
977
978
979 if (transfer_length) {
980 pipe = srb->sc_data_direction == DMA_FROM_DEVICE ?
981 us->recv_bulk_pipe : us->send_bulk_pipe;
982 result = usb_stor_bulk_srb(us, pipe, srb);
983 usb_stor_dbg(us, "CBI data stage result is 0x%x\n", result);
984
985
986 if (result == USB_STOR_XFER_STALLED)
987 return USB_STOR_TRANSPORT_FAILED;
988 if (result > USB_STOR_XFER_STALLED)
989 return USB_STOR_TRANSPORT_ERROR;
990 }
991
992
993
994
995
996
997
998 if (us->protocol != USB_PR_CBI)
999 return USB_STOR_TRANSPORT_GOOD;
1000
1001 result = usb_stor_intr_transfer(us, us->iobuf, 2);
1002 usb_stor_dbg(us, "Got interrupt data (0x%x, 0x%x)\n",
1003 us->iobuf[0], us->iobuf[1]);
1004 if (result != USB_STOR_XFER_GOOD)
1005 return USB_STOR_TRANSPORT_ERROR;
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015 if (us->subclass == USB_SC_UFI) {
1016 if (srb->cmnd[0] == REQUEST_SENSE ||
1017 srb->cmnd[0] == INQUIRY)
1018 return USB_STOR_TRANSPORT_GOOD;
1019 if (us->iobuf[0])
1020 goto Failed;
1021 return USB_STOR_TRANSPORT_GOOD;
1022 }
1023
1024
1025
1026
1027
1028
1029
1030
1031 if (us->iobuf[0]) {
1032 usb_stor_dbg(us, "CBI IRQ data showed reserved bType 0x%x\n",
1033 us->iobuf[0]);
1034 goto Failed;
1035
1036 }
1037
1038
1039 switch (us->iobuf[1] & 0x0F) {
1040 case 0x00:
1041 return USB_STOR_TRANSPORT_GOOD;
1042 case 0x01:
1043 goto Failed;
1044 }
1045 return USB_STOR_TRANSPORT_ERROR;
1046
1047
1048
1049
1050
1051 Failed:
1052 if (pipe)
1053 usb_stor_clear_halt(us, pipe);
1054 return USB_STOR_TRANSPORT_FAILED;
1055 }
1056 EXPORT_SYMBOL_GPL(usb_stor_CB_transport);
1057
1058
1059
1060
1061
1062
1063 int usb_stor_Bulk_max_lun(struct us_data *us)
1064 {
1065 int result;
1066
1067
1068 us->iobuf[0] = 0;
1069 result = usb_stor_control_msg(us, us->recv_ctrl_pipe,
1070 US_BULK_GET_MAX_LUN,
1071 USB_DIR_IN | USB_TYPE_CLASS |
1072 USB_RECIP_INTERFACE,
1073 0, us->ifnum, us->iobuf, 1, 10*HZ);
1074
1075 usb_stor_dbg(us, "GetMaxLUN command result is %d, data is %d\n",
1076 result, us->iobuf[0]);
1077
1078
1079
1080
1081
1082
1083 if (result > 0) {
1084 if (us->iobuf[0] < 16) {
1085 return us->iobuf[0];
1086 } else {
1087 dev_info(&us->pusb_intf->dev,
1088 "Max LUN %d is not valid, using 0 instead",
1089 us->iobuf[0]);
1090 }
1091 }
1092
1093
1094
1095
1096
1097
1098
1099
1100 return 0;
1101 }
1102
1103 int usb_stor_Bulk_transport(struct scsi_cmnd *srb, struct us_data *us)
1104 {
1105 struct bulk_cb_wrap *bcb = (struct bulk_cb_wrap *) us->iobuf;
1106 struct bulk_cs_wrap *bcs = (struct bulk_cs_wrap *) us->iobuf;
1107 unsigned int transfer_length = scsi_bufflen(srb);
1108 unsigned int residue;
1109 int result;
1110 int fake_sense = 0;
1111 unsigned int cswlen;
1112 unsigned int cbwlen = US_BULK_CB_WRAP_LEN;
1113
1114
1115 if (unlikely(us->fflags & US_FL_BULK32)) {
1116 cbwlen = 32;
1117 us->iobuf[31] = 0;
1118 }
1119
1120
1121 bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN);
1122 bcb->DataTransferLength = cpu_to_le32(transfer_length);
1123 bcb->Flags = srb->sc_data_direction == DMA_FROM_DEVICE ?
1124 US_BULK_FLAG_IN : 0;
1125 bcb->Tag = ++us->tag;
1126 bcb->Lun = srb->device->lun;
1127 if (us->fflags & US_FL_SCM_MULT_TARG)
1128 bcb->Lun |= srb->device->id << 4;
1129 bcb->Length = srb->cmd_len;
1130
1131
1132 memset(bcb->CDB, 0, sizeof(bcb->CDB));
1133 memcpy(bcb->CDB, srb->cmnd, bcb->Length);
1134
1135
1136 usb_stor_dbg(us, "Bulk Command S 0x%x T 0x%x L %d F %d Trg %d LUN %d CL %d\n",
1137 le32_to_cpu(bcb->Signature), bcb->Tag,
1138 le32_to_cpu(bcb->DataTransferLength), bcb->Flags,
1139 (bcb->Lun >> 4), (bcb->Lun & 0x0F),
1140 bcb->Length);
1141 result = usb_stor_bulk_transfer_buf(us, us->send_bulk_pipe,
1142 bcb, cbwlen, NULL);
1143 usb_stor_dbg(us, "Bulk command transfer result=%d\n", result);
1144 if (result != USB_STOR_XFER_GOOD)
1145 return USB_STOR_TRANSPORT_ERROR;
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155 if (unlikely(us->fflags & US_FL_GO_SLOW))
1156 usleep_range(125, 150);
1157
1158 if (transfer_length) {
1159 unsigned int pipe = srb->sc_data_direction == DMA_FROM_DEVICE ?
1160 us->recv_bulk_pipe : us->send_bulk_pipe;
1161 result = usb_stor_bulk_srb(us, pipe, srb);
1162 usb_stor_dbg(us, "Bulk data transfer result 0x%x\n", result);
1163 if (result == USB_STOR_XFER_ERROR)
1164 return USB_STOR_TRANSPORT_ERROR;
1165
1166
1167
1168
1169
1170
1171
1172
1173 if (result == USB_STOR_XFER_LONG)
1174 fake_sense = 1;
1175
1176
1177
1178
1179
1180
1181
1182 if (result == USB_STOR_XFER_SHORT &&
1183 srb->sc_data_direction == DMA_FROM_DEVICE &&
1184 transfer_length - scsi_get_resid(srb) ==
1185 US_BULK_CS_WRAP_LEN) {
1186 struct scatterlist *sg = NULL;
1187 unsigned int offset = 0;
1188
1189 if (usb_stor_access_xfer_buf((unsigned char *) bcs,
1190 US_BULK_CS_WRAP_LEN, srb, &sg,
1191 &offset, FROM_XFER_BUF) ==
1192 US_BULK_CS_WRAP_LEN &&
1193 bcs->Signature ==
1194 cpu_to_le32(US_BULK_CS_SIGN)) {
1195 usb_stor_dbg(us, "Device skipped data phase\n");
1196 scsi_set_resid(srb, transfer_length);
1197 goto skipped_data_phase;
1198 }
1199 }
1200 }
1201
1202
1203
1204
1205
1206
1207
1208 usb_stor_dbg(us, "Attempting to get CSW...\n");
1209 result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe,
1210 bcs, US_BULK_CS_WRAP_LEN, &cswlen);
1211
1212
1213
1214
1215
1216
1217 if (result == USB_STOR_XFER_SHORT && cswlen == 0) {
1218 usb_stor_dbg(us, "Received 0-length CSW; retrying...\n");
1219 result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe,
1220 bcs, US_BULK_CS_WRAP_LEN, &cswlen);
1221 }
1222
1223
1224 if (result == USB_STOR_XFER_STALLED) {
1225
1226
1227 usb_stor_dbg(us, "Attempting to get CSW (2nd try)...\n");
1228 result = usb_stor_bulk_transfer_buf(us, us->recv_bulk_pipe,
1229 bcs, US_BULK_CS_WRAP_LEN, NULL);
1230 }
1231
1232
1233 usb_stor_dbg(us, "Bulk status result = %d\n", result);
1234 if (result != USB_STOR_XFER_GOOD)
1235 return USB_STOR_TRANSPORT_ERROR;
1236
1237 skipped_data_phase:
1238
1239 residue = le32_to_cpu(bcs->Residue);
1240 usb_stor_dbg(us, "Bulk Status S 0x%x T 0x%x R %u Stat 0x%x\n",
1241 le32_to_cpu(bcs->Signature), bcs->Tag,
1242 residue, bcs->Status);
1243 if (!(bcs->Tag == us->tag || (us->fflags & US_FL_BULK_IGNORE_TAG)) ||
1244 bcs->Status > US_BULK_STAT_PHASE) {
1245 usb_stor_dbg(us, "Bulk logical error\n");
1246 return USB_STOR_TRANSPORT_ERROR;
1247 }
1248
1249
1250
1251
1252
1253
1254 if (!us->bcs_signature) {
1255 us->bcs_signature = bcs->Signature;
1256 if (us->bcs_signature != cpu_to_le32(US_BULK_CS_SIGN))
1257 usb_stor_dbg(us, "Learnt BCS signature 0x%08X\n",
1258 le32_to_cpu(us->bcs_signature));
1259 } else if (bcs->Signature != us->bcs_signature) {
1260 usb_stor_dbg(us, "Signature mismatch: got %08X, expecting %08X\n",
1261 le32_to_cpu(bcs->Signature),
1262 le32_to_cpu(us->bcs_signature));
1263 return USB_STOR_TRANSPORT_ERROR;
1264 }
1265
1266
1267
1268
1269
1270 if (residue && !(us->fflags & US_FL_IGNORE_RESIDUE)) {
1271
1272
1273
1274
1275
1276
1277 if (bcs->Status == US_BULK_STAT_OK &&
1278 scsi_get_resid(srb) == 0 &&
1279 ((srb->cmnd[0] == INQUIRY &&
1280 transfer_length == 36) ||
1281 (srb->cmnd[0] == READ_CAPACITY &&
1282 transfer_length == 8))) {
1283 us->fflags |= US_FL_IGNORE_RESIDUE;
1284
1285 } else {
1286 residue = min(residue, transfer_length);
1287 scsi_set_resid(srb, max(scsi_get_resid(srb),
1288 (int) residue));
1289 }
1290 }
1291
1292
1293 switch (bcs->Status) {
1294 case US_BULK_STAT_OK:
1295
1296 if (fake_sense) {
1297 memcpy(srb->sense_buffer,
1298 usb_stor_sense_invalidCDB,
1299 sizeof(usb_stor_sense_invalidCDB));
1300 return USB_STOR_TRANSPORT_NO_SENSE;
1301 }
1302
1303
1304 return USB_STOR_TRANSPORT_GOOD;
1305
1306 case US_BULK_STAT_FAIL:
1307
1308 return USB_STOR_TRANSPORT_FAILED;
1309
1310 case US_BULK_STAT_PHASE:
1311
1312
1313
1314
1315 return USB_STOR_TRANSPORT_ERROR;
1316 }
1317
1318
1319 return USB_STOR_TRANSPORT_ERROR;
1320 }
1321 EXPORT_SYMBOL_GPL(usb_stor_Bulk_transport);
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336 static int usb_stor_reset_common(struct us_data *us,
1337 u8 request, u8 requesttype,
1338 u16 value, u16 index, void *data, u16 size)
1339 {
1340 int result;
1341 int result2;
1342
1343 if (test_bit(US_FLIDX_DISCONNECTING, &us->dflags)) {
1344 usb_stor_dbg(us, "No reset during disconnect\n");
1345 return -EIO;
1346 }
1347
1348 result = usb_stor_control_msg(us, us->send_ctrl_pipe,
1349 request, requesttype, value, index, data, size,
1350 5*HZ);
1351 if (result < 0) {
1352 usb_stor_dbg(us, "Soft reset failed: %d\n", result);
1353 return result;
1354 }
1355
1356
1357
1358
1359
1360 wait_event_interruptible_timeout(us->delay_wait,
1361 test_bit(US_FLIDX_DISCONNECTING, &us->dflags),
1362 HZ*6);
1363 if (test_bit(US_FLIDX_DISCONNECTING, &us->dflags)) {
1364 usb_stor_dbg(us, "Reset interrupted by disconnect\n");
1365 return -EIO;
1366 }
1367
1368 usb_stor_dbg(us, "Soft reset: clearing bulk-in endpoint halt\n");
1369 result = usb_stor_clear_halt(us, us->recv_bulk_pipe);
1370
1371 usb_stor_dbg(us, "Soft reset: clearing bulk-out endpoint halt\n");
1372 result2 = usb_stor_clear_halt(us, us->send_bulk_pipe);
1373
1374
1375 if (result >= 0)
1376 result = result2;
1377 if (result < 0)
1378 usb_stor_dbg(us, "Soft reset failed\n");
1379 else
1380 usb_stor_dbg(us, "Soft reset done\n");
1381 return result;
1382 }
1383
1384
1385 #define CB_RESET_CMD_SIZE 12
1386
1387 int usb_stor_CB_reset(struct us_data *us)
1388 {
1389 memset(us->iobuf, 0xFF, CB_RESET_CMD_SIZE);
1390 us->iobuf[0] = SEND_DIAGNOSTIC;
1391 us->iobuf[1] = 4;
1392 return usb_stor_reset_common(us, US_CBI_ADSC,
1393 USB_TYPE_CLASS | USB_RECIP_INTERFACE,
1394 0, us->ifnum, us->iobuf, CB_RESET_CMD_SIZE);
1395 }
1396 EXPORT_SYMBOL_GPL(usb_stor_CB_reset);
1397
1398
1399
1400
1401
1402 int usb_stor_Bulk_reset(struct us_data *us)
1403 {
1404 return usb_stor_reset_common(us, US_BULK_RESET_REQUEST,
1405 USB_TYPE_CLASS | USB_RECIP_INTERFACE,
1406 0, us->ifnum, NULL, 0);
1407 }
1408 EXPORT_SYMBOL_GPL(usb_stor_Bulk_reset);
1409
1410
1411
1412
1413
1414 int usb_stor_port_reset(struct us_data *us)
1415 {
1416 int result;
1417
1418
1419 if (us->pusb_dev->quirks & USB_QUIRK_RESET)
1420 return -EPERM;
1421
1422 result = usb_lock_device_for_reset(us->pusb_dev, us->pusb_intf);
1423 if (result < 0)
1424 usb_stor_dbg(us, "unable to lock device for reset: %d\n",
1425 result);
1426 else {
1427
1428 if (test_bit(US_FLIDX_DISCONNECTING, &us->dflags)) {
1429 result = -EIO;
1430 usb_stor_dbg(us, "No reset during disconnect\n");
1431 } else {
1432 result = usb_reset_device(us->pusb_dev);
1433 usb_stor_dbg(us, "usb_reset_device returns %d\n",
1434 result);
1435 }
1436 usb_unlock_device(us->pusb_dev);
1437 }
1438 return result;
1439 }