1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23#include <linux/kernel.h>
24#include <linux/module.h>
25#include <linux/usb.h>
26#include <linux/usb_usual.h>
27#include <linux/blkdev.h>
28#include <linux/timer.h>
29#include <linux/scatterlist.h>
30#include <scsi/scsi.h>
31
32#define DRV_NAME "ub"
33
34#define UB_MAJOR 180
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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
102
103
104
105
106
107#define UB_MAX_LUNS 9
108
109
110
111
112#define UB_PARTS_PER_LUN 8
113
114#define UB_MAX_CDB_SIZE 16
115
116#define UB_SENSE_SIZE 18
117
118
119
120
121
122struct bulk_cb_wrap {
123 __le32 Signature;
124 u32 Tag;
125 __le32 DataTransferLength;
126 u8 Flags;
127 u8 Lun;
128 u8 Length;
129 u8 CDB[UB_MAX_CDB_SIZE];
130};
131
132#define US_BULK_CB_WRAP_LEN 31
133#define US_BULK_CB_SIGN 0x43425355
134#define US_BULK_FLAG_IN 1
135#define US_BULK_FLAG_OUT 0
136
137
138struct bulk_cs_wrap {
139 __le32 Signature;
140 u32 Tag;
141 __le32 Residue;
142 u8 Status;
143};
144
145#define US_BULK_CS_WRAP_LEN 13
146#define US_BULK_CS_SIGN 0x53425355
147#define US_BULK_STAT_OK 0
148#define US_BULK_STAT_FAIL 1
149#define US_BULK_STAT_PHASE 2
150
151
152#define US_BULK_RESET_REQUEST 0xff
153#define US_BULK_GET_MAX_LUN 0xfe
154
155
156
157struct ub_dev;
158
159#define UB_MAX_REQ_SG 9
160#define UB_MAX_SECTORS 64
161
162
163
164
165
166#define UB_URB_TIMEOUT (HZ*2)
167#define UB_DATA_TIMEOUT (HZ*5)
168#define UB_STAT_TIMEOUT (HZ*5)
169#define UB_CTRL_TIMEOUT (HZ/2)
170
171
172
173
174#define UB_DIR_NONE 0
175#define UB_DIR_READ 1
176#define UB_DIR_ILLEGAL2 2
177#define UB_DIR_WRITE 3
178
179#define UB_DIR_CHAR(c) (((c)==UB_DIR_WRITE)? 'w': \
180 (((c)==UB_DIR_READ)? 'r': 'n'))
181
182enum ub_scsi_cmd_state {
183 UB_CMDST_INIT,
184 UB_CMDST_CMD,
185 UB_CMDST_DATA,
186 UB_CMDST_CLR2STS,
187 UB_CMDST_STAT,
188 UB_CMDST_CLEAR,
189 UB_CMDST_CLRRS,
190 UB_CMDST_SENSE,
191 UB_CMDST_DONE
192};
193
194struct ub_scsi_cmd {
195 unsigned char cdb[UB_MAX_CDB_SIZE];
196 unsigned char cdb_len;
197
198 unsigned char dir;
199 enum ub_scsi_cmd_state state;
200 unsigned int tag;
201 struct ub_scsi_cmd *next;
202
203 int error;
204 unsigned int act_len;
205 unsigned char key, asc, ascq;
206
207 int stat_count;
208 unsigned int timeo;
209
210 unsigned int len;
211 unsigned int current_sg;
212 unsigned int nsg;
213 struct scatterlist sgv[UB_MAX_REQ_SG];
214
215 struct ub_lun *lun;
216 void (*done)(struct ub_dev *, struct ub_scsi_cmd *);
217 void *back;
218};
219
220struct ub_request {
221 struct request *rq;
222 unsigned int current_try;
223 unsigned int nsg;
224 struct scatterlist sgv[UB_MAX_REQ_SG];
225};
226
227
228
229struct ub_capacity {
230 unsigned long nsec;
231 unsigned int bsize;
232 unsigned int bshift;
233};
234
235
236
237
238
239
240
241
242
243
244struct ub_completion {
245 unsigned int done;
246 spinlock_t lock;
247};
248
249static inline void ub_init_completion(struct ub_completion *x)
250{
251 x->done = 0;
252 spin_lock_init(&x->lock);
253}
254
255#define UB_INIT_COMPLETION(x) ((x).done = 0)
256
257static void ub_complete(struct ub_completion *x)
258{
259 unsigned long flags;
260
261 spin_lock_irqsave(&x->lock, flags);
262 x->done++;
263 spin_unlock_irqrestore(&x->lock, flags);
264}
265
266static int ub_is_completed(struct ub_completion *x)
267{
268 unsigned long flags;
269 int ret;
270
271 spin_lock_irqsave(&x->lock, flags);
272 ret = x->done;
273 spin_unlock_irqrestore(&x->lock, flags);
274 return ret;
275}
276
277
278
279struct ub_scsi_cmd_queue {
280 int qlen, qmax;
281 struct ub_scsi_cmd *head, *tail;
282};
283
284
285
286
287struct ub_lun {
288 struct ub_dev *udev;
289 struct list_head link;
290 struct gendisk *disk;
291 int id;
292 int num;
293 char name[16];
294
295 int changed;
296 int removable;
297 int readonly;
298
299 struct ub_request urq;
300
301
302
303
304
305
306
307 int cmda[1];
308 struct ub_scsi_cmd cmdv[1];
309
310 struct ub_capacity capacity;
311};
312
313
314
315
316struct ub_dev {
317 spinlock_t *lock;
318 atomic_t poison;
319 int openc;
320
321 int reset;
322 int bad_resid;
323 unsigned int tagcnt;
324 char name[12];
325 struct usb_device *dev;
326 struct usb_interface *intf;
327
328 struct list_head luns;
329
330 unsigned int send_bulk_pipe;
331 unsigned int recv_bulk_pipe;
332 unsigned int send_ctrl_pipe;
333 unsigned int recv_ctrl_pipe;
334
335 struct tasklet_struct tasklet;
336
337 struct ub_scsi_cmd_queue cmd_queue;
338 struct ub_scsi_cmd top_rqs_cmd;
339 unsigned char top_sense[UB_SENSE_SIZE];
340
341 struct ub_completion work_done;
342 struct urb work_urb;
343 struct timer_list work_timer;
344 int last_pipe;
345 __le32 signature;
346 struct bulk_cb_wrap work_bcb;
347 struct bulk_cs_wrap work_bcs;
348 struct usb_ctrlrequest work_cr;
349
350 struct work_struct reset_work;
351 wait_queue_head_t reset_wait;
352
353 int sg_stat[6];
354};
355
356
357
358static void ub_cleanup(struct ub_dev *sc);
359static int ub_request_fn_1(struct ub_lun *lun, struct request *rq);
360static void ub_cmd_build_block(struct ub_dev *sc, struct ub_lun *lun,
361 struct ub_scsi_cmd *cmd, struct ub_request *urq);
362static void ub_cmd_build_packet(struct ub_dev *sc, struct ub_lun *lun,
363 struct ub_scsi_cmd *cmd, struct ub_request *urq);
364static void ub_rw_cmd_done(struct ub_dev *sc, struct ub_scsi_cmd *cmd);
365static void ub_end_rq(struct request *rq, unsigned int status,
366 unsigned int cmd_len);
367static int ub_rw_cmd_retry(struct ub_dev *sc, struct ub_lun *lun,
368 struct ub_request *urq, struct ub_scsi_cmd *cmd);
369static int ub_submit_scsi(struct ub_dev *sc, struct ub_scsi_cmd *cmd);
370static void ub_urb_complete(struct urb *urb);
371static void ub_scsi_action(unsigned long _dev);
372static void ub_scsi_dispatch(struct ub_dev *sc);
373static void ub_scsi_urb_compl(struct ub_dev *sc, struct ub_scsi_cmd *cmd);
374static void ub_data_start(struct ub_dev *sc, struct ub_scsi_cmd *cmd);
375static void ub_state_done(struct ub_dev *sc, struct ub_scsi_cmd *cmd, int rc);
376static int __ub_state_stat(struct ub_dev *sc, struct ub_scsi_cmd *cmd);
377static void ub_state_stat(struct ub_dev *sc, struct ub_scsi_cmd *cmd);
378static void ub_state_stat_counted(struct ub_dev *sc, struct ub_scsi_cmd *cmd);
379static void ub_state_sense(struct ub_dev *sc, struct ub_scsi_cmd *cmd);
380static int ub_submit_clear_stall(struct ub_dev *sc, struct ub_scsi_cmd *cmd,
381 int stalled_pipe);
382static void ub_top_sense_done(struct ub_dev *sc, struct ub_scsi_cmd *scmd);
383static void ub_reset_enter(struct ub_dev *sc, int try);
384static void ub_reset_task(struct work_struct *work);
385static int ub_sync_tur(struct ub_dev *sc, struct ub_lun *lun);
386static int ub_sync_read_cap(struct ub_dev *sc, struct ub_lun *lun,
387 struct ub_capacity *ret);
388static int ub_sync_reset(struct ub_dev *sc);
389static int ub_probe_clear_stall(struct ub_dev *sc, int stalled_pipe);
390static int ub_probe_lun(struct ub_dev *sc, int lnum);
391
392
393
394#ifdef CONFIG_USB_LIBUSUAL
395
396#define ub_usb_ids storage_usb_ids
397#else
398
399static struct usb_device_id ub_usb_ids[] = {
400 { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, US_SC_SCSI, US_PR_BULK) },
401 { }
402};
403
404MODULE_DEVICE_TABLE(usb, ub_usb_ids);
405#endif
406
407
408
409
410
411
412
413
414#define UB_MAX_HOSTS 26
415static char ub_hostv[UB_MAX_HOSTS];
416
417#define UB_QLOCK_NUM 5
418static spinlock_t ub_qlockv[UB_QLOCK_NUM];
419static int ub_qlock_next = 0;
420
421static DEFINE_SPINLOCK(ub_lock);
422
423
424
425
426
427
428static int ub_id_get(void)
429{
430 unsigned long flags;
431 int i;
432
433 spin_lock_irqsave(&ub_lock, flags);
434 for (i = 0; i < UB_MAX_HOSTS; i++) {
435 if (ub_hostv[i] == 0) {
436 ub_hostv[i] = 1;
437 spin_unlock_irqrestore(&ub_lock, flags);
438 return i;
439 }
440 }
441 spin_unlock_irqrestore(&ub_lock, flags);
442 return -1;
443}
444
445static void ub_id_put(int id)
446{
447 unsigned long flags;
448
449 if (id < 0 || id >= UB_MAX_HOSTS) {
450 printk(KERN_ERR DRV_NAME ": bad host ID %d\n", id);
451 return;
452 }
453
454 spin_lock_irqsave(&ub_lock, flags);
455 if (ub_hostv[id] == 0) {
456 spin_unlock_irqrestore(&ub_lock, flags);
457 printk(KERN_ERR DRV_NAME ": freeing free host ID %d\n", id);
458 return;
459 }
460 ub_hostv[id] = 0;
461 spin_unlock_irqrestore(&ub_lock, flags);
462}
463
464
465
466
467
468
469
470static spinlock_t *ub_next_lock(void)
471{
472 unsigned long flags;
473 spinlock_t *ret;
474
475 spin_lock_irqsave(&ub_lock, flags);
476 ret = &ub_qlockv[ub_qlock_next];
477 ub_qlock_next = (ub_qlock_next + 1) % UB_QLOCK_NUM;
478 spin_unlock_irqrestore(&ub_lock, flags);
479 return ret;
480}
481
482
483
484
485
486
487
488
489
490static void ub_put(struct ub_dev *sc)
491{
492 unsigned long flags;
493
494 spin_lock_irqsave(&ub_lock, flags);
495 --sc->openc;
496 if (sc->openc == 0 && atomic_read(&sc->poison)) {
497 spin_unlock_irqrestore(&ub_lock, flags);
498 ub_cleanup(sc);
499 } else {
500 spin_unlock_irqrestore(&ub_lock, flags);
501 }
502}
503
504
505
506
507static void ub_cleanup(struct ub_dev *sc)
508{
509 struct list_head *p;
510 struct ub_lun *lun;
511 struct request_queue *q;
512
513 while (!list_empty(&sc->luns)) {
514 p = sc->luns.next;
515 lun = list_entry(p, struct ub_lun, link);
516 list_del(p);
517
518
519 if ((q = lun->disk->queue) != NULL)
520 blk_cleanup_queue(q);
521
522
523
524
525
526
527
528
529
530 put_disk(lun->disk);
531 lun->disk = NULL;
532
533 ub_id_put(lun->id);
534 kfree(lun);
535 }
536
537 usb_set_intfdata(sc->intf, NULL);
538 usb_put_intf(sc->intf);
539 usb_put_dev(sc->dev);
540 kfree(sc);
541}
542
543
544
545
546static struct ub_scsi_cmd *ub_get_cmd(struct ub_lun *lun)
547{
548 struct ub_scsi_cmd *ret;
549
550 if (lun->cmda[0])
551 return NULL;
552 ret = &lun->cmdv[0];
553 lun->cmda[0] = 1;
554 return ret;
555}
556
557static void ub_put_cmd(struct ub_lun *lun, struct ub_scsi_cmd *cmd)
558{
559 if (cmd != &lun->cmdv[0]) {
560 printk(KERN_WARNING "%s: releasing a foreign cmd %p\n",
561 lun->name, cmd);
562 return;
563 }
564 if (!lun->cmda[0]) {
565 printk(KERN_WARNING "%s: releasing a free cmd\n", lun->name);
566 return;
567 }
568 lun->cmda[0] = 0;
569}
570
571
572
573
574static void ub_cmdq_add(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
575{
576 struct ub_scsi_cmd_queue *t = &sc->cmd_queue;
577
578 if (t->qlen++ == 0) {
579 t->head = cmd;
580 t->tail = cmd;
581 } else {
582 t->tail->next = cmd;
583 t->tail = cmd;
584 }
585
586 if (t->qlen > t->qmax)
587 t->qmax = t->qlen;
588}
589
590static void ub_cmdq_insert(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
591{
592 struct ub_scsi_cmd_queue *t = &sc->cmd_queue;
593
594 if (t->qlen++ == 0) {
595 t->head = cmd;
596 t->tail = cmd;
597 } else {
598 cmd->next = t->head;
599 t->head = cmd;
600 }
601
602 if (t->qlen > t->qmax)
603 t->qmax = t->qlen;
604}
605
606static struct ub_scsi_cmd *ub_cmdq_pop(struct ub_dev *sc)
607{
608 struct ub_scsi_cmd_queue *t = &sc->cmd_queue;
609 struct ub_scsi_cmd *cmd;
610
611 if (t->qlen == 0)
612 return NULL;
613 if (--t->qlen == 0)
614 t->tail = NULL;
615 cmd = t->head;
616 t->head = cmd->next;
617 cmd->next = NULL;
618 return cmd;
619}
620
621#define ub_cmdq_peek(sc) ((sc)->cmd_queue.head)
622
623
624
625
626
627static void ub_request_fn(struct request_queue *q)
628{
629 struct ub_lun *lun = q->queuedata;
630 struct request *rq;
631
632 while ((rq = elv_next_request(q)) != NULL) {
633 if (ub_request_fn_1(lun, rq) != 0) {
634 blk_stop_queue(q);
635 break;
636 }
637 }
638}
639
640static int ub_request_fn_1(struct ub_lun *lun, struct request *rq)
641{
642 struct ub_dev *sc = lun->udev;
643 struct ub_scsi_cmd *cmd;
644 struct ub_request *urq;
645 int n_elem;
646
647 if (atomic_read(&sc->poison)) {
648 blkdev_dequeue_request(rq);
649 ub_end_rq(rq, DID_NO_CONNECT << 16, blk_rq_bytes(rq));
650 return 0;
651 }
652
653 if (lun->changed && !blk_pc_request(rq)) {
654 blkdev_dequeue_request(rq);
655 ub_end_rq(rq, SAM_STAT_CHECK_CONDITION, blk_rq_bytes(rq));
656 return 0;
657 }
658
659 if (lun->urq.rq != NULL)
660 return -1;
661 if ((cmd = ub_get_cmd(lun)) == NULL)
662 return -1;
663 memset(cmd, 0, sizeof(struct ub_scsi_cmd));
664
665 blkdev_dequeue_request(rq);
666
667 urq = &lun->urq;
668 memset(urq, 0, sizeof(struct ub_request));
669 urq->rq = rq;
670
671
672
673
674 sg_init_table(&urq->sgv[0], UB_MAX_REQ_SG);
675 n_elem = blk_rq_map_sg(lun->disk->queue, rq, &urq->sgv[0]);
676 if (n_elem < 0) {
677
678 printk(KERN_INFO "%s: failed request map (%d)\n",
679 lun->name, n_elem);
680 goto drop;
681 }
682 if (n_elem > UB_MAX_REQ_SG) {
683 printk(KERN_WARNING "%s: request with %d segments\n",
684 lun->name, n_elem);
685 goto drop;
686 }
687 urq->nsg = n_elem;
688 sc->sg_stat[n_elem < 5 ? n_elem : 5]++;
689
690 if (blk_pc_request(rq)) {
691 ub_cmd_build_packet(sc, lun, cmd, urq);
692 } else {
693 ub_cmd_build_block(sc, lun, cmd, urq);
694 }
695 cmd->state = UB_CMDST_INIT;
696 cmd->lun = lun;
697 cmd->done = ub_rw_cmd_done;
698 cmd->back = urq;
699
700 cmd->tag = sc->tagcnt++;
701 if (ub_submit_scsi(sc, cmd) != 0)
702 goto drop;
703
704 return 0;
705
706drop:
707 ub_put_cmd(lun, cmd);
708 ub_end_rq(rq, DID_ERROR << 16, blk_rq_bytes(rq));
709 return 0;
710}
711
712static void ub_cmd_build_block(struct ub_dev *sc, struct ub_lun *lun,
713 struct ub_scsi_cmd *cmd, struct ub_request *urq)
714{
715 struct request *rq = urq->rq;
716 unsigned int block, nblks;
717
718 if (rq_data_dir(rq) == WRITE)
719 cmd->dir = UB_DIR_WRITE;
720 else
721 cmd->dir = UB_DIR_READ;
722
723 cmd->nsg = urq->nsg;
724 memcpy(cmd->sgv, urq->sgv, sizeof(struct scatterlist) * cmd->nsg);
725
726
727
728
729
730
731
732 block = rq->sector >> lun->capacity.bshift;
733 nblks = rq->nr_sectors >> lun->capacity.bshift;
734
735 cmd->cdb[0] = (cmd->dir == UB_DIR_READ)? READ_10: WRITE_10;
736
737 cmd->cdb[2] = block >> 24;
738 cmd->cdb[3] = block >> 16;
739 cmd->cdb[4] = block >> 8;
740 cmd->cdb[5] = block;
741 cmd->cdb[7] = nblks >> 8;
742 cmd->cdb[8] = nblks;
743 cmd->cdb_len = 10;
744
745 cmd->len = rq->nr_sectors * 512;
746}
747
748static void ub_cmd_build_packet(struct ub_dev *sc, struct ub_lun *lun,
749 struct ub_scsi_cmd *cmd, struct ub_request *urq)
750{
751 struct request *rq = urq->rq;
752
753 if (rq->data_len == 0) {
754 cmd->dir = UB_DIR_NONE;
755 } else {
756 if (rq_data_dir(rq) == WRITE)
757 cmd->dir = UB_DIR_WRITE;
758 else
759 cmd->dir = UB_DIR_READ;
760 }
761
762 cmd->nsg = urq->nsg;
763 memcpy(cmd->sgv, urq->sgv, sizeof(struct scatterlist) * cmd->nsg);
764
765 memcpy(&cmd->cdb, rq->cmd, rq->cmd_len);
766 cmd->cdb_len = rq->cmd_len;
767
768 cmd->len = rq->data_len;
769
770
771
772
773
774 cmd->timeo = rq->timeout;
775}
776
777static void ub_rw_cmd_done(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
778{
779 struct ub_lun *lun = cmd->lun;
780 struct ub_request *urq = cmd->back;
781 struct request *rq;
782 unsigned int scsi_status;
783 unsigned int cmd_len;
784
785 rq = urq->rq;
786
787 if (cmd->error == 0) {
788 if (blk_pc_request(rq)) {
789 if (cmd->act_len >= rq->data_len)
790 rq->data_len = 0;
791 else
792 rq->data_len -= cmd->act_len;
793 scsi_status = 0;
794 } else {
795 if (cmd->act_len != cmd->len) {
796 scsi_status = SAM_STAT_CHECK_CONDITION;
797 } else {
798 scsi_status = 0;
799 }
800 }
801 } else {
802 if (blk_pc_request(rq)) {
803
804 memcpy(rq->sense, sc->top_sense, UB_SENSE_SIZE);
805 rq->sense_len = UB_SENSE_SIZE;
806 if (sc->top_sense[0] != 0)
807 scsi_status = SAM_STAT_CHECK_CONDITION;
808 else
809 scsi_status = DID_ERROR << 16;
810 } else {
811 if (cmd->error == -EIO &&
812 (cmd->key == 0 ||
813 cmd->key == MEDIUM_ERROR ||
814 cmd->key == UNIT_ATTENTION)) {
815 if (ub_rw_cmd_retry(sc, lun, urq, cmd) == 0)
816 return;
817 }
818 scsi_status = SAM_STAT_CHECK_CONDITION;
819 }
820 }
821
822 urq->rq = NULL;
823
824 cmd_len = cmd->len;
825 ub_put_cmd(lun, cmd);
826 ub_end_rq(rq, scsi_status, cmd_len);
827 blk_start_queue(lun->disk->queue);
828}
829
830static void ub_end_rq(struct request *rq, unsigned int scsi_status,
831 unsigned int cmd_len)
832{
833 int error;
834 long rqlen;
835
836 if (scsi_status == 0) {
837 error = 0;
838 } else {
839 error = -EIO;
840 rq->errors = scsi_status;
841 }
842 rqlen = blk_rq_bytes(rq);
843 if (__blk_end_request(rq, error, cmd_len)) {
844 printk(KERN_WARNING DRV_NAME
845 ": __blk_end_request blew, %s-cmd total %u rqlen %ld\n",
846 blk_pc_request(rq)? "pc": "fs", cmd_len, rqlen);
847 }
848}
849
850static int ub_rw_cmd_retry(struct ub_dev *sc, struct ub_lun *lun,
851 struct ub_request *urq, struct ub_scsi_cmd *cmd)
852{
853
854 if (atomic_read(&sc->poison))
855 return -ENXIO;
856
857 ub_reset_enter(sc, urq->current_try);
858
859 if (urq->current_try >= 3)
860 return -EIO;
861 urq->current_try++;
862
863
864 printk(KERN_DEBUG "%s: dir %c len/act %d/%d "
865 "[sense %x %02x %02x] retry %d\n",
866 sc->name, UB_DIR_CHAR(cmd->dir), cmd->len, cmd->act_len,
867 cmd->key, cmd->asc, cmd->ascq, urq->current_try);
868
869 memset(cmd, 0, sizeof(struct ub_scsi_cmd));
870 ub_cmd_build_block(sc, lun, cmd, urq);
871
872 cmd->state = UB_CMDST_INIT;
873 cmd->lun = lun;
874 cmd->done = ub_rw_cmd_done;
875 cmd->back = urq;
876
877 cmd->tag = sc->tagcnt++;
878
879#if 0
880 return ub_submit_scsi(sc, cmd);
881#else
882 ub_cmdq_add(sc, cmd);
883 return 0;
884#endif
885}
886
887
888
889
890
891
892
893
894
895
896static int ub_submit_scsi(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
897{
898
899 if (cmd->state != UB_CMDST_INIT ||
900 (cmd->dir != UB_DIR_NONE && cmd->len == 0)) {
901 return -EINVAL;
902 }
903
904 ub_cmdq_add(sc, cmd);
905
906
907
908
909 tasklet_schedule(&sc->tasklet);
910 return 0;
911}
912
913
914
915
916
917static int ub_scsi_cmd_start(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
918{
919 struct bulk_cb_wrap *bcb;
920 int rc;
921
922 bcb = &sc->work_bcb;
923
924
925
926
927
928
929
930
931
932
933 memset(&sc->top_sense, 0, UB_SENSE_SIZE);
934
935
936 bcb->Signature = cpu_to_le32(US_BULK_CB_SIGN);
937 bcb->Tag = cmd->tag;
938 bcb->DataTransferLength = cpu_to_le32(cmd->len);
939 bcb->Flags = (cmd->dir == UB_DIR_READ) ? 0x80 : 0;
940 bcb->Lun = (cmd->lun != NULL) ? cmd->lun->num : 0;
941 bcb->Length = cmd->cdb_len;
942
943
944 memcpy(bcb->CDB, cmd->cdb, UB_MAX_CDB_SIZE);
945
946 UB_INIT_COMPLETION(sc->work_done);
947
948 sc->last_pipe = sc->send_bulk_pipe;
949 usb_fill_bulk_urb(&sc->work_urb, sc->dev, sc->send_bulk_pipe,
950 bcb, US_BULK_CB_WRAP_LEN, ub_urb_complete, sc);
951
952 if ((rc = usb_submit_urb(&sc->work_urb, GFP_ATOMIC)) != 0) {
953
954 ub_complete(&sc->work_done);
955 return rc;
956 }
957
958 sc->work_timer.expires = jiffies + UB_URB_TIMEOUT;
959 add_timer(&sc->work_timer);
960
961 cmd->state = UB_CMDST_CMD;
962 return 0;
963}
964
965
966
967
968static void ub_urb_timeout(unsigned long arg)
969{
970 struct ub_dev *sc = (struct ub_dev *) arg;
971 unsigned long flags;
972
973 spin_lock_irqsave(sc->lock, flags);
974 if (!ub_is_completed(&sc->work_done))
975 usb_unlink_urb(&sc->work_urb);
976 spin_unlock_irqrestore(sc->lock, flags);
977}
978
979
980
981
982
983
984
985
986static void ub_urb_complete(struct urb *urb)
987{
988 struct ub_dev *sc = urb->context;
989
990 ub_complete(&sc->work_done);
991 tasklet_schedule(&sc->tasklet);
992}
993
994static void ub_scsi_action(unsigned long _dev)
995{
996 struct ub_dev *sc = (struct ub_dev *) _dev;
997 unsigned long flags;
998
999 spin_lock_irqsave(sc->lock, flags);
1000 ub_scsi_dispatch(sc);
1001 spin_unlock_irqrestore(sc->lock, flags);
1002}
1003
1004static void ub_scsi_dispatch(struct ub_dev *sc)
1005{
1006 struct ub_scsi_cmd *cmd;
1007 int rc;
1008
1009 while (!sc->reset && (cmd = ub_cmdq_peek(sc)) != NULL) {
1010 if (cmd->state == UB_CMDST_DONE) {
1011 ub_cmdq_pop(sc);
1012 (*cmd->done)(sc, cmd);
1013 } else if (cmd->state == UB_CMDST_INIT) {
1014 if ((rc = ub_scsi_cmd_start(sc, cmd)) == 0)
1015 break;
1016 cmd->error = rc;
1017 cmd->state = UB_CMDST_DONE;
1018 } else {
1019 if (!ub_is_completed(&sc->work_done))
1020 break;
1021 del_timer(&sc->work_timer);
1022 ub_scsi_urb_compl(sc, cmd);
1023 }
1024 }
1025}
1026
1027static void ub_scsi_urb_compl(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
1028{
1029 struct urb *urb = &sc->work_urb;
1030 struct bulk_cs_wrap *bcs;
1031 int len;
1032 int rc;
1033
1034 if (atomic_read(&sc->poison)) {
1035 ub_state_done(sc, cmd, -ENODEV);
1036 return;
1037 }
1038
1039 if (cmd->state == UB_CMDST_CLEAR) {
1040 if (urb->status == -EPIPE) {
1041
1042
1043
1044
1045 printk(KERN_NOTICE "%s: stall on control pipe\n",
1046 sc->name);
1047 goto Bad_End;
1048 }
1049
1050
1051
1052
1053
1054
1055 usb_settoggle(sc->dev, usb_pipeendpoint(sc->last_pipe),
1056 usb_pipeout(sc->last_pipe), 0);
1057
1058 ub_state_sense(sc, cmd);
1059
1060 } else if (cmd->state == UB_CMDST_CLR2STS) {
1061 if (urb->status == -EPIPE) {
1062 printk(KERN_NOTICE "%s: stall on control pipe\n",
1063 sc->name);
1064 goto Bad_End;
1065 }
1066
1067
1068
1069
1070
1071
1072 usb_settoggle(sc->dev, usb_pipeendpoint(sc->last_pipe),
1073 usb_pipeout(sc->last_pipe), 0);
1074
1075 ub_state_stat(sc, cmd);
1076
1077 } else if (cmd->state == UB_CMDST_CLRRS) {
1078 if (urb->status == -EPIPE) {
1079 printk(KERN_NOTICE "%s: stall on control pipe\n",
1080 sc->name);
1081 goto Bad_End;
1082 }
1083
1084
1085
1086
1087
1088
1089 usb_settoggle(sc->dev, usb_pipeendpoint(sc->last_pipe),
1090 usb_pipeout(sc->last_pipe), 0);
1091
1092 ub_state_stat_counted(sc, cmd);
1093
1094 } else if (cmd->state == UB_CMDST_CMD) {
1095 switch (urb->status) {
1096 case 0:
1097 break;
1098 case -EOVERFLOW:
1099 goto Bad_End;
1100 case -EPIPE:
1101 rc = ub_submit_clear_stall(sc, cmd, sc->last_pipe);
1102 if (rc != 0) {
1103 printk(KERN_NOTICE "%s: "
1104 "unable to submit clear (%d)\n",
1105 sc->name, rc);
1106
1107
1108
1109
1110 ub_state_done(sc, cmd, rc);
1111 return;
1112 }
1113 cmd->state = UB_CMDST_CLEAR;
1114 return;
1115 case -ESHUTDOWN:
1116 case -EILSEQ:
1117 ub_state_done(sc, cmd, -ENODEV);
1118 return;
1119 default:
1120 goto Bad_End;
1121 }
1122 if (urb->actual_length != US_BULK_CB_WRAP_LEN) {
1123 goto Bad_End;
1124 }
1125
1126 if (cmd->dir == UB_DIR_NONE || cmd->nsg < 1) {
1127 ub_state_stat(sc, cmd);
1128 return;
1129 }
1130
1131
1132 ub_data_start(sc, cmd);
1133
1134 } else if (cmd->state == UB_CMDST_DATA) {
1135 if (urb->status == -EPIPE) {
1136 rc = ub_submit_clear_stall(sc, cmd, sc->last_pipe);
1137 if (rc != 0) {
1138 printk(KERN_NOTICE "%s: "
1139 "unable to submit clear (%d)\n",
1140 sc->name, rc);
1141 ub_state_done(sc, cmd, rc);
1142 return;
1143 }
1144 cmd->state = UB_CMDST_CLR2STS;
1145 return;
1146 }
1147 if (urb->status == -EOVERFLOW) {
1148
1149
1150
1151 cmd->error = -EOVERFLOW;
1152 ub_state_stat(sc, cmd);
1153 return;
1154 }
1155
1156 if (cmd->dir == UB_DIR_WRITE) {
1157
1158
1159
1160
1161
1162
1163
1164
1165 len = urb->actual_length;
1166 if (urb->status != 0 ||
1167 len != cmd->sgv[cmd->current_sg].length) {
1168 cmd->act_len += len;
1169
1170 cmd->error = -EIO;
1171 ub_state_stat(sc, cmd);
1172 return;
1173 }
1174
1175 } else {
1176
1177
1178
1179
1180
1181
1182
1183 if (urb->status != 0)
1184 cmd->error = -EIO;
1185
1186 len = urb->actual_length;
1187 if (urb->status != 0 ||
1188 len != cmd->sgv[cmd->current_sg].length) {
1189 if ((len & 0x1FF) == US_BULK_CS_WRAP_LEN)
1190 goto Bad_End;
1191 }
1192 }
1193
1194 cmd->act_len += urb->actual_length;
1195
1196 if (++cmd->current_sg < cmd->nsg) {
1197 ub_data_start(sc, cmd);
1198 return;
1199 }
1200 ub_state_stat(sc, cmd);
1201
1202 } else if (cmd->state == UB_CMDST_STAT) {
1203 if (urb->status == -EPIPE) {
1204 rc = ub_submit_clear_stall(sc, cmd, sc->last_pipe);
1205 if (rc != 0) {
1206 printk(KERN_NOTICE "%s: "
1207 "unable to submit clear (%d)\n",
1208 sc->name, rc);
1209 ub_state_done(sc, cmd, rc);
1210 return;
1211 }
1212
1213
1214
1215
1216
1217 cmd->error = -EIO;
1218
1219 cmd->state = UB_CMDST_CLRRS;
1220 return;
1221 }
1222
1223
1224 if (urb->status != 0)
1225 goto Bad_End;
1226
1227 if (urb->actual_length == 0) {
1228 ub_state_stat_counted(sc, cmd);
1229 return;
1230 }
1231
1232
1233
1234
1235
1236
1237 bcs = &sc->work_bcs;
1238
1239 if (sc->signature == cpu_to_le32(0)) {
1240
1241
1242
1243
1244
1245 sc->signature = bcs->Signature;
1246 if (sc->signature == cpu_to_le32(0)) {
1247 ub_state_stat_counted(sc, cmd);
1248 return;
1249 }
1250 } else {
1251 if (bcs->Signature != sc->signature) {
1252 ub_state_stat_counted(sc, cmd);
1253 return;
1254 }
1255 }
1256
1257 if (bcs->Tag != cmd->tag) {
1258
1259
1260
1261
1262
1263
1264
1265 ub_state_stat_counted(sc, cmd);
1266 return;
1267 }
1268
1269 if (!sc->bad_resid) {
1270 len = le32_to_cpu(bcs->Residue);
1271 if (len != cmd->len - cmd->act_len) {
1272
1273
1274
1275 if (cmd->len == cmd->act_len) {
1276 printk(KERN_NOTICE "%s: "
1277 "bad residual %d of %d, ignoring\n",
1278 sc->name, len, cmd->len);
1279 sc->bad_resid = 1;
1280 }
1281 }
1282 }
1283
1284 switch (bcs->Status) {
1285 case US_BULK_STAT_OK:
1286 break;
1287 case US_BULK_STAT_FAIL:
1288 ub_state_sense(sc, cmd);
1289 return;
1290 case US_BULK_STAT_PHASE:
1291 goto Bad_End;
1292 default:
1293 printk(KERN_INFO "%s: unknown CSW status 0x%x\n",
1294 sc->name, bcs->Status);
1295 ub_state_done(sc, cmd, -EINVAL);
1296 return;
1297 }
1298
1299
1300 if (cmd->error != 0) {
1301 ub_state_sense(sc, cmd);
1302 return;
1303 }
1304 cmd->state = UB_CMDST_DONE;
1305 ub_cmdq_pop(sc);
1306 (*cmd->done)(sc, cmd);
1307
1308 } else if (cmd->state == UB_CMDST_SENSE) {
1309 ub_state_done(sc, cmd, -EIO);
1310
1311 } else {
1312 printk(KERN_WARNING "%s: wrong command state %d\n",
1313 sc->name, cmd->state);
1314 ub_state_done(sc, cmd, -EINVAL);
1315 return;
1316 }
1317 return;
1318
1319Bad_End:
1320 ub_state_done(sc, cmd, -EIO);
1321}
1322
1323
1324
1325
1326
1327static void ub_data_start(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
1328{
1329 struct scatterlist *sg = &cmd->sgv[cmd->current_sg];
1330 int pipe;
1331 int rc;
1332
1333 UB_INIT_COMPLETION(sc->work_done);
1334
1335 if (cmd->dir == UB_DIR_READ)
1336 pipe = sc->recv_bulk_pipe;
1337 else
1338 pipe = sc->send_bulk_pipe;
1339 sc->last_pipe = pipe;
1340 usb_fill_bulk_urb(&sc->work_urb, sc->dev, pipe, sg_virt(sg),
1341 sg->length, ub_urb_complete, sc);
1342
1343 if ((rc = usb_submit_urb(&sc->work_urb, GFP_ATOMIC)) != 0) {
1344
1345 ub_complete(&sc->work_done);
1346 ub_state_done(sc, cmd, rc);
1347 return;
1348 }
1349
1350 if (cmd->timeo)
1351 sc->work_timer.expires = jiffies + cmd->timeo;
1352 else
1353 sc->work_timer.expires = jiffies + UB_DATA_TIMEOUT;
1354 add_timer(&sc->work_timer);
1355
1356 cmd->state = UB_CMDST_DATA;
1357}
1358
1359
1360
1361
1362
1363static void ub_state_done(struct ub_dev *sc, struct ub_scsi_cmd *cmd, int rc)
1364{
1365
1366 cmd->error = rc;
1367 cmd->state = UB_CMDST_DONE;
1368 ub_cmdq_pop(sc);
1369 (*cmd->done)(sc, cmd);
1370}
1371
1372
1373
1374
1375
1376static int __ub_state_stat(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
1377{
1378 int rc;
1379
1380 UB_INIT_COMPLETION(sc->work_done);
1381
1382 sc->last_pipe = sc->recv_bulk_pipe;
1383 usb_fill_bulk_urb(&sc->work_urb, sc->dev, sc->recv_bulk_pipe,
1384 &sc->work_bcs, US_BULK_CS_WRAP_LEN, ub_urb_complete, sc);
1385
1386 if ((rc = usb_submit_urb(&sc->work_urb, GFP_ATOMIC)) != 0) {
1387
1388 ub_complete(&sc->work_done);
1389 ub_state_done(sc, cmd, rc);
1390 return -1;
1391 }
1392
1393 if (cmd->timeo)
1394 sc->work_timer.expires = jiffies + cmd->timeo;
1395 else
1396 sc->work_timer.expires = jiffies + UB_STAT_TIMEOUT;
1397 add_timer(&sc->work_timer);
1398 return 0;
1399}
1400
1401
1402
1403
1404
1405static void ub_state_stat(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
1406{
1407
1408 if (__ub_state_stat(sc, cmd) != 0)
1409 return;
1410
1411 cmd->stat_count = 0;
1412 cmd->state = UB_CMDST_STAT;
1413}
1414
1415
1416
1417
1418
1419static void ub_state_stat_counted(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
1420{
1421
1422 if (++cmd->stat_count >= 4) {
1423 ub_state_sense(sc, cmd);
1424 return;
1425 }
1426
1427 if (__ub_state_stat(sc, cmd) != 0)
1428 return;
1429
1430 cmd->state = UB_CMDST_STAT;
1431}
1432
1433
1434
1435
1436
1437static void ub_state_sense(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
1438{
1439 struct ub_scsi_cmd *scmd;
1440 struct scatterlist *sg;
1441 int rc;
1442
1443 if (cmd->cdb[0] == REQUEST_SENSE) {
1444 rc = -EPIPE;
1445 goto error;
1446 }
1447
1448 scmd = &sc->top_rqs_cmd;
1449 memset(scmd, 0, sizeof(struct ub_scsi_cmd));
1450 scmd->cdb[0] = REQUEST_SENSE;
1451 scmd->cdb[4] = UB_SENSE_SIZE;
1452 scmd->cdb_len = 6;
1453 scmd->dir = UB_DIR_READ;
1454 scmd->state = UB_CMDST_INIT;
1455 scmd->nsg = 1;
1456 sg = &scmd->sgv[0];
1457 sg_init_table(sg, UB_MAX_REQ_SG);
1458 sg_set_page(sg, virt_to_page(sc->top_sense), UB_SENSE_SIZE,
1459 (unsigned long)sc->top_sense & (PAGE_SIZE-1));
1460 scmd->len = UB_SENSE_SIZE;
1461 scmd->lun = cmd->lun;
1462 scmd->done = ub_top_sense_done;
1463 scmd->back = cmd;
1464
1465 scmd->tag = sc->tagcnt++;
1466
1467 cmd->state = UB_CMDST_SENSE;
1468
1469 ub_cmdq_insert(sc, scmd);
1470 return;
1471
1472error:
1473 ub_state_done(sc, cmd, rc);
1474}
1475
1476
1477
1478
1479
1480static int ub_submit_clear_stall(struct ub_dev *sc, struct ub_scsi_cmd *cmd,
1481 int stalled_pipe)
1482{
1483 int endp;
1484 struct usb_ctrlrequest *cr;
1485 int rc;
1486
1487 endp = usb_pipeendpoint(stalled_pipe);
1488 if (usb_pipein (stalled_pipe))
1489 endp |= USB_DIR_IN;
1490
1491 cr = &sc->work_cr;
1492 cr->bRequestType = USB_RECIP_ENDPOINT;
1493 cr->bRequest = USB_REQ_CLEAR_FEATURE;
1494 cr->wValue = cpu_to_le16(USB_ENDPOINT_HALT);
1495 cr->wIndex = cpu_to_le16(endp);
1496 cr->wLength = cpu_to_le16(0);
1497
1498 UB_INIT_COMPLETION(sc->work_done);
1499
1500 usb_fill_control_urb(&sc->work_urb, sc->dev, sc->send_ctrl_pipe,
1501 (unsigned char*) cr, NULL, 0, ub_urb_complete, sc);
1502
1503 if ((rc = usb_submit_urb(&sc->work_urb, GFP_ATOMIC)) != 0) {
1504 ub_complete(&sc->work_done);
1505 return rc;
1506 }
1507
1508 sc->work_timer.expires = jiffies + UB_CTRL_TIMEOUT;
1509 add_timer(&sc->work_timer);
1510 return 0;
1511}
1512
1513
1514
1515static void ub_top_sense_done(struct ub_dev *sc, struct ub_scsi_cmd *scmd)
1516{
1517 unsigned char *sense = sc->top_sense;
1518 struct ub_scsi_cmd *cmd;
1519
1520
1521
1522
1523
1524 if ((cmd = ub_cmdq_peek(sc)) == NULL) {
1525 printk(KERN_WARNING "%s: sense done while idle\n", sc->name);
1526 return;
1527 }
1528 if (cmd != scmd->back) {
1529 printk(KERN_WARNING "%s: "
1530 "sense done for wrong command 0x%x\n",
1531 sc->name, cmd->tag);
1532 return;
1533 }
1534 if (cmd->state != UB_CMDST_SENSE) {
1535 printk(KERN_WARNING "%s: sense done with bad cmd state %d\n",
1536 sc->name, cmd->state);
1537 return;
1538 }
1539
1540
1541
1542
1543 cmd->key = sense[2] & 0x0F;
1544 cmd->asc = sense[12];
1545 cmd->ascq = sense[13];
1546
1547 ub_scsi_urb_compl(sc, cmd);
1548}
1549
1550
1551
1552
1553
1554
1555
1556static void ub_reset_enter(struct ub_dev *sc, int try)
1557{
1558
1559 if (sc->reset) {
1560
1561 return;
1562 }
1563 sc->reset = try + 1;
1564
1565#if 0
1566 unsigned long flags;
1567 spin_lock_irqsave(&ub_lock, flags);
1568 sc->openc++;
1569 spin_unlock_irqrestore(&ub_lock, flags);
1570#endif
1571
1572#if 0
1573 struct ub_lun *lun;
1574 list_for_each_entry(lun, &sc->luns, link) {
1575 blk_stop_queue(lun->disk->queue);
1576 }
1577#endif
1578
1579 schedule_work(&sc->reset_work);
1580}
1581
1582static void ub_reset_task(struct work_struct *work)
1583{
1584 struct ub_dev *sc = container_of(work, struct ub_dev, reset_work);
1585 unsigned long flags;
1586 struct ub_lun *lun;
1587 int lkr, rc;
1588
1589 if (!sc->reset) {
1590 printk(KERN_WARNING "%s: Running reset unrequested\n",
1591 sc->name);
1592 return;
1593 }
1594
1595 if (atomic_read(&sc->poison)) {
1596 ;
1597 } else if ((sc->reset & 1) == 0) {
1598 ub_sync_reset(sc);
1599 msleep(700);
1600 ub_probe_clear_stall(sc, sc->recv_bulk_pipe);
1601 ub_probe_clear_stall(sc, sc->send_bulk_pipe);
1602 } else if (sc->dev->actconfig->desc.bNumInterfaces != 1) {
1603 ;
1604 } else {
1605 if ((lkr = usb_lock_device_for_reset(sc->dev, sc->intf)) < 0) {
1606 printk(KERN_NOTICE
1607 "%s: usb_lock_device_for_reset failed (%d)\n",
1608 sc->name, lkr);
1609 } else {
1610 rc = usb_reset_device(sc->dev);
1611 if (rc < 0) {
1612 printk(KERN_NOTICE "%s: "
1613 "usb_lock_device_for_reset failed (%d)\n",
1614 sc->name, rc);
1615 }
1616
1617 if (lkr)
1618 usb_unlock_device(sc->dev);
1619 }
1620 }
1621
1622
1623
1624
1625
1626
1627
1628 spin_lock_irqsave(sc->lock, flags);
1629 sc->reset = 0;
1630 tasklet_schedule(&sc->tasklet);
1631 list_for_each_entry(lun, &sc->luns, link) {
1632 blk_start_queue(lun->disk->queue);
1633 }
1634 wake_up(&sc->reset_wait);
1635 spin_unlock_irqrestore(sc->lock, flags);
1636}
1637
1638
1639
1640
1641static void ub_revalidate(struct ub_dev *sc, struct ub_lun *lun)
1642{
1643
1644 lun->readonly = 0;
1645
1646 lun->capacity.nsec = 0;
1647 lun->capacity.bsize = 512;
1648 lun->capacity.bshift = 0;
1649
1650 if (ub_sync_tur(sc, lun) != 0)
1651 return;
1652 lun->changed = 0;
1653
1654 if (ub_sync_read_cap(sc, lun, &lun->capacity) != 0) {
1655
1656
1657
1658
1659
1660 if (ub_sync_read_cap(sc, lun, &lun->capacity) != 0) {
1661 lun->capacity.nsec = 0;
1662 lun->capacity.bsize = 512;
1663 lun->capacity.bshift = 0;
1664 }
1665 }
1666}
1667
1668
1669
1670
1671
1672
1673static int ub_bd_open(struct inode *inode, struct file *filp)
1674{
1675 struct gendisk *disk = inode->i_bdev->bd_disk;
1676 struct ub_lun *lun = disk->private_data;
1677 struct ub_dev *sc = lun->udev;
1678 unsigned long flags;
1679 int rc;
1680
1681 spin_lock_irqsave(&ub_lock, flags);
1682 if (atomic_read(&sc->poison)) {
1683 spin_unlock_irqrestore(&ub_lock, flags);
1684 return -ENXIO;
1685 }
1686 sc->openc++;
1687 spin_unlock_irqrestore(&ub_lock, flags);
1688
1689 if (lun->removable || lun->readonly)
1690 check_disk_change(inode->i_bdev);
1691
1692
1693
1694
1695
1696
1697 if (lun->removable && lun->changed && !(filp->f_flags & O_NDELAY)) {
1698 rc = -ENOMEDIUM;
1699 goto err_open;
1700 }
1701
1702 if (lun->readonly && (filp->f_mode & FMODE_WRITE)) {
1703 rc = -EROFS;
1704 goto err_open;
1705 }
1706
1707 return 0;
1708
1709err_open:
1710 ub_put(sc);
1711 return rc;
1712}
1713
1714
1715
1716static int ub_bd_release(struct inode *inode, struct file *filp)
1717{
1718 struct gendisk *disk = inode->i_bdev->bd_disk;
1719 struct ub_lun *lun = disk->private_data;
1720 struct ub_dev *sc = lun->udev;
1721
1722 ub_put(sc);
1723 return 0;
1724}
1725
1726
1727
1728
1729static int ub_bd_ioctl(struct inode *inode, struct file *filp,
1730 unsigned int cmd, unsigned long arg)
1731{
1732 void __user *usermem = (void __user *) arg;
1733
1734 return scsi_cmd_blk_ioctl(filp, inode->i_bdev, cmd, usermem);
1735}
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747static int ub_bd_revalidate(struct gendisk *disk)
1748{
1749 struct ub_lun *lun = disk->private_data;
1750
1751 ub_revalidate(lun->udev, lun);
1752
1753
1754 blk_queue_hardsect_size(disk->queue, lun->capacity.bsize);
1755 set_capacity(disk, lun->capacity.nsec);
1756
1757
1758 return 0;
1759}
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770static int ub_bd_media_changed(struct gendisk *disk)
1771{
1772 struct ub_lun *lun = disk->private_data;
1773
1774 if (!lun->removable)
1775 return 0;
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786 if (ub_sync_tur(lun->udev, lun) != 0) {
1787 lun->changed = 1;
1788 return 1;
1789 }
1790
1791 return lun->changed;
1792}
1793
1794static struct block_device_operations ub_bd_fops = {
1795 .owner = THIS_MODULE,
1796 .open = ub_bd_open,
1797 .release = ub_bd_release,
1798 .ioctl = ub_bd_ioctl,
1799 .media_changed = ub_bd_media_changed,
1800 .revalidate_disk = ub_bd_revalidate,
1801};
1802
1803
1804
1805
1806static void ub_probe_done(struct ub_dev *sc, struct ub_scsi_cmd *cmd)
1807{
1808 struct completion *cop = cmd->back;
1809 complete(cop);
1810}
1811
1812
1813
1814
1815static int ub_sync_tur(struct ub_dev *sc, struct ub_lun *lun)
1816{
1817 struct ub_scsi_cmd *cmd;
1818 enum { ALLOC_SIZE = sizeof(struct ub_scsi_cmd) };
1819 unsigned long flags;
1820 struct completion compl;
1821 int rc;
1822
1823 init_completion(&compl);
1824
1825 rc = -ENOMEM;
1826 if ((cmd = kzalloc(ALLOC_SIZE, GFP_KERNEL)) == NULL)
1827 goto err_alloc;
1828
1829 cmd->cdb[0] = TEST_UNIT_READY;
1830 cmd->cdb_len = 6;
1831 cmd->dir = UB_DIR_NONE;
1832 cmd->state = UB_CMDST_INIT;
1833 cmd->lun = lun;
1834 cmd->done = ub_probe_done;
1835 cmd->back = &compl;
1836
1837 spin_lock_irqsave(sc->lock, flags);
1838 cmd->tag = sc->tagcnt++;
1839
1840 rc = ub_submit_scsi(sc, cmd);
1841 spin_unlock_irqrestore(sc->lock, flags);
1842
1843 if (rc != 0)
1844 goto err_submit;
1845
1846 wait_for_completion(&compl);
1847
1848 rc = cmd->error;
1849
1850 if (rc == -EIO && cmd->key != 0)
1851 rc = cmd->key;
1852
1853err_submit:
1854 kfree(cmd);
1855err_alloc:
1856 return rc;
1857}
1858
1859
1860
1861
1862static int ub_sync_read_cap(struct ub_dev *sc, struct ub_lun *lun,
1863 struct ub_capacity *ret)
1864{
1865 struct ub_scsi_cmd *cmd;
1866 struct scatterlist *sg;
1867 char *p;
1868 enum { ALLOC_SIZE = sizeof(struct ub_scsi_cmd) + 8 };
1869 unsigned long flags;
1870 unsigned int bsize, shift;
1871 unsigned long nsec;
1872 struct completion compl;
1873 int rc;
1874
1875 init_completion(&compl);
1876
1877 rc = -ENOMEM;
1878 if ((cmd = kzalloc(ALLOC_SIZE, GFP_KERNEL)) == NULL)
1879 goto err_alloc;
1880 p = (char *)cmd + sizeof(struct ub_scsi_cmd);
1881
1882 cmd->cdb[0] = 0x25;
1883 cmd->cdb_len = 10;
1884 cmd->dir = UB_DIR_READ;
1885 cmd->state = UB_CMDST_INIT;
1886 cmd->nsg = 1;
1887 sg = &cmd->sgv[0];
1888 sg_init_table(sg, UB_MAX_REQ_SG);
1889 sg_set_page(sg, virt_to_page(p), 8, (unsigned long)p & (PAGE_SIZE-1));
1890 cmd->len = 8;
1891 cmd->lun = lun;
1892 cmd->done = ub_probe_done;
1893 cmd->back = &compl;
1894
1895 spin_lock_irqsave(sc->lock, flags);
1896 cmd->tag = sc->tagcnt++;
1897
1898 rc = ub_submit_scsi(sc, cmd);
1899 spin_unlock_irqrestore(sc->lock, flags);
1900
1901 if (rc != 0)
1902 goto err_submit;
1903
1904 wait_for_completion(&compl);
1905
1906 if (cmd->error != 0) {
1907 rc = -EIO;
1908 goto err_read;
1909 }
1910 if (cmd->act_len != 8) {
1911 rc = -EIO;
1912 goto err_read;
1913 }
1914
1915
1916 nsec = be32_to_cpu(*(__be32 *)p) + 1;
1917 bsize = be32_to_cpu(*(__be32 *)(p + 4));
1918 switch (bsize) {
1919 case 512: shift = 0; break;
1920 case 1024: shift = 1; break;
1921 case 2048: shift = 2; break;
1922 case 4096: shift = 3; break;
1923 default:
1924 rc = -EDOM;
1925 goto err_inv_bsize;
1926 }
1927
1928 ret->bsize = bsize;
1929 ret->bshift = shift;
1930 ret->nsec = nsec << shift;
1931 rc = 0;
1932
1933err_inv_bsize:
1934err_read:
1935err_submit:
1936 kfree(cmd);
1937err_alloc:
1938 return rc;
1939}
1940
1941
1942
1943static void ub_probe_urb_complete(struct urb *urb)
1944{
1945 struct completion *cop = urb->context;
1946 complete(cop);
1947}
1948
1949static void ub_probe_timeout(unsigned long arg)
1950{
1951 struct completion *cop = (struct completion *) arg;
1952 complete(cop);
1953}
1954
1955
1956
1957
1958static int ub_sync_reset(struct ub_dev *sc)
1959{
1960 int ifnum = sc->intf->cur_altsetting->desc.bInterfaceNumber;
1961 struct usb_ctrlrequest *cr;
1962 struct completion compl;
1963 struct timer_list timer;
1964 int rc;
1965
1966 init_completion(&compl);
1967
1968 cr = &sc->work_cr;
1969 cr->bRequestType = USB_TYPE_CLASS | USB_RECIP_INTERFACE;
1970 cr->bRequest = US_BULK_RESET_REQUEST;
1971 cr->wValue = cpu_to_le16(0);
1972 cr->wIndex = cpu_to_le16(ifnum);
1973 cr->wLength = cpu_to_le16(0);
1974
1975 usb_fill_control_urb(&sc->work_urb, sc->dev, sc->send_ctrl_pipe,
1976 (unsigned char*) cr, NULL, 0, ub_probe_urb_complete, &compl);
1977
1978 if ((rc = usb_submit_urb(&sc->work_urb, GFP_KERNEL)) != 0) {
1979 printk(KERN_WARNING
1980 "%s: Unable to submit a bulk reset (%d)\n", sc->name, rc);
1981 return rc;
1982 }
1983
1984 init_timer(&timer);
1985 timer.function = ub_probe_timeout;
1986 timer.data = (unsigned long) &compl;
1987 timer.expires = jiffies + UB_CTRL_TIMEOUT;
1988 add_timer(&timer);
1989
1990 wait_for_completion(&compl);
1991
1992 del_timer_sync(&timer);
1993 usb_kill_urb(&sc->work_urb);
1994
1995 return sc->work_urb.status;
1996}
1997
1998
1999
2000
2001static int ub_sync_getmaxlun(struct ub_dev *sc)
2002{
2003 int ifnum = sc->intf->cur_altsetting->desc.bInterfaceNumber;
2004 unsigned char *p;
2005 enum { ALLOC_SIZE = 1 };
2006 struct usb_ctrlrequest *cr;
2007 struct completion compl;
2008 struct timer_list timer;
2009 int nluns;
2010 int rc;
2011
2012 init_completion(&compl);
2013
2014 rc = -ENOMEM;
2015 if ((p = kmalloc(ALLOC_SIZE, GFP_KERNEL)) == NULL)
2016 goto err_alloc;
2017 *p = 55;
2018
2019 cr = &sc->work_cr;
2020 cr->bRequestType = USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE;
2021 cr->bRequest = US_BULK_GET_MAX_LUN;
2022 cr->wValue = cpu_to_le16(0);
2023 cr->wIndex = cpu_to_le16(ifnum);
2024 cr->wLength = cpu_to_le16(1);
2025
2026 usb_fill_control_urb(&sc->work_urb, sc->dev, sc->recv_ctrl_pipe,
2027 (unsigned char*) cr, p, 1, ub_probe_urb_complete, &compl);
2028
2029 if ((rc = usb_submit_urb(&sc->work_urb, GFP_KERNEL)) != 0)
2030 goto err_submit;
2031
2032 init_timer(&timer);
2033 timer.function = ub_probe_timeout;
2034 timer.data = (unsigned long) &compl;
2035 timer.expires = jiffies + UB_CTRL_TIMEOUT;
2036 add_timer(&timer);
2037
2038 wait_for_completion(&compl);
2039
2040 del_timer_sync(&timer);
2041 usb_kill_urb(&sc->work_urb);
2042
2043 if ((rc = sc->work_urb.status) < 0)
2044 goto err_io;
2045
2046 if (sc->work_urb.actual_length != 1) {
2047 nluns = 0;
2048 } else {
2049 if ((nluns = *p) == 55) {
2050 nluns = 0;
2051 } else {
2052
2053 nluns += 1;
2054 if (nluns > UB_MAX_LUNS)
2055 nluns = UB_MAX_LUNS;
2056 }
2057 }
2058
2059 kfree(p);
2060 return nluns;
2061
2062err_io:
2063err_submit:
2064 kfree(p);
2065err_alloc:
2066 return rc;
2067}
2068
2069
2070
2071
2072static int ub_probe_clear_stall(struct ub_dev *sc, int stalled_pipe)
2073{
2074 int endp;
2075 struct usb_ctrlrequest *cr;
2076 struct completion compl;
2077 struct timer_list timer;
2078 int rc;
2079
2080 init_completion(&compl);
2081
2082 endp = usb_pipeendpoint(stalled_pipe);
2083 if (usb_pipein (stalled_pipe))
2084 endp |= USB_DIR_IN;
2085
2086 cr = &sc->work_cr;
2087 cr->bRequestType = USB_RECIP_ENDPOINT;
2088 cr->bRequest = USB_REQ_CLEAR_FEATURE;
2089 cr->wValue = cpu_to_le16(USB_ENDPOINT_HALT);
2090 cr->wIndex = cpu_to_le16(endp);
2091 cr->wLength = cpu_to_le16(0);
2092
2093 usb_fill_control_urb(&sc->work_urb, sc->dev, sc->send_ctrl_pipe,
2094 (unsigned char*) cr, NULL, 0, ub_probe_urb_complete, &compl);
2095
2096 if ((rc = usb_submit_urb(&sc->work_urb, GFP_KERNEL)) != 0) {
2097 printk(KERN_WARNING
2098 "%s: Unable to submit a probe clear (%d)\n", sc->name, rc);
2099 return rc;
2100 }
2101
2102 init_timer(&timer);
2103 timer.function = ub_probe_timeout;
2104 timer.data = (unsigned long) &compl;
2105 timer.expires = jiffies + UB_CTRL_TIMEOUT;
2106 add_timer(&timer);
2107
2108 wait_for_completion(&compl);
2109
2110 del_timer_sync(&timer);
2111 usb_kill_urb(&sc->work_urb);
2112
2113
2114 usb_settoggle(sc->dev, endp, usb_pipeout(sc->last_pipe), 0);
2115
2116 return 0;
2117}
2118
2119
2120
2121
2122static int ub_get_pipes(struct ub_dev *sc, struct usb_device *dev,
2123 struct usb_interface *intf)
2124{
2125 struct usb_host_interface *altsetting = intf->cur_altsetting;
2126 struct usb_endpoint_descriptor *ep_in = NULL;
2127 struct usb_endpoint_descriptor *ep_out = NULL;
2128 struct usb_endpoint_descriptor *ep;
2129 int i;
2130
2131
2132
2133
2134
2135
2136 for (i = 0; i < altsetting->desc.bNumEndpoints; i++) {
2137 ep = &altsetting->endpoint[i].desc;
2138
2139
2140 if ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
2141 == USB_ENDPOINT_XFER_BULK) {
2142
2143 if (ep->bEndpointAddress & USB_DIR_IN) {
2144 if (ep_in == NULL)
2145 ep_in = ep;
2146 } else {
2147 if (ep_out == NULL)
2148 ep_out = ep;
2149 }
2150 }
2151 }
2152
2153 if (ep_in == NULL || ep_out == NULL) {
2154 printk(KERN_NOTICE "%s: failed endpoint check\n", sc->name);
2155 return -ENODEV;
2156 }
2157
2158
2159 sc->send_ctrl_pipe = usb_sndctrlpipe(dev, 0);
2160 sc->recv_ctrl_pipe = usb_rcvctrlpipe(dev, 0);
2161 sc->send_bulk_pipe = usb_sndbulkpipe(dev,
2162 ep_out->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
2163 sc->recv_bulk_pipe = usb_rcvbulkpipe(dev,
2164 ep_in->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);
2165
2166 return 0;
2167}
2168
2169
2170
2171
2172
2173static int ub_probe(struct usb_interface *intf,
2174 const struct usb_device_id *dev_id)
2175{
2176 struct ub_dev *sc;
2177 int nluns;
2178 int rc;
2179 int i;
2180
2181 if (usb_usual_check_type(dev_id, USB_US_TYPE_UB))
2182 return -ENXIO;
2183
2184 rc = -ENOMEM;
2185 if ((sc = kzalloc(sizeof(struct ub_dev), GFP_KERNEL)) == NULL)
2186 goto err_core;
2187 sc->lock = ub_next_lock();
2188 INIT_LIST_HEAD(&sc->luns);
2189 usb_init_urb(&sc->work_urb);
2190 tasklet_init(&sc->tasklet, ub_scsi_action, (unsigned long)sc);
2191 atomic_set(&sc->poison, 0);
2192 INIT_WORK(&sc->reset_work, ub_reset_task);
2193 init_waitqueue_head(&sc->reset_wait);
2194
2195 init_timer(&sc->work_timer);
2196 sc->work_timer.data = (unsigned long) sc;
2197 sc->work_timer.function = ub_urb_timeout;
2198
2199 ub_init_completion(&sc->work_done);
2200 sc->work_done.done = 1;
2201
2202 sc->dev = interface_to_usbdev(intf);
2203 sc->intf = intf;
2204
2205 usb_set_intfdata(intf, sc);
2206 usb_get_dev(sc->dev);
2207
2208
2209
2210
2211
2212 usb_get_intf(sc->intf);
2213
2214 snprintf(sc->name, 12, DRV_NAME "(%d.%d)",
2215 sc->dev->bus->busnum, sc->dev->devnum);
2216
2217
2218
2219 if (ub_get_pipes(sc, sc->dev, intf) != 0)
2220 goto err_dev_desc;
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233#if 0
2234 ub_probe_clear_stall(sc, sc->recv_bulk_pipe);
2235 ub_probe_clear_stall(sc, sc->send_bulk_pipe);
2236#endif
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253 for (i = 0; i < 3; i++) {
2254 if ((rc = ub_sync_tur(sc, NULL)) <= 0) break;
2255 if (rc != 0x6) break;
2256 msleep(10);
2257 }
2258
2259 nluns = 1;
2260 for (i = 0; i < 3; i++) {
2261 if ((rc = ub_sync_getmaxlun(sc)) < 0)
2262 break;
2263 if (rc != 0) {
2264 nluns = rc;
2265 break;
2266 }
2267 msleep(100);
2268 }
2269
2270 for (i = 0; i < nluns; i++) {
2271 ub_probe_lun(sc, i);
2272 }
2273 return 0;
2274
2275err_dev_desc:
2276 usb_set_intfdata(intf, NULL);
2277 usb_put_intf(sc->intf);
2278 usb_put_dev(sc->dev);
2279 kfree(sc);
2280err_core:
2281 return rc;
2282}
2283
2284static int ub_probe_lun(struct ub_dev *sc, int lnum)
2285{
2286 struct ub_lun *lun;
2287 struct request_queue *q;
2288 struct gendisk *disk;
2289 int rc;
2290
2291 rc = -ENOMEM;
2292 if ((lun = kzalloc(sizeof(struct ub_lun), GFP_KERNEL)) == NULL)
2293 goto err_alloc;
2294 lun->num = lnum;
2295
2296 rc = -ENOSR;
2297 if ((lun->id = ub_id_get()) == -1)
2298 goto err_id;
2299
2300 lun->udev = sc;
2301
2302 snprintf(lun->name, 16, DRV_NAME "%c(%d.%d.%d)",
2303 lun->id + 'a', sc->dev->bus->busnum, sc->dev->devnum, lun->num);
2304
2305 lun->removable = 1;
2306 lun->changed = 1;
2307 ub_revalidate(sc, lun);
2308
2309 rc = -ENOMEM;
2310 if ((disk = alloc_disk(UB_PARTS_PER_LUN)) == NULL)
2311 goto err_diskalloc;
2312
2313 sprintf(disk->disk_name, DRV_NAME "%c", lun->id + 'a');
2314 disk->major = UB_MAJOR;
2315 disk->first_minor = lun->id * UB_PARTS_PER_LUN;
2316 disk->fops = &ub_bd_fops;
2317 disk->private_data = lun;
2318 disk->driverfs_dev = &sc->intf->dev;
2319
2320 rc = -ENOMEM;
2321 if ((q = blk_init_queue(ub_request_fn, sc->lock)) == NULL)
2322 goto err_blkqinit;
2323
2324 disk->queue = q;
2325
2326 blk_queue_bounce_limit(q, BLK_BOUNCE_HIGH);
2327 blk_queue_max_hw_segments(q, UB_MAX_REQ_SG);
2328 blk_queue_max_phys_segments(q, UB_MAX_REQ_SG);
2329 blk_queue_segment_boundary(q, 0xffffffff);
2330 blk_queue_max_sectors(q, UB_MAX_SECTORS);
2331 blk_queue_hardsect_size(q, lun->capacity.bsize);
2332
2333 lun->disk = disk;
2334 q->queuedata = lun;
2335 list_add(&lun->link, &sc->luns);
2336
2337 set_capacity(disk, lun->capacity.nsec);
2338 if (lun->removable)
2339 disk->flags |= GENHD_FL_REMOVABLE;
2340
2341 add_disk(disk);
2342
2343 return 0;
2344
2345err_blkqinit:
2346 put_disk(disk);
2347err_diskalloc:
2348 ub_id_put(lun->id);
2349err_id:
2350 kfree(lun);
2351err_alloc:
2352 return rc;
2353}
2354
2355static void ub_disconnect(struct usb_interface *intf)
2356{
2357 struct ub_dev *sc = usb_get_intfdata(intf);
2358 struct ub_lun *lun;
2359 unsigned long flags;
2360
2361
2362
2363
2364
2365
2366 spin_lock_irqsave(&ub_lock, flags);
2367 sc->openc++;
2368 spin_unlock_irqrestore(&ub_lock, flags);
2369
2370
2371
2372
2373
2374
2375 atomic_set(&sc->poison, 1);
2376
2377
2378
2379
2380 wait_event(sc->reset_wait, !sc->reset);
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391 spin_lock_irqsave(sc->lock, flags);
2392 {
2393 struct ub_scsi_cmd *cmd;
2394 int cnt = 0;
2395 while ((cmd = ub_cmdq_peek(sc)) != NULL) {
2396 cmd->error = -ENOTCONN;
2397 cmd->state = UB_CMDST_DONE;
2398 ub_cmdq_pop(sc);
2399 (*cmd->done)(sc, cmd);
2400 cnt++;
2401 }
2402 if (cnt != 0) {
2403 printk(KERN_WARNING "%s: "
2404 "%d was queued after shutdown\n", sc->name, cnt);
2405 }
2406 }
2407 spin_unlock_irqrestore(sc->lock, flags);
2408
2409
2410
2411
2412 list_for_each_entry(lun, &sc->luns, link) {
2413 del_gendisk(lun->disk);
2414
2415
2416
2417
2418
2419
2420 }
2421
2422
2423
2424
2425
2426 spin_lock_irqsave(sc->lock, flags);
2427 if (sc->work_urb.status == -EINPROGRESS) {
2428 printk(KERN_WARNING "%s: "
2429 "URB is active after disconnect\n", sc->name);
2430 }
2431 spin_unlock_irqrestore(sc->lock, flags);
2432
2433
2434
2435
2436
2437
2438 del_timer_sync(&sc->work_timer);
2439
2440
2441
2442
2443
2444
2445 ub_put(sc);
2446}
2447
2448static struct usb_driver ub_driver = {
2449 .name = "ub",
2450 .probe = ub_probe,
2451 .disconnect = ub_disconnect,
2452 .id_table = ub_usb_ids,
2453};
2454
2455static int __init ub_init(void)
2456{
2457 int rc;
2458 int i;
2459
2460 for (i = 0; i < UB_QLOCK_NUM; i++)
2461 spin_lock_init(&ub_qlockv[i]);
2462
2463 if ((rc = register_blkdev(UB_MAJOR, DRV_NAME)) != 0)
2464 goto err_regblkdev;
2465
2466 if ((rc = usb_register(&ub_driver)) != 0)
2467 goto err_register;
2468
2469 usb_usual_set_present(USB_US_TYPE_UB);
2470 return 0;
2471
2472err_register:
2473 unregister_blkdev(UB_MAJOR, DRV_NAME);
2474err_regblkdev:
2475 return rc;
2476}
2477
2478static void __exit ub_exit(void)
2479{
2480 usb_deregister(&ub_driver);
2481
2482 unregister_blkdev(UB_MAJOR, DRV_NAME);
2483 usb_usual_clear_present(USB_US_TYPE_UB);
2484}
2485
2486module_init(ub_init);
2487module_exit(ub_exit);
2488
2489MODULE_LICENSE("GPL");
2490