usb.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:34k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* Driver for USB Mass Storage compliant devices
  2.  *
  3.  * $Id: usb.c,v 1.73 2002/01/27 09:02:15 mdharm Exp $
  4.  *
  5.  * Current development and maintenance by:
  6.  *   (c) 1999-2002 Matthew Dharm (mdharm-usb@one-eyed-alien.net)
  7.  *
  8.  * Developed with the assistance of:
  9.  *   (c) 2000 David L. Brown, Jr. (usb-storage@davidb.org)
  10.  *
  11.  * Initial work by:
  12.  *   (c) 1999 Michael Gee (michael@linuxspecific.com)
  13.  *
  14.  * usb_device_id support by Adam J. Richter (adam@yggdrasil.com):
  15.  *   (c) 2000 Yggdrasil Computing, Inc.
  16.  *
  17.  * This driver is based on the 'USB Mass Storage Class' document. This
  18.  * describes in detail the protocol used to communicate with such
  19.  * devices.  Clearly, the designers had SCSI and ATAPI commands in
  20.  * mind when they created this document.  The commands are all very
  21.  * similar to commands in the SCSI-II and ATAPI specifications.
  22.  *
  23.  * It is important to note that in a number of cases this class
  24.  * exhibits class-specific exemptions from the USB specification.
  25.  * Notably the usage of NAK, STALL and ACK differs from the norm, in
  26.  * that they are used to communicate wait, failed and OK on commands.
  27.  *
  28.  * Also, for certain devices, the interrupt endpoint is used to convey
  29.  * status of a command.
  30.  *
  31.  * Please see http://www.one-eyed-alien.net/~mdharm/linux-usb for more
  32.  * information about this driver.
  33.  *
  34.  * This program is free software; you can redistribute it and/or modify it
  35.  * under the terms of the GNU General Public License as published by the
  36.  * Free Software Foundation; either version 2, or (at your option) any
  37.  * later version.
  38.  *
  39.  * This program is distributed in the hope that it will be useful, but
  40.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  41.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  42.  * General Public License for more details.
  43.  *
  44.  * You should have received a copy of the GNU General Public License along
  45.  * with this program; if not, write to the Free Software Foundation, Inc.,
  46.  * 675 Mass Ave, Cambridge, MA 02139, USA.
  47.  */
  48. #include <linux/config.h>
  49. #include "usb.h"
  50. #include "scsiglue.h"
  51. #include "transport.h"
  52. #include "protocol.h"
  53. #include "debug.h"
  54. #include "initializers.h"
  55. #ifdef CONFIG_USB_STORAGE_HP8200e
  56. #include "shuttle_usbat.h"
  57. #endif
  58. #ifdef CONFIG_USB_STORAGE_SDDR09
  59. #include "sddr09.h"
  60. #endif
  61. #ifdef CONFIG_USB_STORAGE_SDDR55
  62. #include "sddr55.h"
  63. #endif
  64. #ifdef CONFIG_USB_STORAGE_DPCM
  65. #include "dpcm.h"
  66. #endif
  67. #ifdef CONFIG_USB_STORAGE_FREECOM
  68. #include "freecom.h"
  69. #endif
  70. #ifdef CONFIG_USB_STORAGE_ISD200
  71. #include "isd200.h"
  72. #endif
  73. #ifdef CONFIG_USB_STORAGE_DATAFAB
  74. #include "datafab.h"
  75. #endif
  76. #ifdef CONFIG_USB_STORAGE_JUMPSHOT
  77. #include "jumpshot.h"
  78. #endif
  79. #include <linux/module.h>
  80. #include <linux/sched.h>
  81. #include <linux/errno.h>
  82. #include <linux/init.h>
  83. #include <linux/slab.h>
  84. /* Some informational data */
  85. MODULE_AUTHOR("Matthew Dharm <mdharm-usb@one-eyed-alien.net>");
  86. MODULE_DESCRIPTION("USB Mass Storage driver for Linux");
  87. MODULE_LICENSE("GPL");
  88. /*
  89.  * Per device data
  90.  */
  91. static int my_host_number;
  92. /*
  93.  * kernel thread actions
  94.  */
  95. #define US_ACT_COMMAND 1
  96. #define US_ACT_DEVICE_RESET 2
  97. #define US_ACT_BUS_RESET 3
  98. #define US_ACT_HOST_RESET 4
  99. #define US_ACT_EXIT 5
  100. /* The list of structures and the protective lock for them */
  101. struct us_data *us_list;
  102. struct semaphore us_list_semaphore;
  103. static void * storage_probe(struct usb_device *dev, unsigned int ifnum,
  104.     const struct usb_device_id *id);
  105. static void storage_disconnect(struct usb_device *dev, void *ptr);
  106. /* The entries in this table, except for final ones here
  107.  * (USB_MASS_STORAGE_CLASS and the empty entry), correspond,
  108.  * line for line with the entries of us_unsuaul_dev_list[].
  109.  * For now, we duplicate idVendor and idProduct in us_unsual_dev_list,
  110.  * just to avoid alignment bugs.
  111.  */
  112. #define UNUSUAL_DEV(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, 
  113.     vendorName, productName,useProtocol, useTransport, 
  114.     initFunction, flags) 
  115. { USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin,bcdDeviceMax) }
  116. static struct usb_device_id storage_usb_ids [] = {
  117. # include "unusual_devs.h"
  118. #undef UNUSUAL_DEV
  119. /* Control/Bulk transport for all SubClass values */
  120. { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, US_SC_RBC, US_PR_CB) },
  121. { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, US_SC_8020, US_PR_CB) },
  122. { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, US_SC_QIC, US_PR_CB) },
  123. { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, US_SC_UFI, US_PR_CB) },
  124. { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, US_SC_8070, US_PR_CB) },
  125. { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, US_SC_SCSI, US_PR_CB) },
  126. /* Control/Bulk/Interrupt transport for all SubClass values */
  127. { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, US_SC_RBC, US_PR_CBI) },
  128. { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, US_SC_8020, US_PR_CBI) },
  129. { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, US_SC_QIC, US_PR_CBI) },
  130. { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, US_SC_UFI, US_PR_CBI) },
  131. { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, US_SC_8070, US_PR_CBI) },
  132. { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, US_SC_SCSI, US_PR_CBI) },
  133. /* Bulk-only transport for all SubClass values */
  134. { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, US_SC_RBC, US_PR_BULK) },
  135. { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, US_SC_8020, US_PR_BULK) },
  136. { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, US_SC_QIC, US_PR_BULK) },
  137. { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, US_SC_UFI, US_PR_BULK) },
  138. { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, US_SC_8070, US_PR_BULK) },
  139. { USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, US_SC_SCSI, US_PR_BULK) },
  140. /* Terminating entry */
  141. { }
  142. };
  143. MODULE_DEVICE_TABLE (usb, storage_usb_ids);
  144. /* This is the list of devices we recognize, along with their flag data */
  145. /* The vendor name should be kept at eight characters or less, and
  146.  * the product name should be kept at 16 characters or less. If a device
  147.  * has the US_FL_FIX_INQUIRY flag, then the vendor and product names
  148.  * normally generated by a device thorugh the INQUIRY response will be
  149.  * taken from this list, and this is the reason for the above size
  150.  * restriction. However, if the flag is not present, then you
  151.  * are free to use as many characters as you like.
  152.  */
  153. #undef UNUSUAL_DEV
  154. #define UNUSUAL_DEV(idVendor, idProduct, bcdDeviceMin, bcdDeviceMax, 
  155.     vendor_name, product_name, use_protocol, use_transport, 
  156.     init_function, Flags) 
  157. vendorName: vendor_name,
  158. productName: product_name,
  159. useProtocol: use_protocol,
  160. useTransport: use_transport,
  161. initFunction : init_function,
  162. flags: Flags, 
  163. }
  164. static struct us_unusual_dev us_unusual_dev_list[] = {
  165. # include "unusual_devs.h" 
  166. # undef UNUSUAL_DEV
  167. /* Control/Bulk transport for all SubClass values */
  168. { useProtocol: US_SC_RBC,
  169.   useTransport: US_PR_CB},
  170. { useProtocol: US_SC_8020,
  171.   useTransport: US_PR_CB},
  172. { useProtocol: US_SC_QIC,
  173.   useTransport: US_PR_CB},
  174. { useProtocol: US_SC_UFI,
  175.   useTransport: US_PR_CB},
  176. { useProtocol: US_SC_8070,
  177.   useTransport: US_PR_CB},
  178. { useProtocol: US_SC_SCSI,
  179.   useTransport: US_PR_CB},
  180. /* Control/Bulk/Interrupt transport for all SubClass values */
  181. { useProtocol: US_SC_RBC,
  182.   useTransport: US_PR_CBI},
  183. { useProtocol: US_SC_8020,
  184.   useTransport: US_PR_CBI},
  185. { useProtocol: US_SC_QIC,
  186.   useTransport: US_PR_CBI},
  187. { useProtocol: US_SC_UFI,
  188.   useTransport: US_PR_CBI},
  189. { useProtocol: US_SC_8070,
  190.   useTransport: US_PR_CBI},
  191. { useProtocol: US_SC_SCSI,
  192.   useTransport: US_PR_CBI},
  193. /* Bulk-only transport for all SubClass values */
  194. { useProtocol: US_SC_RBC,
  195.   useTransport: US_PR_BULK},
  196. { useProtocol: US_SC_8020,
  197.   useTransport: US_PR_BULK},
  198. { useProtocol: US_SC_QIC,
  199.   useTransport: US_PR_BULK},
  200. { useProtocol: US_SC_UFI,
  201.   useTransport: US_PR_BULK},
  202. { useProtocol: US_SC_8070,
  203.   useTransport: US_PR_BULK},
  204. { useProtocol: US_SC_SCSI,
  205.   useTransport: US_PR_BULK},
  206. /* Terminating entry */
  207. { 0 }
  208. };
  209. struct usb_driver usb_storage_driver = {
  210. name: "usb-storage",
  211. probe: storage_probe,
  212. disconnect: storage_disconnect,
  213. id_table: storage_usb_ids,
  214. };
  215. /*
  216.  * fill_inquiry_response takes an unsigned char array (which must
  217.  * be at least 36 characters) and populates the vendor name,
  218.  * product name, and revision fields. Then the array is copied
  219.  * into the SCSI command's response buffer (oddly enough
  220.  * called request_buffer). data_len contains the length of the
  221.  * data array, which again must be at least 36.
  222.  */
  223. void fill_inquiry_response(struct us_data *us, unsigned char *data,
  224. unsigned int data_len) {
  225. int i;
  226. struct scatterlist *sg;
  227. int len =
  228. us->srb->request_bufflen > data_len ? data_len :
  229. us->srb->request_bufflen;
  230. int transferred;
  231. int amt;
  232. if (data_len<36) // You lose.
  233. return;
  234. if(data[0]&0x20) { /* USB device currently not connected. Return
  235.       peripheral qualifier 001b ("...however, the
  236.       physical device is not currently connected
  237.       to this logical unit") and leave vendor and
  238.       product identification empty. ("If the target
  239.       does store some of the INQUIRY data on the
  240.       device, it may return zeros or ASCII spaces 
  241.       (20h) in those fields until the data is
  242.       available from the device."). */
  243. memset(data+8,0,28);
  244. } else {
  245. memcpy(data+8, us->unusual_dev->vendorName, 
  246. strlen(us->unusual_dev->vendorName) > 8 ? 8 :
  247. strlen(us->unusual_dev->vendorName));
  248. memcpy(data+16, us->unusual_dev->productName, 
  249. strlen(us->unusual_dev->productName) > 16 ? 16 :
  250. strlen(us->unusual_dev->productName));
  251. data[32] = 0x30 + ((us->pusb_dev->descriptor.bcdDevice>>12) & 0x0F);
  252. data[33] = 0x30 + ((us->pusb_dev->descriptor.bcdDevice>>8) & 0x0F);
  253. data[34] = 0x30 + ((us->pusb_dev->descriptor.bcdDevice>>4) & 0x0F);
  254. data[35] = 0x30 + ((us->pusb_dev->descriptor.bcdDevice) & 0x0F);
  255. }
  256. if (us->srb->use_sg) {
  257. sg = (struct scatterlist *)us->srb->request_buffer;
  258. for (i=0; i<us->srb->use_sg; i++)
  259. memset(sg[i].address, 0, sg[i].length);
  260. for (i=0, transferred=0; 
  261. i<us->srb->use_sg && transferred < len;
  262. i++) {
  263. amt = sg[i].length > len-transferred ? 
  264. len-transferred : sg[i].length;
  265. memcpy(sg[i].address, data+transferred, amt);
  266. transferred -= amt;
  267. }
  268. } else {
  269. memset(us->srb->request_buffer, 0, us->srb->request_bufflen);
  270. memcpy(us->srb->request_buffer, data, len);
  271. }
  272. }
  273. static int usb_stor_control_thread(void * __us)
  274. {
  275. struct us_data *us = (struct us_data *)__us;
  276. int action;
  277. lock_kernel();
  278. /*
  279.  * This thread doesn't need any user-level access,
  280.  * so get rid of all our resources..
  281.  */
  282. exit_files(current);
  283. current->files = init_task.files;
  284. atomic_inc(&current->files->count);
  285. daemonize();
  286. reparent_to_init();
  287. /* avoid getting signals */
  288. spin_lock_irq(&current->sigmask_lock);
  289. flush_signals(current);
  290. sigfillset(&current->blocked);
  291. recalc_sigpending(current);
  292. spin_unlock_irq(&current->sigmask_lock);
  293. /* set our name for identification purposes */
  294. sprintf(current->comm, "usb-storage-%d", us->host_number);
  295. unlock_kernel();
  296. /* set up for wakeups by new commands */
  297. init_MUTEX_LOCKED(&us->sema);
  298. /* signal that we've started the thread */
  299. complete(&(us->notify));
  300. set_current_state(TASK_INTERRUPTIBLE);
  301. for(;;) {
  302. US_DEBUGP("*** thread sleeping.n");
  303. if(down_interruptible(&us->sema))
  304. break;
  305. US_DEBUGP("*** thread awakened.n");
  306. /* lock access to the queue element */
  307. down(&(us->queue_exclusion));
  308. /* take the command off the queue */
  309. action = us->action;
  310. us->action = 0;
  311. us->srb = us->queue_srb;
  312. /* release the queue lock as fast as possible */
  313. up(&(us->queue_exclusion));
  314. switch (action) {
  315. case US_ACT_COMMAND:
  316. /* reject the command if the direction indicator 
  317.  * is UNKNOWN
  318.  */
  319. if (us->srb->sc_data_direction == SCSI_DATA_UNKNOWN) {
  320. US_DEBUGP("UNKNOWN data directionn");
  321. us->srb->result = DID_ERROR << 16;
  322. set_current_state(TASK_INTERRUPTIBLE);
  323. us->srb->scsi_done(us->srb);
  324. us->srb = NULL;
  325. break;
  326. }
  327. /* reject if target != 0 or if LUN is higher than
  328.  * the maximum known LUN
  329.  */
  330. if (us->srb->target && 
  331. !(us->flags & US_FL_SCM_MULT_TARG)) {
  332. US_DEBUGP("Bad target number (%d/%d)n",
  333.   us->srb->target, us->srb->lun);
  334. us->srb->result = DID_BAD_TARGET << 16;
  335. set_current_state(TASK_INTERRUPTIBLE);
  336. us->srb->scsi_done(us->srb);
  337. us->srb = NULL;
  338. break;
  339. }
  340. if (us->srb->lun > us->max_lun) {
  341. US_DEBUGP("Bad LUN (%d/%d)n",
  342.   us->srb->target, us->srb->lun);
  343. us->srb->result = DID_BAD_TARGET << 16;
  344. set_current_state(TASK_INTERRUPTIBLE);
  345. us->srb->scsi_done(us->srb);
  346. us->srb = NULL;
  347. break;
  348. }
  349. /* handle those devices which can't do a START_STOP */
  350. if ((us->srb->cmnd[0] == START_STOP) &&
  351.     (us->flags & US_FL_START_STOP)) {
  352. US_DEBUGP("Skipping START_STOP commandn");
  353. us->srb->result = GOOD << 1;
  354. set_current_state(TASK_INTERRUPTIBLE);
  355. us->srb->scsi_done(us->srb);
  356. us->srb = NULL;
  357. break;
  358. }
  359. /* lock the device pointers */
  360. down(&(us->dev_semaphore));
  361. /* our device has gone - pretend not ready */
  362. if (!us->pusb_dev) {
  363. US_DEBUGP("Request is for removed devicen");
  364. /* For REQUEST_SENSE, it's the data.  But
  365.  * for anything else, it should look like
  366.  * we auto-sensed for it.
  367.  */
  368. if (us->srb->cmnd[0] == REQUEST_SENSE) {
  369. memcpy(us->srb->request_buffer, 
  370.        usb_stor_sense_notready, 
  371.        sizeof(usb_stor_sense_notready));
  372. us->srb->result = GOOD << 1;
  373. } else if(us->srb->cmnd[0] == INQUIRY) {
  374. unsigned char data_ptr[36] = {
  375.     0x20, 0x80, 0x02, 0x02,
  376.     0x1F, 0x00, 0x00, 0x00};
  377. US_DEBUGP("Faking INQUIRY command for disconnected devicen");
  378. fill_inquiry_response(us, data_ptr, 36);
  379. us->srb->result = GOOD << 1;
  380. } else {
  381. memcpy(us->srb->sense_buffer, 
  382.        usb_stor_sense_notready, 
  383.        sizeof(usb_stor_sense_notready));
  384. us->srb->result = CHECK_CONDITION << 1;
  385. }
  386. } else { /* !us->pusb_dev */
  387. /* Handle those devices which need us to fake 
  388.  * their inquiry data */
  389. if ((us->srb->cmnd[0] == INQUIRY) &&
  390.     (us->flags & US_FL_FIX_INQUIRY)) {
  391. unsigned char data_ptr[36] = {
  392.     0x00, 0x80, 0x02, 0x02,
  393.     0x1F, 0x00, 0x00, 0x00};
  394. US_DEBUGP("Faking INQUIRY commandn");
  395. fill_inquiry_response(us, data_ptr, 36);
  396. us->srb->result = GOOD << 1;
  397. } else {
  398. /* we've got a command, let's do it! */
  399. US_DEBUG(usb_stor_show_command(us->srb));
  400. us->proto_handler(us->srb, us);
  401. }
  402. }
  403. /* unlock the device pointers */
  404. up(&(us->dev_semaphore));
  405. /* indicate that the command is done */
  406. if (us->srb->result != DID_ABORT << 16) {
  407. US_DEBUGP("scsi cmd done, result=0x%xn", 
  408.    us->srb->result);
  409. set_current_state(TASK_INTERRUPTIBLE);
  410. us->srb->scsi_done(us->srb);
  411. } else {
  412. US_DEBUGP("scsi command abortedn");
  413. set_current_state(TASK_INTERRUPTIBLE);
  414. complete(&(us->notify));
  415. }
  416. us->srb = NULL;
  417. break;
  418. case US_ACT_DEVICE_RESET:
  419. break;
  420. case US_ACT_BUS_RESET:
  421. break;
  422. case US_ACT_HOST_RESET:
  423. break;
  424. } /* end switch on action */
  425. /* exit if we get a signal to exit */
  426. if (action == US_ACT_EXIT) {
  427. US_DEBUGP("-- US_ACT_EXIT command receivedn");
  428. break;
  429. }
  430. } /* for (;;) */
  431. /* clean up after ourselves */
  432. set_current_state(TASK_INTERRUPTIBLE);
  433. /* notify the exit routine that we're actually exiting now */
  434. complete(&(us->notify));
  435. return 0;
  436. }
  437. /* Set up the IRQ pipe and handler
  438.  * Note that this function assumes that all the data in the us_data
  439.  * strucuture is current.  This includes the ep_int field, which gives us
  440.  * the endpoint for the interrupt.
  441.  * Returns non-zero on failure, zero on success
  442.  */ 
  443. static int usb_stor_allocate_irq(struct us_data *ss)
  444. {
  445. unsigned int pipe;
  446. int maxp;
  447. int result;
  448. US_DEBUGP("Allocating IRQ for CBI transportn");
  449. /* lock access to the data structure */
  450. down(&(ss->irq_urb_sem));
  451. /* allocate the URB */
  452. ss->irq_urb = usb_alloc_urb(0);
  453. if (!ss->irq_urb) {
  454. up(&(ss->irq_urb_sem));
  455. US_DEBUGP("couldn't allocate interrupt URB");
  456. return 1;
  457. }
  458. /* calculate the pipe and max packet size */
  459. pipe = usb_rcvintpipe(ss->pusb_dev, ss->ep_int->bEndpointAddress & 
  460.       USB_ENDPOINT_NUMBER_MASK);
  461. maxp = usb_maxpacket(ss->pusb_dev, pipe, usb_pipeout(pipe));
  462. if (maxp > sizeof(ss->irqbuf))
  463. maxp = sizeof(ss->irqbuf);
  464. /* fill in the URB with our data */
  465. FILL_INT_URB(ss->irq_urb, ss->pusb_dev, pipe, ss->irqbuf, maxp, 
  466.      usb_stor_CBI_irq, ss, ss->ep_int->bInterval); 
  467. /* submit the URB for processing */
  468. result = usb_submit_urb(ss->irq_urb);
  469. US_DEBUGP("usb_submit_urb() returns %dn", result);
  470. if (result) {
  471. usb_free_urb(ss->irq_urb);
  472. up(&(ss->irq_urb_sem));
  473. return 2;
  474. }
  475. /* unlock the data structure and return success */
  476. up(&(ss->irq_urb_sem));
  477. return 0;
  478. }
  479. /* Probe to see if a new device is actually a SCSI device */
  480. static void * storage_probe(struct usb_device *dev, unsigned int ifnum,
  481.     const struct usb_device_id *id)
  482. {
  483. int i;
  484. const int id_index = id - storage_usb_ids; 
  485. char mf[USB_STOR_STRING_LEN];      /* manufacturer */
  486. char prod[USB_STOR_STRING_LEN];      /* product */
  487. char serial[USB_STOR_STRING_LEN];      /* serial number */
  488. GUID(guid);    /* Global Unique Identifier */
  489. unsigned int flags;
  490. struct us_unusual_dev *unusual_dev;
  491. struct us_data *ss = NULL;
  492. #ifdef CONFIG_USB_STORAGE_SDDR09
  493. int result;
  494. #endif
  495. /* these are temporary copies -- we test on these, then put them
  496.  * in the us-data structure 
  497.  */
  498. struct usb_endpoint_descriptor *ep_in = NULL;
  499. struct usb_endpoint_descriptor *ep_out = NULL;
  500. struct usb_endpoint_descriptor *ep_int = NULL;
  501. u8 subclass = 0;
  502. u8 protocol = 0;
  503. /* the altsettting on the interface we're probing that matched our
  504.  * usb_match_id table
  505.  */
  506. struct usb_interface *intf = dev->actconfig->interface;
  507. struct usb_interface_descriptor *altsetting =
  508. intf[ifnum].altsetting + intf[ifnum].act_altsetting;
  509. US_DEBUGP("act_altsettting is %dn", intf[ifnum].act_altsetting);
  510. /* clear the temporary strings */
  511. memset(mf, 0, sizeof(mf));
  512. memset(prod, 0, sizeof(prod));
  513. memset(serial, 0, sizeof(serial));
  514. /* 
  515.  * Can we support this device, either because we know about it
  516.  * from our unusual device list, or because it advertises that it's
  517.  * compliant to the specification?
  518.  *
  519.  * id_index is calculated in the declaration to be the index number
  520.  * of the match from the usb_device_id table, so we can find the
  521.  * corresponding entry in the private table.
  522.  */
  523. US_DEBUGP("id_index calculated to be: %dn", id_index);
  524. US_DEBUGP("Array length appears to be: %dn", sizeof(us_unusual_dev_list) / sizeof(us_unusual_dev_list[0]));
  525. if (id_index <
  526.     sizeof(us_unusual_dev_list) / sizeof(us_unusual_dev_list[0])) {
  527. unusual_dev = &us_unusual_dev_list[id_index];
  528. if (unusual_dev->vendorName)
  529. US_DEBUGP("Vendor: %sn", unusual_dev->vendorName);
  530. if (unusual_dev->productName)
  531. US_DEBUGP("Product: %sn", unusual_dev->productName);
  532. } else
  533. /* no, we can't support it */
  534. return NULL;
  535. /* At this point, we know we've got a live one */
  536. US_DEBUGP("USB Mass Storage device detectedn");
  537. /* Determine subclass and protocol, or copy from the interface */
  538. subclass = unusual_dev->useProtocol;
  539. protocol = unusual_dev->useTransport;
  540. flags = unusual_dev->flags;
  541. /*
  542.  * Find the endpoints we need
  543.  * We are expecting a minimum of 2 endpoints - in and out (bulk).
  544.  * An optional interrupt is OK (necessary for CBI protocol).
  545.  * We will ignore any others.
  546.  */
  547. for (i = 0; i < altsetting->bNumEndpoints; i++) {
  548. /* is it an BULK endpoint? */
  549. if ((altsetting->endpoint[i].bmAttributes & 
  550.      USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_BULK) {
  551. /* BULK in or out? */
  552. if (altsetting->endpoint[i].bEndpointAddress & 
  553.     USB_DIR_IN)
  554. ep_in = &altsetting->endpoint[i];
  555. else
  556. ep_out = &altsetting->endpoint[i];
  557. }
  558. /* is it an interrupt endpoint? */
  559. if ((altsetting->endpoint[i].bmAttributes & 
  560.      USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT) {
  561. ep_int = &altsetting->endpoint[i];
  562. }
  563. }
  564. US_DEBUGP("Endpoints: In: 0x%p Out: 0x%p Int: 0x%p (Period %d)n",
  565.   ep_in, ep_out, ep_int, ep_int ? ep_int->bInterval : 0);
  566. #ifdef CONFIG_USB_STORAGE_SDDR09
  567. if (protocol == US_PR_EUSB_SDDR09 || protocol == US_PR_DPCM_USB) {
  568. /* set the configuration -- STALL is an acceptable response here */
  569. result = usb_set_configuration(dev, 1);
  570. US_DEBUGP("Result from usb_set_configuration is %dn", result);
  571. if (result == -EPIPE) {
  572. US_DEBUGP("-- clearing stall on control interfacen");
  573. usb_clear_halt(dev, usb_sndctrlpipe(dev, 0));
  574. } else if (result != 0) {
  575. /* it's not a stall, but another error -- time to bail */
  576. US_DEBUGP("-- Unknown error.  Rejecting devicen");
  577. return NULL;
  578. }
  579. }
  580. #endif
  581. /* Do some basic sanity checks, and bail if we find a problem */
  582. if (!ep_in || !ep_out || (protocol == US_PR_CBI && !ep_int)) {
  583. US_DEBUGP("Endpoint sanity check failed! Rejecting dev.n");
  584. return NULL;
  585. }
  586. /* At this point, we're committed to using the device */
  587. usb_inc_dev_use(dev);
  588. /* clear the GUID and fetch the strings */
  589. GUID_CLEAR(guid);
  590. if (dev->descriptor.iManufacturer)
  591. usb_string(dev, dev->descriptor.iManufacturer, 
  592.    mf, sizeof(mf));
  593. if (dev->descriptor.iProduct)
  594. usb_string(dev, dev->descriptor.iProduct, 
  595.    prod, sizeof(prod));
  596. if (dev->descriptor.iSerialNumber && !(flags & US_FL_IGNORE_SER))
  597. usb_string(dev, dev->descriptor.iSerialNumber, 
  598.    serial, sizeof(serial));
  599. /* Create a GUID for this device */
  600. if (dev->descriptor.iSerialNumber && serial[0]) {
  601. /* If we have a serial number, and it's a non-NULL string */
  602. make_guid(guid, dev->descriptor.idVendor, 
  603.   dev->descriptor.idProduct, serial);
  604. } else {
  605. /* We don't have a serial number, so we use 0 */
  606. make_guid(guid, dev->descriptor.idVendor, 
  607.   dev->descriptor.idProduct, "0");
  608. }
  609. /*
  610.  * Now check if we have seen this GUID before
  611.  * We're looking for a device with a matching GUID that isn't
  612.  * already on the system
  613.  */
  614. ss = us_list;
  615. while ((ss != NULL) && 
  616.        ((ss->pusb_dev) || !GUID_EQUAL(guid, ss->guid)))
  617. ss = ss->next;
  618. if (ss != NULL) {
  619. /* Existing device -- re-connect */
  620. US_DEBUGP("Found existing GUID " GUID_FORMAT "n",
  621.   GUID_ARGS(guid));
  622. /* lock the device pointers */
  623. down(&(ss->dev_semaphore));
  624. /* establish the connection to the new device upon reconnect */
  625. ss->ifnum = ifnum;
  626. ss->pusb_dev = dev;
  627. /* copy over the endpoint data */
  628. if (ep_in)
  629. ss->ep_in = ep_in->bEndpointAddress & 
  630. USB_ENDPOINT_NUMBER_MASK;
  631. if (ep_out)
  632. ss->ep_out = ep_out->bEndpointAddress & 
  633. USB_ENDPOINT_NUMBER_MASK;
  634. ss->ep_int = ep_int;
  635. /* allocate an IRQ callback if one is needed */
  636. if ((ss->protocol == US_PR_CBI) && usb_stor_allocate_irq(ss)) {
  637. usb_dec_dev_use(dev);
  638. return NULL;
  639. }
  640. /* allocate the URB we're going to use */
  641. ss->current_urb = usb_alloc_urb(0);
  642. if (!ss->current_urb) {
  643. usb_dec_dev_use(dev);
  644. return NULL;
  645. }
  646.                 /* Re-Initialize the device if it needs it */
  647. if (unusual_dev && unusual_dev->initFunction)
  648. (unusual_dev->initFunction)(ss);
  649. /* unlock the device pointers */
  650. up(&(ss->dev_semaphore));
  651. } else { 
  652. /* New device -- allocate memory and initialize */
  653. US_DEBUGP("New GUID " GUID_FORMAT "n", GUID_ARGS(guid));
  654. if ((ss = (struct us_data *)kmalloc(sizeof(struct us_data), 
  655.     GFP_KERNEL)) == NULL) {
  656. printk(KERN_WARNING USB_STORAGE "Out of memoryn");
  657. usb_dec_dev_use(dev);
  658. return NULL;
  659. }
  660. memset(ss, 0, sizeof(struct us_data));
  661. /* allocate the URB we're going to use */
  662. ss->current_urb = usb_alloc_urb(0);
  663. if (!ss->current_urb) {
  664. kfree(ss);
  665. usb_dec_dev_use(dev);
  666. return NULL;
  667. }
  668. /* Initialize the mutexes only when the struct is new */
  669. init_completion(&(ss->notify));
  670. init_MUTEX_LOCKED(&(ss->ip_waitq));
  671. init_MUTEX(&(ss->queue_exclusion));
  672. init_MUTEX(&(ss->irq_urb_sem));
  673. init_MUTEX(&(ss->current_urb_sem));
  674. init_MUTEX(&(ss->dev_semaphore));
  675. /* copy over the subclass and protocol data */
  676. ss->subclass = subclass;
  677. ss->protocol = protocol;
  678. ss->flags = flags;
  679. ss->unusual_dev = unusual_dev;
  680. /* copy over the endpoint data */
  681. if (ep_in)
  682. ss->ep_in = ep_in->bEndpointAddress & 
  683. USB_ENDPOINT_NUMBER_MASK;
  684. if (ep_out)
  685. ss->ep_out = ep_out->bEndpointAddress & 
  686. USB_ENDPOINT_NUMBER_MASK;
  687. ss->ep_int = ep_int;
  688. /* establish the connection to the new device */
  689. ss->ifnum = ifnum;
  690. ss->pusb_dev = dev;
  691. /* copy over the identifiying strings */
  692. strncpy(ss->vendor, mf, USB_STOR_STRING_LEN);
  693. strncpy(ss->product, prod, USB_STOR_STRING_LEN);
  694. strncpy(ss->serial, serial, USB_STOR_STRING_LEN);
  695. if (strlen(ss->vendor) == 0) {
  696. if (unusual_dev->vendorName)
  697. strncpy(ss->vendor, unusual_dev->vendorName,
  698. USB_STOR_STRING_LEN);
  699. else
  700. strncpy(ss->vendor, "Unknown",
  701. USB_STOR_STRING_LEN);
  702. }
  703. if (strlen(ss->product) == 0) {
  704. if (unusual_dev->productName)
  705. strncpy(ss->product, unusual_dev->productName,
  706. USB_STOR_STRING_LEN);
  707. else
  708. strncpy(ss->product, "Unknown",
  709. USB_STOR_STRING_LEN);
  710. }
  711. if (strlen(ss->serial) == 0)
  712. strncpy(ss->serial, "None", USB_STOR_STRING_LEN);
  713. /* copy the GUID we created before */
  714. memcpy(ss->guid, guid, sizeof(guid));
  715. /* 
  716.  * Set the handler pointers based on the protocol
  717.  * Again, this data is persistant across reattachments
  718.  */
  719. switch (ss->protocol) {
  720. case US_PR_CB:
  721. ss->transport_name = "Control/Bulk";
  722. ss->transport = usb_stor_CB_transport;
  723. ss->transport_reset = usb_stor_CB_reset;
  724. ss->max_lun = 7;
  725. break;
  726. case US_PR_CBI:
  727. ss->transport_name = "Control/Bulk/Interrupt";
  728. ss->transport = usb_stor_CBI_transport;
  729. ss->transport_reset = usb_stor_CB_reset;
  730. ss->max_lun = 7;
  731. break;
  732. case US_PR_BULK:
  733. ss->transport_name = "Bulk";
  734. ss->transport = usb_stor_Bulk_transport;
  735. ss->transport_reset = usb_stor_Bulk_reset;
  736. ss->max_lun = usb_stor_Bulk_max_lun(ss);
  737. break;
  738. #ifdef CONFIG_USB_STORAGE_HP8200e
  739. case US_PR_SCM_ATAPI:
  740. ss->transport_name = "SCM/ATAPI";
  741. ss->transport = hp8200e_transport;
  742. ss->transport_reset = usb_stor_CB_reset;
  743. ss->max_lun = 1;
  744. break;
  745. #endif
  746. #ifdef CONFIG_USB_STORAGE_SDDR09
  747. case US_PR_EUSB_SDDR09:
  748. ss->transport_name = "EUSB/SDDR09";
  749. ss->transport = sddr09_transport;
  750. ss->transport_reset = usb_stor_CB_reset;
  751. ss->max_lun = 0;
  752. break;
  753. #endif
  754. #ifdef CONFIG_USB_STORAGE_SDDR55
  755. case US_PR_SDDR55:
  756. ss->transport_name = "SDDR55";
  757. ss->transport = sddr55_transport;
  758. ss->transport_reset = sddr55_reset;
  759. ss->max_lun = 0;
  760. break;
  761. #endif
  762. #ifdef CONFIG_USB_STORAGE_DPCM
  763. case US_PR_DPCM_USB:
  764. ss->transport_name = "Control/Bulk-EUSB/SDDR09";
  765. ss->transport = dpcm_transport;
  766. ss->transport_reset = usb_stor_CB_reset;
  767. ss->max_lun = 1;
  768. break;
  769. #endif
  770. #ifdef CONFIG_USB_STORAGE_FREECOM
  771.                 case US_PR_FREECOM:
  772.                         ss->transport_name = "Freecom";
  773.                         ss->transport = freecom_transport;
  774.                         ss->transport_reset = usb_stor_freecom_reset;
  775.                         ss->max_lun = 0;
  776.                         break;
  777. #endif
  778. #ifdef CONFIG_USB_STORAGE_DATAFAB
  779.                 case US_PR_DATAFAB:
  780.                         ss->transport_name  = "Datafab Bulk-Only";
  781.                         ss->transport = datafab_transport;
  782.                         ss->transport_reset = usb_stor_Bulk_reset;
  783.                         ss->max_lun = 1;
  784.                         break;
  785. #endif
  786. #ifdef CONFIG_USB_STORAGE_JUMPSHOT
  787.                 case US_PR_JUMPSHOT:
  788.                         ss->transport_name  = "Lexar Jumpshot Control/Bulk";
  789.                         ss->transport = jumpshot_transport;
  790.                         ss->transport_reset = usb_stor_Bulk_reset;
  791.                         ss->max_lun = 1;
  792.                         break;
  793. #endif
  794. default:
  795. ss->transport_name = "Unknown";
  796. kfree(ss->current_urb);
  797. kfree(ss);
  798. usb_dec_dev_use(dev);
  799. return NULL;
  800. break;
  801. }
  802. US_DEBUGP("Transport: %sn", ss->transport_name);
  803. /* fix for single-lun devices */
  804. if (ss->flags & US_FL_SINGLE_LUN)
  805. ss->max_lun = 0;
  806. switch (ss->subclass) {
  807. case US_SC_RBC:
  808. ss->protocol_name = "Reduced Block Commands (RBC)";
  809. ss->proto_handler = usb_stor_transparent_scsi_command;
  810. break;
  811. case US_SC_8020:
  812. ss->protocol_name = "8020i";
  813. ss->proto_handler = usb_stor_ATAPI_command;
  814. ss->max_lun = 0;
  815. break;
  816. case US_SC_QIC:
  817. ss->protocol_name = "QIC-157";
  818. ss->proto_handler = usb_stor_qic157_command;
  819. ss->max_lun = 0;
  820. break;
  821. case US_SC_8070:
  822. ss->protocol_name = "8070i";
  823. ss->proto_handler = usb_stor_ATAPI_command;
  824. ss->max_lun = 0;
  825. break;
  826. case US_SC_SCSI:
  827. ss->protocol_name = "Transparent SCSI";
  828. ss->proto_handler = usb_stor_transparent_scsi_command;
  829. break;
  830. case US_SC_UFI:
  831. ss->protocol_name = "Uniform Floppy Interface (UFI)";
  832. ss->proto_handler = usb_stor_ufi_command;
  833. break;
  834. #ifdef CONFIG_USB_STORAGE_ISD200
  835.                 case US_SC_ISD200:
  836.                         ss->protocol_name = "ISD200 ATA/ATAPI";
  837.                         ss->proto_handler = isd200_ata_command;
  838.                         break;
  839. #endif
  840. default:
  841. ss->protocol_name = "Unknown";
  842. kfree(ss->current_urb);
  843. kfree(ss);
  844. usb_dec_dev_use(dev);
  845. return NULL;
  846. break;
  847. }
  848. US_DEBUGP("Protocol: %sn", ss->protocol_name);
  849. /* allocate an IRQ callback if one is needed */
  850. if ((ss->protocol == US_PR_CBI) && usb_stor_allocate_irq(ss)) {
  851. kfree(ss->current_urb);
  852. kfree(ss);
  853. usb_dec_dev_use(dev);
  854. return NULL;
  855. }
  856. /*
  857.  * Since this is a new device, we need to generate a scsi 
  858.  * host definition, and register with the higher SCSI layers
  859.  */
  860. /* Initialize the host template based on the default one */
  861. memcpy(&(ss->htmplt), &usb_stor_host_template, 
  862.        sizeof(usb_stor_host_template));
  863. /* Grab the next host number */
  864. ss->host_number = my_host_number++;
  865. /* We abuse this pointer so we can pass the ss pointer to 
  866.  * the host controller thread in us_detect.  But how else are
  867.  * we to do it?
  868.  */
  869. (struct us_data *)ss->htmplt.proc_dir = ss; 
  870. /* Just before we start our control thread, initialize
  871.  * the device if it needs initialization */
  872. if (unusual_dev && unusual_dev->initFunction)
  873. unusual_dev->initFunction(ss);
  874. /* start up our control thread */
  875. ss->pid = kernel_thread(usb_stor_control_thread, ss,
  876. CLONE_VM);
  877. if (ss->pid < 0) {
  878. printk(KERN_WARNING USB_STORAGE 
  879.        "Unable to start control threadn");
  880. kfree(ss->current_urb);
  881. kfree(ss);
  882. usb_dec_dev_use(dev);
  883. return NULL;
  884. }
  885. /* wait for the thread to start */
  886. wait_for_completion(&(ss->notify));
  887. /* now register  - our detect function will be called */
  888. ss->htmplt.module = THIS_MODULE;
  889. scsi_register_module(MODULE_SCSI_HA, &(ss->htmplt));
  890. /* lock access to the data structures */
  891. down(&us_list_semaphore);
  892. /* put us in the list */
  893. ss->next = us_list;
  894. us_list = ss;
  895. /* release the data structure lock */
  896. up(&us_list_semaphore);
  897. }
  898. printk(KERN_DEBUG 
  899.        "WARNING: USB Mass Storage data integrity not assuredn");
  900. printk(KERN_DEBUG 
  901.        "USB Mass Storage device found at %dn", dev->devnum);
  902. /* return a pointer for the disconnect function */
  903. return ss;
  904. }
  905. /* Handle a disconnect event from the USB core */
  906. static void storage_disconnect(struct usb_device *dev, void *ptr)
  907. {
  908. struct us_data *ss = ptr;
  909. int result;
  910. US_DEBUGP("storage_disconnect() calledn");
  911. /* this is the odd case -- we disconnected but weren't using it */
  912. if (!ss) {
  913. US_DEBUGP("-- device was not in usen");
  914. return;
  915. }
  916. /* lock access to the device data structure */
  917. down(&(ss->dev_semaphore));
  918. /* release the IRQ, if we have one */
  919. down(&(ss->irq_urb_sem));
  920. if (ss->irq_urb) {
  921. US_DEBUGP("-- releasing irq URBn");
  922. result = usb_unlink_urb(ss->irq_urb);
  923. US_DEBUGP("-- usb_unlink_urb() returned %dn", result);
  924. usb_free_urb(ss->irq_urb);
  925. ss->irq_urb = NULL;
  926. }
  927. up(&(ss->irq_urb_sem));
  928. /* free up the main URB for this device */
  929. US_DEBUGP("-- releasing main URBn");
  930. result = usb_unlink_urb(ss->current_urb);
  931. US_DEBUGP("-- usb_unlink_urb() returned %dn", result);
  932. usb_free_urb(ss->current_urb);
  933. ss->current_urb = NULL;
  934. /* mark the device as gone */
  935. usb_dec_dev_use(ss->pusb_dev);
  936. ss->pusb_dev = NULL;
  937. /* unlock access to the device data structure */
  938. up(&(ss->dev_semaphore));
  939. }
  940. /***********************************************************************
  941.  * Initialization and registration
  942.  ***********************************************************************/
  943. int __init usb_stor_init(void)
  944. {
  945. printk(KERN_INFO "Initializing USB Mass Storage driver...n");
  946. /* initialize internal global data elements */
  947. us_list = NULL;
  948. init_MUTEX(&us_list_semaphore);
  949. my_host_number = 0;
  950. /* register the driver, return -1 if error */
  951. if (usb_register(&usb_storage_driver) < 0)
  952. return -1;
  953. /* we're all set */
  954. printk(KERN_INFO "USB Mass Storage support registered.n");
  955. return 0;
  956. }
  957. void __exit usb_stor_exit(void)
  958. {
  959. struct us_data *next;
  960. US_DEBUGP("usb_stor_exit() calledn");
  961. /* Deregister the driver
  962.  * This eliminates races with probes and disconnects 
  963.  */
  964. US_DEBUGP("-- calling usb_deregister()n");
  965. usb_deregister(&usb_storage_driver) ;
  966. /* While there are still virtual hosts, unregister them
  967.  * Note that it's important to do this completely before removing
  968.  * the structures because of possible races with the /proc
  969.  * interface
  970.  */
  971. for (next = us_list; next; next = next->next) {
  972. US_DEBUGP("-- calling scsi_unregister_module()n");
  973. scsi_unregister_module(MODULE_SCSI_HA, &(next->htmplt));
  974. }
  975. /* While there are still structures, free them.  Note that we are
  976.  * now race-free, since these structures can no longer be accessed
  977.  * from either the SCSI command layer or the /proc interface
  978.  */
  979. while (us_list) {
  980. /* keep track of where the next one is */
  981. next = us_list->next;
  982. /* If there's extra data in the us_data structure then
  983.  * free that first */
  984. if (us_list->extra) {
  985. /* call the destructor routine, if it exists */
  986. if (us_list->extra_destructor) {
  987. US_DEBUGP("-- calling extra_destructor()n");
  988. us_list->extra_destructor(us_list->extra);
  989. }
  990. /* destroy the extra data */
  991. US_DEBUGP("-- freeing the data structuren");
  992. kfree(us_list->extra);
  993. }
  994. /* free the structure itself */
  995.                 kfree (us_list);
  996. /* advance the list pointer */
  997. us_list = next;
  998. }
  999. }
  1000. module_init(usb_stor_init);
  1001. module_exit(usb_stor_exit);