• Home
  • Raw
  • Download

Lines Matching refs:sc

356 static void ub_cleanup(struct ub_dev *sc);
358 static void ub_cmd_build_block(struct ub_dev *sc, struct ub_lun *lun,
360 static void ub_cmd_build_packet(struct ub_dev *sc, struct ub_lun *lun,
362 static void ub_rw_cmd_done(struct ub_dev *sc, struct ub_scsi_cmd *cmd);
365 static int ub_rw_cmd_retry(struct ub_dev *sc, struct ub_lun *lun,
367 static int ub_submit_scsi(struct ub_dev *sc, struct ub_scsi_cmd *cmd);
370 static void ub_scsi_dispatch(struct ub_dev *sc);
371 static void ub_scsi_urb_compl(struct ub_dev *sc, struct ub_scsi_cmd *cmd);
372 static void ub_data_start(struct ub_dev *sc, struct ub_scsi_cmd *cmd);
373 static void ub_state_done(struct ub_dev *sc, struct ub_scsi_cmd *cmd, int rc);
374 static int __ub_state_stat(struct ub_dev *sc, struct ub_scsi_cmd *cmd);
375 static void ub_state_stat(struct ub_dev *sc, struct ub_scsi_cmd *cmd);
376 static void ub_state_stat_counted(struct ub_dev *sc, struct ub_scsi_cmd *cmd);
377 static void ub_state_sense(struct ub_dev *sc, struct ub_scsi_cmd *cmd);
378 static int ub_submit_clear_stall(struct ub_dev *sc, struct ub_scsi_cmd *cmd,
380 static void ub_top_sense_done(struct ub_dev *sc, struct ub_scsi_cmd *scmd);
381 static void ub_reset_enter(struct ub_dev *sc, int try);
383 static int ub_sync_tur(struct ub_dev *sc, struct ub_lun *lun);
384 static int ub_sync_read_cap(struct ub_dev *sc, struct ub_lun *lun,
386 static int ub_sync_reset(struct ub_dev *sc);
387 static int ub_probe_clear_stall(struct ub_dev *sc, int stalled_pipe);
388 static int ub_probe_lun(struct ub_dev *sc, int lnum);
488 static void ub_put(struct ub_dev *sc) in ub_put() argument
493 --sc->openc; in ub_put()
494 if (sc->openc == 0 && atomic_read(&sc->poison)) { in ub_put()
496 ub_cleanup(sc); in ub_put()
505 static void ub_cleanup(struct ub_dev *sc) in ub_cleanup() argument
511 while (!list_empty(&sc->luns)) { in ub_cleanup()
512 p = sc->luns.next; in ub_cleanup()
535 usb_set_intfdata(sc->intf, NULL); in ub_cleanup()
536 usb_put_intf(sc->intf); in ub_cleanup()
537 usb_put_dev(sc->dev); in ub_cleanup()
538 kfree(sc); in ub_cleanup()
572 static void ub_cmdq_add(struct ub_dev *sc, struct ub_scsi_cmd *cmd) in ub_cmdq_add() argument
574 struct ub_scsi_cmd_queue *t = &sc->cmd_queue; in ub_cmdq_add()
588 static void ub_cmdq_insert(struct ub_dev *sc, struct ub_scsi_cmd *cmd) in ub_cmdq_insert() argument
590 struct ub_scsi_cmd_queue *t = &sc->cmd_queue; in ub_cmdq_insert()
604 static struct ub_scsi_cmd *ub_cmdq_pop(struct ub_dev *sc) in ub_cmdq_pop() argument
606 struct ub_scsi_cmd_queue *t = &sc->cmd_queue; in ub_cmdq_pop()
619 #define ub_cmdq_peek(sc) ((sc)->cmd_queue.head) argument
640 struct ub_dev *sc = lun->udev; in ub_request_fn_1() local
645 if (atomic_read(&sc->poison)) { in ub_request_fn_1()
688 ub_cmd_build_packet(sc, lun, cmd, urq); in ub_request_fn_1()
690 ub_cmd_build_block(sc, lun, cmd, urq); in ub_request_fn_1()
697 cmd->tag = sc->tagcnt++; in ub_request_fn_1()
698 if (ub_submit_scsi(sc, cmd) != 0) in ub_request_fn_1()
709 static void ub_cmd_build_block(struct ub_dev *sc, struct ub_lun *lun, in ub_cmd_build_block() argument
745 static void ub_cmd_build_packet(struct ub_dev *sc, struct ub_lun *lun, in ub_cmd_build_packet() argument
774 static void ub_rw_cmd_done(struct ub_dev *sc, struct ub_scsi_cmd *cmd) in ub_rw_cmd_done() argument
801 memcpy(rq->sense, sc->top_sense, UB_SENSE_SIZE); in ub_rw_cmd_done()
803 if (sc->top_sense[0] != 0) in ub_rw_cmd_done()
812 if (ub_rw_cmd_retry(sc, lun, urq, cmd) == 0) in ub_rw_cmd_done()
847 static int ub_rw_cmd_retry(struct ub_dev *sc, struct ub_lun *lun, in ub_rw_cmd_retry() argument
851 if (atomic_read(&sc->poison)) in ub_rw_cmd_retry()
854 ub_reset_enter(sc, urq->current_try); in ub_rw_cmd_retry()
863 sc->name, UB_DIR_CHAR(cmd->dir), cmd->len, cmd->act_len, in ub_rw_cmd_retry()
867 ub_cmd_build_block(sc, lun, cmd, urq); in ub_rw_cmd_retry()
874 cmd->tag = sc->tagcnt++; in ub_rw_cmd_retry()
877 return ub_submit_scsi(sc, cmd); in ub_rw_cmd_retry()
879 ub_cmdq_add(sc, cmd); in ub_rw_cmd_retry()
893 static int ub_submit_scsi(struct ub_dev *sc, struct ub_scsi_cmd *cmd) in ub_submit_scsi() argument
901 ub_cmdq_add(sc, cmd); in ub_submit_scsi()
906 tasklet_schedule(&sc->tasklet); in ub_submit_scsi()
914 static int ub_scsi_cmd_start(struct ub_dev *sc, struct ub_scsi_cmd *cmd) in ub_scsi_cmd_start() argument
919 bcb = &sc->work_bcb; in ub_scsi_cmd_start()
930 memset(&sc->top_sense, 0, UB_SENSE_SIZE); in ub_scsi_cmd_start()
943 UB_INIT_COMPLETION(sc->work_done); in ub_scsi_cmd_start()
945 sc->last_pipe = sc->send_bulk_pipe; in ub_scsi_cmd_start()
946 usb_fill_bulk_urb(&sc->work_urb, sc->dev, sc->send_bulk_pipe, in ub_scsi_cmd_start()
947 bcb, US_BULK_CB_WRAP_LEN, ub_urb_complete, sc); in ub_scsi_cmd_start()
949 if ((rc = usb_submit_urb(&sc->work_urb, GFP_ATOMIC)) != 0) { in ub_scsi_cmd_start()
951 ub_complete(&sc->work_done); in ub_scsi_cmd_start()
955 sc->work_timer.expires = jiffies + UB_URB_TIMEOUT; in ub_scsi_cmd_start()
956 add_timer(&sc->work_timer); in ub_scsi_cmd_start()
967 struct ub_dev *sc = (struct ub_dev *) arg; in ub_urb_timeout() local
970 spin_lock_irqsave(sc->lock, flags); in ub_urb_timeout()
971 if (!ub_is_completed(&sc->work_done)) in ub_urb_timeout()
972 usb_unlink_urb(&sc->work_urb); in ub_urb_timeout()
973 spin_unlock_irqrestore(sc->lock, flags); in ub_urb_timeout()
985 struct ub_dev *sc = urb->context; in ub_urb_complete() local
987 ub_complete(&sc->work_done); in ub_urb_complete()
988 tasklet_schedule(&sc->tasklet); in ub_urb_complete()
993 struct ub_dev *sc = (struct ub_dev *) _dev; in ub_scsi_action() local
996 spin_lock_irqsave(sc->lock, flags); in ub_scsi_action()
997 ub_scsi_dispatch(sc); in ub_scsi_action()
998 spin_unlock_irqrestore(sc->lock, flags); in ub_scsi_action()
1001 static void ub_scsi_dispatch(struct ub_dev *sc) in ub_scsi_dispatch() argument
1006 while (!sc->reset && (cmd = ub_cmdq_peek(sc)) != NULL) { in ub_scsi_dispatch()
1008 ub_cmdq_pop(sc); in ub_scsi_dispatch()
1009 (*cmd->done)(sc, cmd); in ub_scsi_dispatch()
1011 if ((rc = ub_scsi_cmd_start(sc, cmd)) == 0) in ub_scsi_dispatch()
1016 if (!ub_is_completed(&sc->work_done)) in ub_scsi_dispatch()
1018 del_timer(&sc->work_timer); in ub_scsi_dispatch()
1019 ub_scsi_urb_compl(sc, cmd); in ub_scsi_dispatch()
1024 static void ub_scsi_urb_compl(struct ub_dev *sc, struct ub_scsi_cmd *cmd) in ub_scsi_urb_compl() argument
1026 struct urb *urb = &sc->work_urb; in ub_scsi_urb_compl()
1031 if (atomic_read(&sc->poison)) { in ub_scsi_urb_compl()
1032 ub_state_done(sc, cmd, -ENODEV); in ub_scsi_urb_compl()
1043 sc->name); in ub_scsi_urb_compl()
1052 usb_settoggle(sc->dev, usb_pipeendpoint(sc->last_pipe), in ub_scsi_urb_compl()
1053 usb_pipeout(sc->last_pipe), 0); in ub_scsi_urb_compl()
1055 ub_state_sense(sc, cmd); in ub_scsi_urb_compl()
1060 sc->name); in ub_scsi_urb_compl()
1069 usb_settoggle(sc->dev, usb_pipeendpoint(sc->last_pipe), in ub_scsi_urb_compl()
1070 usb_pipeout(sc->last_pipe), 0); in ub_scsi_urb_compl()
1072 ub_state_stat(sc, cmd); in ub_scsi_urb_compl()
1077 sc->name); in ub_scsi_urb_compl()
1086 usb_settoggle(sc->dev, usb_pipeendpoint(sc->last_pipe), in ub_scsi_urb_compl()
1087 usb_pipeout(sc->last_pipe), 0); in ub_scsi_urb_compl()
1089 ub_state_stat_counted(sc, cmd); in ub_scsi_urb_compl()
1098 rc = ub_submit_clear_stall(sc, cmd, sc->last_pipe); in ub_scsi_urb_compl()
1102 sc->name, rc); in ub_scsi_urb_compl()
1107 ub_state_done(sc, cmd, rc); in ub_scsi_urb_compl()
1114 ub_state_done(sc, cmd, -ENODEV); in ub_scsi_urb_compl()
1124 ub_state_stat(sc, cmd); in ub_scsi_urb_compl()
1129 ub_data_start(sc, cmd); in ub_scsi_urb_compl()
1133 rc = ub_submit_clear_stall(sc, cmd, sc->last_pipe); in ub_scsi_urb_compl()
1137 sc->name, rc); in ub_scsi_urb_compl()
1138 ub_state_done(sc, cmd, rc); in ub_scsi_urb_compl()
1149 ub_state_stat(sc, cmd); in ub_scsi_urb_compl()
1168 ub_state_stat(sc, cmd); in ub_scsi_urb_compl()
1194 ub_data_start(sc, cmd); in ub_scsi_urb_compl()
1197 ub_state_stat(sc, cmd); in ub_scsi_urb_compl()
1201 rc = ub_submit_clear_stall(sc, cmd, sc->last_pipe); in ub_scsi_urb_compl()
1205 sc->name, rc); in ub_scsi_urb_compl()
1206 ub_state_done(sc, cmd, rc); in ub_scsi_urb_compl()
1225 ub_state_stat_counted(sc, cmd); in ub_scsi_urb_compl()
1234 bcs = &sc->work_bcs; in ub_scsi_urb_compl()
1236 if (sc->signature == cpu_to_le32(0)) { in ub_scsi_urb_compl()
1242 sc->signature = bcs->Signature; in ub_scsi_urb_compl()
1243 if (sc->signature == cpu_to_le32(0)) { in ub_scsi_urb_compl()
1244 ub_state_stat_counted(sc, cmd); in ub_scsi_urb_compl()
1248 if (bcs->Signature != sc->signature) { in ub_scsi_urb_compl()
1249 ub_state_stat_counted(sc, cmd); in ub_scsi_urb_compl()
1262 ub_state_stat_counted(sc, cmd); in ub_scsi_urb_compl()
1266 if (!sc->bad_resid) { in ub_scsi_urb_compl()
1275 sc->name, len, cmd->len); in ub_scsi_urb_compl()
1276 sc->bad_resid = 1; in ub_scsi_urb_compl()
1285 ub_state_sense(sc, cmd); in ub_scsi_urb_compl()
1291 sc->name, bcs->Status); in ub_scsi_urb_compl()
1292 ub_state_done(sc, cmd, -EINVAL); in ub_scsi_urb_compl()
1298 ub_state_sense(sc, cmd); in ub_scsi_urb_compl()
1302 ub_cmdq_pop(sc); in ub_scsi_urb_compl()
1303 (*cmd->done)(sc, cmd); in ub_scsi_urb_compl()
1306 ub_state_done(sc, cmd, -EIO); in ub_scsi_urb_compl()
1310 sc->name, cmd->state); in ub_scsi_urb_compl()
1311 ub_state_done(sc, cmd, -EINVAL); in ub_scsi_urb_compl()
1317 ub_state_done(sc, cmd, -EIO); in ub_scsi_urb_compl()
1324 static void ub_data_start(struct ub_dev *sc, struct ub_scsi_cmd *cmd) in ub_data_start() argument
1330 UB_INIT_COMPLETION(sc->work_done); in ub_data_start()
1333 pipe = sc->recv_bulk_pipe; in ub_data_start()
1335 pipe = sc->send_bulk_pipe; in ub_data_start()
1336 sc->last_pipe = pipe; in ub_data_start()
1337 usb_fill_bulk_urb(&sc->work_urb, sc->dev, pipe, sg_virt(sg), in ub_data_start()
1338 sg->length, ub_urb_complete, sc); in ub_data_start()
1340 if ((rc = usb_submit_urb(&sc->work_urb, GFP_ATOMIC)) != 0) { in ub_data_start()
1342 ub_complete(&sc->work_done); in ub_data_start()
1343 ub_state_done(sc, cmd, rc); in ub_data_start()
1348 sc->work_timer.expires = jiffies + cmd->timeo; in ub_data_start()
1350 sc->work_timer.expires = jiffies + UB_DATA_TIMEOUT; in ub_data_start()
1351 add_timer(&sc->work_timer); in ub_data_start()
1360 static void ub_state_done(struct ub_dev *sc, struct ub_scsi_cmd *cmd, int rc) in ub_state_done() argument
1365 ub_cmdq_pop(sc); in ub_state_done()
1366 (*cmd->done)(sc, cmd); in ub_state_done()
1373 static int __ub_state_stat(struct ub_dev *sc, struct ub_scsi_cmd *cmd) in __ub_state_stat() argument
1377 UB_INIT_COMPLETION(sc->work_done); in __ub_state_stat()
1379 sc->last_pipe = sc->recv_bulk_pipe; in __ub_state_stat()
1380 usb_fill_bulk_urb(&sc->work_urb, sc->dev, sc->recv_bulk_pipe, in __ub_state_stat()
1381 &sc->work_bcs, US_BULK_CS_WRAP_LEN, ub_urb_complete, sc); in __ub_state_stat()
1383 if ((rc = usb_submit_urb(&sc->work_urb, GFP_ATOMIC)) != 0) { in __ub_state_stat()
1385 ub_complete(&sc->work_done); in __ub_state_stat()
1386 ub_state_done(sc, cmd, rc); in __ub_state_stat()
1391 sc->work_timer.expires = jiffies + cmd->timeo; in __ub_state_stat()
1393 sc->work_timer.expires = jiffies + UB_STAT_TIMEOUT; in __ub_state_stat()
1394 add_timer(&sc->work_timer); in __ub_state_stat()
1402 static void ub_state_stat(struct ub_dev *sc, struct ub_scsi_cmd *cmd) in ub_state_stat() argument
1405 if (__ub_state_stat(sc, cmd) != 0) in ub_state_stat()
1416 static void ub_state_stat_counted(struct ub_dev *sc, struct ub_scsi_cmd *cmd) in ub_state_stat_counted() argument
1420 ub_state_sense(sc, cmd); in ub_state_stat_counted()
1424 if (__ub_state_stat(sc, cmd) != 0) in ub_state_stat_counted()
1434 static void ub_state_sense(struct ub_dev *sc, struct ub_scsi_cmd *cmd) in ub_state_sense() argument
1445 scmd = &sc->top_rqs_cmd; in ub_state_sense()
1455 sg_set_page(sg, virt_to_page(sc->top_sense), UB_SENSE_SIZE, in ub_state_sense()
1456 (unsigned long)sc->top_sense & (PAGE_SIZE-1)); in ub_state_sense()
1462 scmd->tag = sc->tagcnt++; in ub_state_sense()
1466 ub_cmdq_insert(sc, scmd); in ub_state_sense()
1470 ub_state_done(sc, cmd, rc); in ub_state_sense()
1477 static int ub_submit_clear_stall(struct ub_dev *sc, struct ub_scsi_cmd *cmd, in ub_submit_clear_stall() argument
1488 cr = &sc->work_cr; in ub_submit_clear_stall()
1495 UB_INIT_COMPLETION(sc->work_done); in ub_submit_clear_stall()
1497 usb_fill_control_urb(&sc->work_urb, sc->dev, sc->send_ctrl_pipe, in ub_submit_clear_stall()
1498 (unsigned char*) cr, NULL, 0, ub_urb_complete, sc); in ub_submit_clear_stall()
1500 if ((rc = usb_submit_urb(&sc->work_urb, GFP_ATOMIC)) != 0) { in ub_submit_clear_stall()
1501 ub_complete(&sc->work_done); in ub_submit_clear_stall()
1505 sc->work_timer.expires = jiffies + UB_CTRL_TIMEOUT; in ub_submit_clear_stall()
1506 add_timer(&sc->work_timer); in ub_submit_clear_stall()
1512 static void ub_top_sense_done(struct ub_dev *sc, struct ub_scsi_cmd *scmd) in ub_top_sense_done() argument
1514 unsigned char *sense = sc->top_sense; in ub_top_sense_done()
1521 if ((cmd = ub_cmdq_peek(sc)) == NULL) { in ub_top_sense_done()
1522 printk(KERN_WARNING "%s: sense done while idle\n", sc->name); in ub_top_sense_done()
1528 sc->name, cmd->tag); in ub_top_sense_done()
1533 sc->name, cmd->state); in ub_top_sense_done()
1544 ub_scsi_urb_compl(sc, cmd); in ub_top_sense_done()
1551 static void ub_reset_enter(struct ub_dev *sc, int try) in ub_reset_enter() argument
1554 if (sc->reset) { in ub_reset_enter()
1558 sc->reset = try + 1; in ub_reset_enter()
1563 sc->openc++; in ub_reset_enter()
1569 list_for_each_entry(lun, &sc->luns, link) { in ub_reset_enter()
1574 schedule_work(&sc->reset_work); in ub_reset_enter()
1579 struct ub_dev *sc = container_of(work, struct ub_dev, reset_work); in ub_reset_task() local
1584 if (!sc->reset) { in ub_reset_task()
1586 sc->name); in ub_reset_task()
1590 if (atomic_read(&sc->poison)) { in ub_reset_task()
1592 } else if ((sc->reset & 1) == 0) { in ub_reset_task()
1593 ub_sync_reset(sc); in ub_reset_task()
1595 ub_probe_clear_stall(sc, sc->recv_bulk_pipe); in ub_reset_task()
1596 ub_probe_clear_stall(sc, sc->send_bulk_pipe); in ub_reset_task()
1597 } else if (sc->dev->actconfig->desc.bNumInterfaces != 1) { in ub_reset_task()
1600 rc = usb_lock_device_for_reset(sc->dev, sc->intf); in ub_reset_task()
1604 sc->name, rc); in ub_reset_task()
1606 rc = usb_reset_device(sc->dev); in ub_reset_task()
1610 sc->name, rc); in ub_reset_task()
1612 usb_unlock_device(sc->dev); in ub_reset_task()
1622 spin_lock_irqsave(sc->lock, flags); in ub_reset_task()
1623 sc->reset = 0; in ub_reset_task()
1624 tasklet_schedule(&sc->tasklet); in ub_reset_task()
1625 list_for_each_entry(lun, &sc->luns, link) { in ub_reset_task()
1628 wake_up(&sc->reset_wait); in ub_reset_task()
1629 spin_unlock_irqrestore(sc->lock, flags); in ub_reset_task()
1651 static void ub_revalidate(struct ub_dev *sc, struct ub_lun *lun) in ub_revalidate() argument
1660 if (ub_sync_tur(sc, lun) != 0) in ub_revalidate()
1664 if (ub_sync_read_cap(sc, lun, &lun->capacity) != 0) { in ub_revalidate()
1670 if (ub_sync_read_cap(sc, lun, &lun->capacity) != 0) { in ub_revalidate()
1686 struct ub_dev *sc = lun->udev; in ub_bd_open() local
1691 if (atomic_read(&sc->poison)) { in ub_bd_open()
1695 sc->openc++; in ub_bd_open()
1719 ub_put(sc); in ub_bd_open()
1728 struct ub_dev *sc = lun->udev; in ub_bd_release() local
1730 ub_put(sc); in ub_bd_release()
1815 static void ub_probe_done(struct ub_dev *sc, struct ub_scsi_cmd *cmd) in ub_probe_done() argument
1824 static int ub_sync_tur(struct ub_dev *sc, struct ub_lun *lun) in ub_sync_tur() argument
1846 spin_lock_irqsave(sc->lock, flags); in ub_sync_tur()
1847 cmd->tag = sc->tagcnt++; in ub_sync_tur()
1849 rc = ub_submit_scsi(sc, cmd); in ub_sync_tur()
1850 spin_unlock_irqrestore(sc->lock, flags); in ub_sync_tur()
1871 static int ub_sync_read_cap(struct ub_dev *sc, struct ub_lun *lun, in ub_sync_read_cap() argument
1904 spin_lock_irqsave(sc->lock, flags); in ub_sync_read_cap()
1905 cmd->tag = sc->tagcnt++; in ub_sync_read_cap()
1907 rc = ub_submit_scsi(sc, cmd); in ub_sync_read_cap()
1908 spin_unlock_irqrestore(sc->lock, flags); in ub_sync_read_cap()
1967 static int ub_sync_reset(struct ub_dev *sc) in ub_sync_reset() argument
1969 int ifnum = sc->intf->cur_altsetting->desc.bInterfaceNumber; in ub_sync_reset()
1977 cr = &sc->work_cr; in ub_sync_reset()
1984 usb_fill_control_urb(&sc->work_urb, sc->dev, sc->send_ctrl_pipe, in ub_sync_reset()
1987 if ((rc = usb_submit_urb(&sc->work_urb, GFP_KERNEL)) != 0) { in ub_sync_reset()
1989 "%s: Unable to submit a bulk reset (%d)\n", sc->name, rc); in ub_sync_reset()
2002 usb_kill_urb(&sc->work_urb); in ub_sync_reset()
2004 return sc->work_urb.status; in ub_sync_reset()
2010 static int ub_sync_getmaxlun(struct ub_dev *sc) in ub_sync_getmaxlun() argument
2012 int ifnum = sc->intf->cur_altsetting->desc.bInterfaceNumber; in ub_sync_getmaxlun()
2028 cr = &sc->work_cr; in ub_sync_getmaxlun()
2035 usb_fill_control_urb(&sc->work_urb, sc->dev, sc->recv_ctrl_pipe, in ub_sync_getmaxlun()
2038 if ((rc = usb_submit_urb(&sc->work_urb, GFP_KERNEL)) != 0) in ub_sync_getmaxlun()
2050 usb_kill_urb(&sc->work_urb); in ub_sync_getmaxlun()
2052 if ((rc = sc->work_urb.status) < 0) in ub_sync_getmaxlun()
2055 if (sc->work_urb.actual_length != 1) { in ub_sync_getmaxlun()
2081 static int ub_probe_clear_stall(struct ub_dev *sc, int stalled_pipe) in ub_probe_clear_stall() argument
2095 cr = &sc->work_cr; in ub_probe_clear_stall()
2102 usb_fill_control_urb(&sc->work_urb, sc->dev, sc->send_ctrl_pipe, in ub_probe_clear_stall()
2105 if ((rc = usb_submit_urb(&sc->work_urb, GFP_KERNEL)) != 0) { in ub_probe_clear_stall()
2107 "%s: Unable to submit a probe clear (%d)\n", sc->name, rc); in ub_probe_clear_stall()
2120 usb_kill_urb(&sc->work_urb); in ub_probe_clear_stall()
2123 usb_settoggle(sc->dev, endp, usb_pipeout(sc->last_pipe), 0); in ub_probe_clear_stall()
2131 static int ub_get_pipes(struct ub_dev *sc, struct usb_device *dev, in ub_get_pipes() argument
2163 printk(KERN_NOTICE "%s: failed endpoint check\n", sc->name); in ub_get_pipes()
2168 sc->send_ctrl_pipe = usb_sndctrlpipe(dev, 0); in ub_get_pipes()
2169 sc->recv_ctrl_pipe = usb_rcvctrlpipe(dev, 0); in ub_get_pipes()
2170 sc->send_bulk_pipe = usb_sndbulkpipe(dev, in ub_get_pipes()
2172 sc->recv_bulk_pipe = usb_rcvbulkpipe(dev, in ub_get_pipes()
2185 struct ub_dev *sc; in ub_probe() local
2194 if ((sc = kzalloc(sizeof(struct ub_dev), GFP_KERNEL)) == NULL) in ub_probe()
2196 sc->lock = ub_next_lock(); in ub_probe()
2197 INIT_LIST_HEAD(&sc->luns); in ub_probe()
2198 usb_init_urb(&sc->work_urb); in ub_probe()
2199 tasklet_init(&sc->tasklet, ub_scsi_action, (unsigned long)sc); in ub_probe()
2200 atomic_set(&sc->poison, 0); in ub_probe()
2201 INIT_WORK(&sc->reset_work, ub_reset_task); in ub_probe()
2202 init_waitqueue_head(&sc->reset_wait); in ub_probe()
2204 init_timer(&sc->work_timer); in ub_probe()
2205 sc->work_timer.data = (unsigned long) sc; in ub_probe()
2206 sc->work_timer.function = ub_urb_timeout; in ub_probe()
2208 ub_init_completion(&sc->work_done); in ub_probe()
2209 sc->work_done.done = 1; /* A little yuk, but oh well... */ in ub_probe()
2211 sc->dev = interface_to_usbdev(intf); in ub_probe()
2212 sc->intf = intf; in ub_probe()
2214 usb_set_intfdata(intf, sc); in ub_probe()
2215 usb_get_dev(sc->dev); in ub_probe()
2221 usb_get_intf(sc->intf); in ub_probe()
2223 snprintf(sc->name, 12, DRV_NAME "(%d.%d)", in ub_probe()
2224 sc->dev->bus->busnum, sc->dev->devnum); in ub_probe()
2228 if (ub_get_pipes(sc, sc->dev, intf) != 0) in ub_probe()
2243 ub_probe_clear_stall(sc, sc->recv_bulk_pipe); in ub_probe()
2244 ub_probe_clear_stall(sc, sc->send_bulk_pipe); in ub_probe()
2263 if ((rc = ub_sync_tur(sc, NULL)) <= 0) break; in ub_probe()
2270 if ((rc = ub_sync_getmaxlun(sc)) < 0) in ub_probe()
2280 ub_probe_lun(sc, i); in ub_probe()
2286 usb_put_intf(sc->intf); in ub_probe()
2287 usb_put_dev(sc->dev); in ub_probe()
2288 kfree(sc); in ub_probe()
2293 static int ub_probe_lun(struct ub_dev *sc, int lnum) in ub_probe_lun() argument
2309 lun->udev = sc; in ub_probe_lun()
2312 lun->id + 'a', sc->dev->bus->busnum, sc->dev->devnum, lun->num); in ub_probe_lun()
2316 ub_revalidate(sc, lun); in ub_probe_lun()
2327 disk->driverfs_dev = &sc->intf->dev; in ub_probe_lun()
2330 if ((q = blk_init_queue(ub_request_fn, sc->lock)) == NULL) in ub_probe_lun()
2344 list_add(&lun->link, &sc->luns); in ub_probe_lun()
2366 struct ub_dev *sc = usb_get_intfdata(intf); in ub_disconnect() local
2376 sc->openc++; in ub_disconnect()
2384 atomic_set(&sc->poison, 1); in ub_disconnect()
2389 wait_event(sc->reset_wait, !sc->reset); in ub_disconnect()
2400 spin_lock_irqsave(sc->lock, flags); in ub_disconnect()
2404 while ((cmd = ub_cmdq_peek(sc)) != NULL) { in ub_disconnect()
2407 ub_cmdq_pop(sc); in ub_disconnect()
2408 (*cmd->done)(sc, cmd); in ub_disconnect()
2413 "%d was queued after shutdown\n", sc->name, cnt); in ub_disconnect()
2416 spin_unlock_irqrestore(sc->lock, flags); in ub_disconnect()
2421 list_for_each_entry(lun, &sc->luns, link) { in ub_disconnect()
2435 spin_lock_irqsave(sc->lock, flags); in ub_disconnect()
2436 if (sc->work_urb.status == -EINPROGRESS) { /* janitors: ignore */ in ub_disconnect()
2438 "URB is active after disconnect\n", sc->name); in ub_disconnect()
2440 spin_unlock_irqrestore(sc->lock, flags); in ub_disconnect()
2447 del_timer_sync(&sc->work_timer); in ub_disconnect()
2454 ub_put(sc); in ub_disconnect()