usb.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:33k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

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