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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *      sd.c Copyright (C) 1992 Drew Eckhardt
  3.  *           Copyright (C) 1993, 1994, 1995, 1999 Eric Youngdale
  4.  *
  5.  *      Linux scsi disk driver
  6.  *              Initial versions: Drew Eckhardt
  7.  *              Subsequent revisions: Eric Youngdale
  8.  *
  9.  *      <drew@colorado.edu>
  10.  *
  11.  *       Modified by Eric Youngdale ericy@andante.org to
  12.  *       add scatter-gather, multiple outstanding request, and other
  13.  *       enhancements.
  14.  *
  15.  *       Modified by Eric Youngdale eric@andante.org to support loadable
  16.  *       low-level scsi drivers.
  17.  *
  18.  *       Modified by Jirka Hanika geo@ff.cuni.cz to support more
  19.  *       scsi disks using eight major numbers.
  20.  *
  21.  *       Modified by Richard Gooch rgooch@atnf.csiro.au to support devfs.
  22.  *
  23.  *  Modified by Torben Mathiasen tmm@image.dk
  24.  *       Resource allocation fixes in sd_init and cleanups.
  25.  *
  26.  *  Modified by Alex Davis <letmein@erols.com>
  27.  *       Fix problem where partition info not being read in sd_open.
  28.  *
  29.  *  Modified by Alex Davis <letmein@erols.com>
  30.  *       Fix problem where removable media could be ejected after sd_open.
  31.  */
  32. #include <linux/config.h>
  33. #include <linux/module.h>
  34. #include <linux/fs.h>
  35. #include <linux/kernel.h>
  36. #include <linux/sched.h>
  37. #include <linux/mm.h>
  38. #include <linux/string.h>
  39. #include <linux/hdreg.h>
  40. #include <linux/errno.h>
  41. #include <linux/interrupt.h>
  42. #include <linux/init.h>
  43. #include <linux/smp.h>
  44. #include <asm/uaccess.h>
  45. #include <asm/system.h>
  46. #include <asm/io.h>
  47. #define MAJOR_NR SCSI_DISK0_MAJOR
  48. #include <linux/blk.h>
  49. #include <linux/blkpg.h>
  50. #include "scsi.h"
  51. #include "hosts.h"
  52. #include "sd.h"
  53. #include <scsi/scsi_ioctl.h>
  54. #include "constants.h"
  55. #include <scsi/scsicam.h> /* must follow "hosts.h" */
  56. #include <linux/genhd.h>
  57. /*
  58.  *  static const char RCSid[] = "$Header:";
  59.  */
  60. #define SD_MAJOR(i) (!(i) ? SCSI_DISK0_MAJOR : SCSI_DISK1_MAJOR-1+(i))
  61. #define SCSI_DISKS_PER_MAJOR 16
  62. #define SD_MAJOR_NUMBER(i) SD_MAJOR((i) >> 8)
  63. #define SD_MINOR_NUMBER(i) ((i) & 255)
  64. #define MKDEV_SD_PARTITION(i) MKDEV(SD_MAJOR_NUMBER(i), (i) & 255)
  65. #define MKDEV_SD(index) MKDEV_SD_PARTITION((index) << 4)
  66. #define N_USED_SCSI_DISKS  (sd_template.dev_max + SCSI_DISKS_PER_MAJOR - 1)
  67. #define N_USED_SD_MAJORS   (N_USED_SCSI_DISKS / SCSI_DISKS_PER_MAJOR)
  68. #define MAX_RETRIES 5
  69. /*
  70.  *  Time out in seconds for disks and Magneto-opticals (which are slower).
  71.  */
  72. #define SD_TIMEOUT (30 * HZ)
  73. #define SD_MOD_TIMEOUT (75 * HZ)
  74. struct hd_struct *sd;
  75. static Scsi_Disk *rscsi_disks;
  76. static int *sd_sizes;
  77. static int *sd_blocksizes;
  78. static int *sd_hardsizes; /* Hardware sector size */
  79. static int *sd_max_sectors;
  80. static int check_scsidisk_media_change(kdev_t);
  81. static int fop_revalidate_scsidisk(kdev_t);
  82. static int sd_init_onedisk(int);
  83. static int sd_init(void);
  84. static void sd_finish(void);
  85. static int sd_attach(Scsi_Device *);
  86. static int sd_detect(Scsi_Device *);
  87. static void sd_detach(Scsi_Device *);
  88. static int sd_init_command(Scsi_Cmnd *);
  89. static struct Scsi_Device_Template sd_template = {
  90. name:"disk",
  91. tag:"sd",
  92. scsi_type:TYPE_DISK,
  93. major:SCSI_DISK0_MAJOR,
  94.         /*
  95.          * Secondary range of majors that this driver handles.
  96.          */
  97. min_major:SCSI_DISK1_MAJOR,
  98. max_major:SCSI_DISK7_MAJOR,
  99. blk:1,
  100. detect:sd_detect,
  101. init:sd_init,
  102. finish:sd_finish,
  103. attach:sd_attach,
  104. detach:sd_detach,
  105. init_command:sd_init_command,
  106. };
  107. static void rw_intr(Scsi_Cmnd * SCpnt);
  108. #if defined(CONFIG_PPC)
  109. /*
  110.  * Moved from arch/ppc/pmac_setup.c.  This is where it really belongs.
  111.  */
  112. kdev_t __init
  113. sd_find_target(void *host, int tgt)
  114. {
  115.     Scsi_Disk *dp;
  116.     int i;
  117.     for (dp = rscsi_disks, i = 0; i < sd_template.dev_max; ++i, ++dp)
  118.         if (dp->device != NULL && dp->device->host == host
  119.             && dp->device->id == tgt)
  120.             return MKDEV_SD(i);
  121.     return 0;
  122. }
  123. #endif
  124. static int sd_ioctl(struct inode * inode, struct file * file, unsigned int cmd, unsigned long arg)
  125. {
  126. kdev_t dev = inode->i_rdev;
  127. struct Scsi_Host * host;
  128. Scsi_Device * SDev;
  129. int diskinfo[4];
  130.     
  131. SDev = rscsi_disks[DEVICE_NR(dev)].device;
  132. if (!SDev)
  133. return -ENODEV;
  134. /*
  135.  * If we are in the middle of error recovery, don't let anyone
  136.  * else try and use this device.  Also, if error recovery fails, it
  137.  * may try and take the device offline, in which case all further
  138.  * access to the device is prohibited.
  139.  */
  140. if( !scsi_block_when_processing_errors(SDev) )
  141. {
  142. return -ENODEV;
  143. }
  144. switch (cmd) 
  145. {
  146. case HDIO_GETGEO:   /* Return BIOS disk parameters */
  147. {
  148. struct hd_geometry *loc = (struct hd_geometry *) arg;
  149. if(!loc)
  150. return -EINVAL;
  151. host = rscsi_disks[DEVICE_NR(dev)].device->host;
  152. /* default to most commonly used values */
  153.         diskinfo[0] = 0x40;
  154.          diskinfo[1] = 0x20;
  155.          diskinfo[2] = rscsi_disks[DEVICE_NR(dev)].capacity >> 11;
  156. /* override with calculated, extended default, or driver values */
  157. if(host->hostt->bios_param != NULL)
  158. host->hostt->bios_param(&rscsi_disks[DEVICE_NR(dev)],
  159.     dev,
  160.     &diskinfo[0]);
  161. else scsicam_bios_param(&rscsi_disks[DEVICE_NR(dev)],
  162. dev, &diskinfo[0]);
  163. if (put_user(diskinfo[0], &loc->heads) ||
  164. put_user(diskinfo[1], &loc->sectors) ||
  165. put_user(diskinfo[2], &loc->cylinders) ||
  166. put_user(sd[SD_PARTITION(inode->i_rdev)].start_sect, &loc->start))
  167. return -EFAULT;
  168. return 0;
  169. }
  170. case HDIO_GETGEO_BIG:
  171. {
  172. struct hd_big_geometry *loc = (struct hd_big_geometry *) arg;
  173. if(!loc)
  174. return -EINVAL;
  175. host = rscsi_disks[DEVICE_NR(dev)].device->host;
  176. /* default to most commonly used values */
  177. diskinfo[0] = 0x40;
  178. diskinfo[1] = 0x20;
  179. diskinfo[2] = rscsi_disks[DEVICE_NR(dev)].capacity >> 11;
  180. /* override with calculated, extended default, or driver values */
  181. if(host->hostt->bios_param != NULL)
  182. host->hostt->bios_param(&rscsi_disks[DEVICE_NR(dev)],
  183.     dev,
  184.     &diskinfo[0]);
  185. else scsicam_bios_param(&rscsi_disks[DEVICE_NR(dev)],
  186. dev, &diskinfo[0]);
  187. if (put_user(diskinfo[0], &loc->heads) ||
  188. put_user(diskinfo[1], &loc->sectors) ||
  189. put_user(diskinfo[2], (unsigned int *) &loc->cylinders) ||
  190. put_user(sd[SD_PARTITION(inode->i_rdev)].start_sect, &loc->start))
  191. return -EFAULT;
  192. return 0;
  193. }
  194. case BLKGETSIZE:
  195. case BLKGETSIZE64:
  196. case BLKROSET:
  197. case BLKROGET:
  198. case BLKRASET:
  199. case BLKRAGET:
  200. case BLKFLSBUF:
  201. case BLKSSZGET:
  202. case BLKPG:
  203. case BLKELVGET:
  204. case BLKELVSET:
  205. case BLKBSZGET:
  206. case BLKBSZSET:
  207. return blk_ioctl(inode->i_rdev, cmd, arg);
  208. case BLKRRPART: /* Re-read partition tables */
  209.         if (!capable(CAP_SYS_ADMIN))
  210.                 return -EACCES;
  211. return revalidate_scsidisk(dev, 1);
  212. default:
  213. return scsi_ioctl(rscsi_disks[DEVICE_NR(dev)].device , cmd, (void *) arg);
  214. }
  215. }
  216. static void sd_devname(unsigned int disknum, char *buffer)
  217. {
  218. if (disknum < 26)
  219. sprintf(buffer, "sd%c", 'a' + disknum);
  220. else {
  221. unsigned int min1;
  222. unsigned int min2;
  223. /*
  224.  * For larger numbers of disks, we need to go to a new
  225.  * naming scheme.
  226.  */
  227. min1 = disknum / 26;
  228. min2 = disknum % 26;
  229. sprintf(buffer, "sd%c%c", 'a' + min1 - 1, 'a' + min2);
  230. }
  231. }
  232. static request_queue_t *sd_find_queue(kdev_t dev)
  233. {
  234. Scsi_Disk *dpnt;
  235.   int target;
  236.   target = DEVICE_NR(dev);
  237. dpnt = &rscsi_disks[target];
  238. if (!dpnt)
  239. return NULL; /* No such device */
  240. return &dpnt->device->request_queue;
  241. }
  242. static int sd_init_command(Scsi_Cmnd * SCpnt)
  243. {
  244. int dev, devm, block, this_count;
  245. Scsi_Disk *dpnt;
  246. #if CONFIG_SCSI_LOGGING
  247. char nbuff[6];
  248. #endif
  249. devm = SD_PARTITION(SCpnt->request.rq_dev);
  250. dev = DEVICE_NR(SCpnt->request.rq_dev);
  251. block = SCpnt->request.sector;
  252. this_count = SCpnt->request_bufflen >> 9;
  253. SCSI_LOG_HLQUEUE(1, printk("Doing sd request, dev = %d, block = %dn", devm, block));
  254. dpnt = &rscsi_disks[dev];
  255. if (devm >= (sd_template.dev_max << 4) ||
  256.     !dpnt ||
  257.     !dpnt->device->online ||
  258.       block + SCpnt->request.nr_sectors > sd[devm].nr_sects) {
  259. SCSI_LOG_HLQUEUE(2, printk("Finishing %ld sectorsn", SCpnt->request.nr_sectors));
  260. SCSI_LOG_HLQUEUE(2, printk("Retry with 0x%pn", SCpnt));
  261. return 0;
  262. }
  263. block += sd[devm].start_sect;
  264. if (dpnt->device->changed) {
  265. /*
  266.  * quietly refuse to do anything to a changed disc until the changed
  267.  * bit has been reset
  268.  */
  269. /* printk("SCSI disk has been changed. Prohibiting further I/O.n"); */
  270. return 0;
  271. }
  272. SCSI_LOG_HLQUEUE(2, sd_devname(devm, nbuff));
  273. SCSI_LOG_HLQUEUE(2, printk("%s : real dev = /dev/%d, block = %dn",
  274.    nbuff, dev, block));
  275. /*
  276.  * If we have a 1K hardware sectorsize, prevent access to single
  277.  * 512 byte sectors.  In theory we could handle this - in fact
  278.  * the scsi cdrom driver must be able to handle this because
  279.  * we typically use 1K blocksizes, and cdroms typically have
  280.  * 2K hardware sectorsizes.  Of course, things are simpler
  281.  * with the cdrom, since it is read-only.  For performance
  282.  * reasons, the filesystems should be able to handle this
  283.  * and not force the scsi disk driver to use bounce buffers
  284.  * for this.
  285.  */
  286. if (dpnt->device->sector_size == 1024) {
  287. if ((block & 1) || (SCpnt->request.nr_sectors & 1)) {
  288. printk("sd.c:Bad block number requested");
  289. return 0;
  290. } else {
  291. block = block >> 1;
  292. this_count = this_count >> 1;
  293. }
  294. }
  295. if (dpnt->device->sector_size == 2048) {
  296. if ((block & 3) || (SCpnt->request.nr_sectors & 3)) {
  297. printk("sd.c:Bad block number requested");
  298. return 0;
  299. } else {
  300. block = block >> 2;
  301. this_count = this_count >> 2;
  302. }
  303. }
  304. if (dpnt->device->sector_size == 4096) {
  305. if ((block & 7) || (SCpnt->request.nr_sectors & 7)) {
  306. printk("sd.c:Bad block number requested");
  307. return 0;
  308. } else {
  309. block = block >> 3;
  310. this_count = this_count >> 3;
  311. }
  312. }
  313. switch (SCpnt->request.cmd) {
  314. case WRITE:
  315. if (!dpnt->device->writeable) {
  316. return 0;
  317. }
  318. SCpnt->cmnd[0] = WRITE_6;
  319. SCpnt->sc_data_direction = SCSI_DATA_WRITE;
  320. break;
  321. case READ:
  322. SCpnt->cmnd[0] = READ_6;
  323. SCpnt->sc_data_direction = SCSI_DATA_READ;
  324. break;
  325. default:
  326. panic("Unknown sd command %dn", SCpnt->request.cmd);
  327. }
  328. SCSI_LOG_HLQUEUE(2, printk("%s : %s %d/%ld 512 byte blocks.n",
  329.    nbuff,
  330.    (SCpnt->request.cmd == WRITE) ? "writing" : "reading",
  331.  this_count, SCpnt->request.nr_sectors));
  332. SCpnt->cmnd[1] = (SCpnt->device->scsi_level <= SCSI_2) ?
  333.  ((SCpnt->lun << 5) & 0xe0) : 0;
  334. if (((this_count > 0xff) || (block > 0x1fffff)) || SCpnt->device->ten) {
  335. if (this_count > 0xffff)
  336. this_count = 0xffff;
  337. SCpnt->cmnd[0] += READ_10 - READ_6;
  338. SCpnt->cmnd[2] = (unsigned char) (block >> 24) & 0xff;
  339. SCpnt->cmnd[3] = (unsigned char) (block >> 16) & 0xff;
  340. SCpnt->cmnd[4] = (unsigned char) (block >> 8) & 0xff;
  341. SCpnt->cmnd[5] = (unsigned char) block & 0xff;
  342. SCpnt->cmnd[6] = SCpnt->cmnd[9] = 0;
  343. SCpnt->cmnd[7] = (unsigned char) (this_count >> 8) & 0xff;
  344. SCpnt->cmnd[8] = (unsigned char) this_count & 0xff;
  345. } else {
  346. if (this_count > 0xff)
  347. this_count = 0xff;
  348. SCpnt->cmnd[1] |= (unsigned char) ((block >> 16) & 0x1f);
  349. SCpnt->cmnd[2] = (unsigned char) ((block >> 8) & 0xff);
  350. SCpnt->cmnd[3] = (unsigned char) block & 0xff;
  351. SCpnt->cmnd[4] = (unsigned char) this_count;
  352. SCpnt->cmnd[5] = 0;
  353. }
  354. /*
  355.  * We shouldn't disconnect in the middle of a sector, so with a dumb
  356.  * host adapter, it's safe to assume that we can at least transfer
  357.  * this many bytes between each connect / disconnect.
  358.  */
  359. SCpnt->transfersize = dpnt->device->sector_size;
  360. SCpnt->underflow = this_count << 9;
  361. SCpnt->allowed = MAX_RETRIES;
  362. SCpnt->timeout_per_command = (SCpnt->device->type == TYPE_DISK ?
  363.       SD_TIMEOUT : SD_MOD_TIMEOUT);
  364. /*
  365.  * This is the completion routine we use.  This is matched in terms
  366.  * of capability to this function.
  367.  */
  368. SCpnt->done = rw_intr;
  369. /*
  370.  * This indicates that the command is ready from our end to be
  371.  * queued.
  372.  */
  373. return 1;
  374. }
  375. static int sd_open(struct inode *inode, struct file *filp)
  376. {
  377. int target, retval = -ENXIO;
  378. Scsi_Device * SDev;
  379. target = DEVICE_NR(inode->i_rdev);
  380. SCSI_LOG_HLQUEUE(1, printk("target=%d, max=%dn", target, sd_template.dev_max));
  381. if (target >= sd_template.dev_max || !rscsi_disks[target].device)
  382. return -ENXIO; /* No such device */
  383. /*
  384.  * If the device is in error recovery, wait until it is done.
  385.  * If the device is offline, then disallow any access to it.
  386.  */
  387. if (!scsi_block_when_processing_errors(rscsi_disks[target].device)) {
  388. return -ENXIO;
  389. }
  390. /*
  391.  * Make sure that only one process can do a check_change_disk at one time.
  392.  * This is also used to lock out further access when the partition table
  393.  * is being re-read.
  394.  */
  395. while (rscsi_disks[target].device->busy) {
  396. barrier();
  397. cpu_relax();
  398. }
  399. /*
  400.  * The following code can sleep.
  401.  * Module unloading must be prevented
  402.  */
  403. SDev = rscsi_disks[target].device;
  404. if (SDev->host->hostt->module)
  405. __MOD_INC_USE_COUNT(SDev->host->hostt->module);
  406. if (sd_template.module)
  407. __MOD_INC_USE_COUNT(sd_template.module);
  408. SDev->access_count++;
  409. if (rscsi_disks[target].device->removable) {
  410. SDev->allow_revalidate = 1;
  411. check_disk_change(inode->i_rdev);
  412. SDev->allow_revalidate = 0;
  413. /*
  414.  * If the drive is empty, just let the open fail.
  415.  */
  416. if ((!rscsi_disks[target].ready) && !(filp->f_flags & O_NDELAY)) {
  417. retval = -ENOMEDIUM;
  418. goto error_out;
  419. }
  420. /*
  421.  * Similarly, if the device has the write protect tab set,
  422.  * have the open fail if the user expects to be able to write
  423.  * to the thing.
  424.  */
  425. if ((rscsi_disks[target].write_prot) && (filp->f_mode & 2)) {
  426. retval = -EROFS;
  427. goto error_out;
  428. }
  429. }
  430. /*
  431.  * It is possible that the disk changing stuff resulted in the device
  432.  * being taken offline.  If this is the case, report this to the user,
  433.  * and don't pretend that
  434.  * the open actually succeeded.
  435.  */
  436. if (!SDev->online) {
  437. goto error_out;
  438. }
  439. /*
  440.  * See if we are requesting a non-existent partition.  Do this
  441.  * after checking for disk change.
  442.  */
  443. if (sd_sizes[SD_PARTITION(inode->i_rdev)] == 0) {
  444. goto error_out;
  445. }
  446. if (SDev->removable)
  447. if (SDev->access_count==1)
  448. if (scsi_block_when_processing_errors(SDev))
  449. scsi_ioctl(SDev, SCSI_IOCTL_DOORLOCK, NULL);
  450. return 0;
  451. error_out:
  452. SDev->access_count--;
  453. if (SDev->host->hostt->module)
  454. __MOD_DEC_USE_COUNT(SDev->host->hostt->module);
  455. if (sd_template.module)
  456. __MOD_DEC_USE_COUNT(sd_template.module);
  457. return retval;
  458. }
  459. static int sd_release(struct inode *inode, struct file *file)
  460. {
  461. int target;
  462. Scsi_Device * SDev;
  463. target = DEVICE_NR(inode->i_rdev);
  464. SDev = rscsi_disks[target].device;
  465. if (!SDev)
  466. return -ENODEV;
  467. SDev->access_count--;
  468. if (SDev->removable) {
  469. if (!SDev->access_count)
  470. if (scsi_block_when_processing_errors(SDev))
  471. scsi_ioctl(SDev, SCSI_IOCTL_DOORUNLOCK, NULL);
  472. }
  473. if (SDev->host->hostt->module)
  474. __MOD_DEC_USE_COUNT(SDev->host->hostt->module);
  475. if (sd_template.module)
  476. __MOD_DEC_USE_COUNT(sd_template.module);
  477. return 0;
  478. }
  479. static struct block_device_operations sd_fops =
  480. {
  481. owner: THIS_MODULE,
  482. open: sd_open,
  483. release: sd_release,
  484. ioctl: sd_ioctl,
  485. check_media_change: check_scsidisk_media_change,
  486. revalidate: fop_revalidate_scsidisk
  487. };
  488. /*
  489.  *    If we need more than one SCSI disk major (i.e. more than
  490.  *      16 SCSI disks), we'll have to kmalloc() more gendisks later.
  491.  */
  492. static struct gendisk sd_gendisk =
  493. {
  494. major: SCSI_DISK0_MAJOR,
  495. major_name: "sd",
  496. minor_shift: 4,
  497. max_p: 1 << 4,
  498. fops: &sd_fops,
  499. };
  500. static struct gendisk *sd_gendisks = &sd_gendisk;
  501. #define SD_GENDISK(i)    sd_gendisks[(i) / SCSI_DISKS_PER_MAJOR]
  502. /*
  503.  * rw_intr is the interrupt routine for the device driver.
  504.  * It will be notified on the end of a SCSI read / write, and
  505.  * will take one of several actions based on success or failure.
  506.  */
  507. static void rw_intr(Scsi_Cmnd * SCpnt)
  508. {
  509. int result = SCpnt->result;
  510. #if CONFIG_SCSI_LOGGING
  511. char nbuff[6];
  512. #endif
  513. int this_count = SCpnt->bufflen >> 9;
  514. int good_sectors = (result == 0 ? this_count : 0);
  515. int block_sectors = 1;
  516. SCSI_LOG_HLCOMPLETE(1, sd_devname(DEVICE_NR(SCpnt->request.rq_dev), nbuff));
  517. SCSI_LOG_HLCOMPLETE(1, printk("%s : rw_intr(%d, %x [%x %x])n", nbuff,
  518.       SCpnt->host->host_no,
  519.       result,
  520.       SCpnt->sense_buffer[0],
  521.       SCpnt->sense_buffer[2]));
  522. /*
  523.    Handle MEDIUM ERRORs that indicate partial success.  Since this is a
  524.    relatively rare error condition, no care is taken to avoid
  525.    unnecessary additional work such as memcpy's that could be avoided.
  526.  */
  527. /* An error occurred */
  528. if (driver_byte(result) != 0) {
  529. /* Sense data is valid */
  530. if (SCpnt->sense_buffer[0] == 0xF0 && SCpnt->sense_buffer[2] == MEDIUM_ERROR) {
  531. long error_sector = (SCpnt->sense_buffer[3] << 24) |
  532. (SCpnt->sense_buffer[4] << 16) |
  533. (SCpnt->sense_buffer[5] << 8) |
  534. SCpnt->sense_buffer[6];
  535. if (SCpnt->request.bh != NULL)
  536. block_sectors = SCpnt->request.bh->b_size >> 9;
  537. switch (SCpnt->device->sector_size) {
  538. case 1024:
  539. error_sector <<= 1;
  540. if (block_sectors < 2)
  541. block_sectors = 2;
  542. break;
  543. case 2048:
  544. error_sector <<= 2;
  545. if (block_sectors < 4)
  546. block_sectors = 4;
  547. break;
  548. case 4096:
  549. error_sector <<=3;
  550. if (block_sectors < 8)
  551. block_sectors = 8;
  552. break;
  553. case 256:
  554. error_sector >>= 1;
  555. break;
  556. default:
  557. break;
  558. }
  559. error_sector -= sd[SD_PARTITION(SCpnt->request.rq_dev)].start_sect;
  560. error_sector &= ~(block_sectors - 1);
  561. good_sectors = error_sector - SCpnt->request.sector;
  562. if (good_sectors < 0 || good_sectors >= this_count)
  563. good_sectors = 0;
  564. }
  565. if (SCpnt->sense_buffer[2] == ILLEGAL_REQUEST) {
  566. if (SCpnt->device->ten == 1) {
  567. if (SCpnt->cmnd[0] == READ_10 ||
  568.     SCpnt->cmnd[0] == WRITE_10)
  569. SCpnt->device->ten = 0;
  570. }
  571. }
  572. }
  573. /*
  574.  * This calls the generic completion function, now that we know
  575.  * how many actual sectors finished, and how many sectors we need
  576.  * to say have failed.
  577.  */
  578. scsi_io_completion(SCpnt, good_sectors, block_sectors);
  579. }
  580. /*
  581.  * requeue_sd_request() is the request handler function for the sd driver.
  582.  * Its function in life is to take block device requests, and translate
  583.  * them to SCSI commands.
  584.  */
  585. static int check_scsidisk_media_change(kdev_t full_dev)
  586. {
  587. int retval;
  588. int target;
  589. int flag = 0;
  590. Scsi_Device * SDev;
  591. target = DEVICE_NR(full_dev);
  592. SDev = rscsi_disks[target].device;
  593. if (target >= sd_template.dev_max || !SDev) {
  594. printk("SCSI disk request error: invalid device.n");
  595. return 0;
  596. }
  597. if (!SDev->removable)
  598. return 0;
  599. /*
  600.  * If the device is offline, don't send any commands - just pretend as
  601.  * if the command failed.  If the device ever comes back online, we
  602.  * can deal with it then.  It is only because of unrecoverable errors
  603.  * that we would ever take a device offline in the first place.
  604.  */
  605. if (SDev->online == FALSE) {
  606. rscsi_disks[target].ready = 0;
  607. SDev->changed = 1;
  608. return 1; /* This will force a flush, if called from
  609.  * check_disk_change */
  610. }
  611. /* Using Start/Stop enables differentiation between drive with
  612.  * no cartridge loaded - NOT READY, drive with changed cartridge -
  613.  * UNIT ATTENTION, or with same cartridge - GOOD STATUS.
  614.  * This also handles drives that auto spin down. eg iomega jaz 1GB
  615.  * as this will spin up the drive.
  616.  */
  617. retval = -ENODEV;
  618. if (scsi_block_when_processing_errors(SDev))
  619. retval = scsi_ioctl(SDev, SCSI_IOCTL_START_UNIT, NULL);
  620. if (retval) { /* Unable to test, unit probably not ready.
  621.  * This usually means there is no disc in the
  622.  * drive.  Mark as changed, and we will figure
  623.  * it out later once the drive is available
  624.  * again.  */
  625. rscsi_disks[target].ready = 0;
  626. SDev->changed = 1;
  627. return 1; /* This will force a flush, if called from
  628.  * check_disk_change */
  629. }
  630. /*
  631.  * for removable scsi disk ( FLOPTICAL ) we have to recognise the
  632.  * presence of disk in the drive. This is kept in the Scsi_Disk
  633.  * struct and tested at open !  Daniel Roche ( dan@lectra.fr )
  634.  */
  635. rscsi_disks[target].ready = 1; /* FLOPTICAL */
  636. retval = SDev->changed;
  637. if (!flag)
  638. SDev->changed = 0;
  639. return retval;
  640. }
  641. static int sd_init_onedisk(int i)
  642. {
  643. unsigned char cmd[10];
  644. char nbuff[6];
  645. unsigned char *buffer;
  646. unsigned long spintime_value = 0;
  647. int the_result, retries, spintime;
  648. int sector_size;
  649. Scsi_Request *SRpnt;
  650. /*
  651.  * Get the name of the disk, in case we need to log it somewhere.
  652.  */
  653. sd_devname(i, nbuff);
  654. /*
  655.  * If the device is offline, don't try and read capacity or any
  656.  * of the other niceties.
  657.  */
  658. if (rscsi_disks[i].device->online == FALSE)
  659. return i;
  660. /*
  661.  * We need to retry the READ_CAPACITY because a UNIT_ATTENTION is
  662.  * considered a fatal error, and many devices report such an error
  663.  * just after a scsi bus reset.
  664.  */
  665. SRpnt = scsi_allocate_request(rscsi_disks[i].device);
  666. if (!SRpnt) {
  667. printk(KERN_WARNING "(sd_init_onedisk:) Request allocation failure.n");
  668. return i;
  669. }
  670. buffer = (unsigned char *) scsi_malloc(512);
  671. if (!buffer) {
  672. printk(KERN_WARNING "(sd_init_onedisk:) Memory allocation failure.n");
  673. scsi_release_request(SRpnt);
  674. return i;
  675. }
  676. spintime = 0;
  677. /* Spin up drives, as required.  Only do this at boot time */
  678. /* Spinup needs to be done for module loads too. */
  679. do {
  680. retries = 0;
  681. while (retries < 3) {
  682. cmd[0] = TEST_UNIT_READY;
  683. cmd[1] = (rscsi_disks[i].device->scsi_level <= SCSI_2) ?
  684.  ((rscsi_disks[i].device->lun << 5) & 0xe0) : 0;
  685. memset((void *) &cmd[2], 0, 8);
  686. SRpnt->sr_cmd_len = 0;
  687. SRpnt->sr_sense_buffer[0] = 0;
  688. SRpnt->sr_sense_buffer[2] = 0;
  689. SRpnt->sr_data_direction = SCSI_DATA_NONE;
  690. scsi_wait_req (SRpnt, (void *) cmd, (void *) buffer,
  691. 0/*512*/, SD_TIMEOUT, MAX_RETRIES);
  692. the_result = SRpnt->sr_result;
  693. retries++;
  694. if (the_result == 0
  695.     || SRpnt->sr_sense_buffer[2] != UNIT_ATTENTION)
  696. break;
  697. }
  698. /*
  699.  * If the drive has indicated to us that it doesn't have
  700.  * any media in it, don't bother with any of the rest of
  701.  * this crap.
  702.  */
  703. if( the_result != 0
  704.     && ((driver_byte(the_result) & DRIVER_SENSE) != 0)
  705.     && SRpnt->sr_sense_buffer[2] == UNIT_ATTENTION
  706.     && SRpnt->sr_sense_buffer[12] == 0x3A ) {
  707. rscsi_disks[i].capacity = 0x1fffff;
  708. sector_size = 512;
  709. rscsi_disks[i].device->changed = 1;
  710. rscsi_disks[i].ready = 0;
  711. break;
  712. }
  713. /* Look for non-removable devices that return NOT_READY.
  714.  * Issue command to spin up drive for these cases. */
  715. if (the_result && !rscsi_disks[i].device->removable &&
  716.     SRpnt->sr_sense_buffer[2] == NOT_READY) {
  717. unsigned long time1;
  718. if (!spintime) {
  719. printk("%s: Spinning up disk...", nbuff);
  720. cmd[0] = START_STOP;
  721. cmd[1] = (rscsi_disks[i].device->scsi_level <= SCSI_2) ?
  722.    ((rscsi_disks[i].device->lun << 5) & 0xe0) : 0;
  723. cmd[1] |= 1; /* Return immediately */
  724. memset((void *) &cmd[2], 0, 8);
  725. cmd[4] = 1; /* Start spin cycle */
  726. SRpnt->sr_cmd_len = 0;
  727. SRpnt->sr_sense_buffer[0] = 0;
  728. SRpnt->sr_sense_buffer[2] = 0;
  729. SRpnt->sr_data_direction = SCSI_DATA_READ;
  730. scsi_wait_req(SRpnt, (void *) cmd, (void *) buffer,
  731.     0/*512*/, SD_TIMEOUT, MAX_RETRIES);
  732. spintime_value = jiffies;
  733. }
  734. spintime = 1;
  735. time1 = HZ;
  736. /* Wait 1 second for next try */
  737. do {
  738. current->state = TASK_UNINTERRUPTIBLE;
  739. time1 = schedule_timeout(time1);
  740. } while(time1);
  741. printk(".");
  742. }
  743. } while (the_result && spintime &&
  744.  time_after(spintime_value + 100 * HZ, jiffies));
  745. if (spintime) {
  746. if (the_result)
  747. printk("not responding...n");
  748. else
  749. printk("readyn");
  750. }
  751. retries = 3;
  752. do {
  753. cmd[0] = READ_CAPACITY;
  754. cmd[1] = (rscsi_disks[i].device->scsi_level <= SCSI_2) ?
  755.  ((rscsi_disks[i].device->lun << 5) & 0xe0) : 0;
  756. memset((void *) &cmd[2], 0, 8);
  757. memset((void *) buffer, 0, 8);
  758. SRpnt->sr_cmd_len = 0;
  759. SRpnt->sr_sense_buffer[0] = 0;
  760. SRpnt->sr_sense_buffer[2] = 0;
  761. SRpnt->sr_data_direction = SCSI_DATA_READ;
  762. scsi_wait_req(SRpnt, (void *) cmd, (void *) buffer,
  763.     8, SD_TIMEOUT, MAX_RETRIES);
  764. the_result = SRpnt->sr_result;
  765. retries--;
  766. } while (the_result && retries);
  767. /*
  768.  * The SCSI standard says:
  769.  * "READ CAPACITY is necessary for self configuring software"
  770.  *  While not mandatory, support of READ CAPACITY is strongly
  771.  *  encouraged.
  772.  *  We used to die if we couldn't successfully do a READ CAPACITY.
  773.  *  But, now we go on about our way.  The side effects of this are
  774.  *
  775.  *  1. We can't know block size with certainty. I have said
  776.  *     "512 bytes is it" as this is most common.
  777.  *
  778.  *  2. Recovery from when someone attempts to read past the
  779.  *     end of the raw device will be slower.
  780.  */
  781. if (the_result) {
  782. printk("%s : READ CAPACITY failed.n"
  783.        "%s : status = %x, message = %02x, host = %d, driver = %02x n",
  784.        nbuff, nbuff,
  785.        status_byte(the_result),
  786.        msg_byte(the_result),
  787.        host_byte(the_result),
  788.        driver_byte(the_result)
  789.     );
  790. if (driver_byte(the_result) & DRIVER_SENSE)
  791. print_req_sense("sd", SRpnt);
  792. else
  793. printk("%s : sense not available. n", nbuff);
  794. printk("%s : block size assumed to be 512 bytes, disk size 1GB.  n",
  795.        nbuff);
  796. rscsi_disks[i].capacity = 0x1fffff;
  797. sector_size = 512;
  798. /* Set dirty bit for removable devices if not ready -
  799.  * sometimes drives will not report this properly. */
  800. if (rscsi_disks[i].device->removable &&
  801.     SRpnt->sr_sense_buffer[2] == NOT_READY)
  802. rscsi_disks[i].device->changed = 1;
  803. } else {
  804. /*
  805.  * FLOPTICAL, if read_capa is ok, drive is assumed to be ready
  806.  */
  807. rscsi_disks[i].ready = 1;
  808. rscsi_disks[i].capacity = 1 + ((buffer[0] << 24) |
  809.        (buffer[1] << 16) |
  810.        (buffer[2] << 8) |
  811.        buffer[3]);
  812. sector_size = (buffer[4] << 24) |
  813.     (buffer[5] << 16) | (buffer[6] << 8) | buffer[7];
  814. if (sector_size == 0) {
  815. sector_size = 512;
  816. printk("%s : sector size 0 reported, assuming 512.n",
  817.        nbuff);
  818. }
  819. if (sector_size != 512 &&
  820.     sector_size != 1024 &&
  821.     sector_size != 2048 &&
  822.     sector_size != 4096 &&
  823.     sector_size != 256) {
  824. printk("%s : unsupported sector size %d.n",
  825.        nbuff, sector_size);
  826. /*
  827.  * The user might want to re-format the drive with
  828.  * a supported sectorsize.  Once this happens, it
  829.  * would be relatively trivial to set the thing up.
  830.  * For this reason, we leave the thing in the table.
  831.  */
  832. rscsi_disks[i].capacity = 0;
  833. }
  834. if (sector_size > 1024) {
  835. int m;
  836. /*
  837.  * We must fix the sd_blocksizes and sd_hardsizes
  838.  * to allow us to read the partition tables.
  839.  * The disk reading code does not allow for reading
  840.  * of partial sectors.
  841.  */
  842. for (m = i << 4; m < ((i + 1) << 4); m++) {
  843. sd_blocksizes[m] = sector_size;
  844. }
  845. } {
  846. /*
  847.  * The msdos fs needs to know the hardware sector size
  848.  * So I have created this table. See ll_rw_blk.c
  849.  * Jacques Gelinas (Jacques@solucorp.qc.ca)
  850.  */
  851. int m;
  852. int hard_sector = sector_size;
  853. int sz = rscsi_disks[i].capacity * (hard_sector/256);
  854. /* There are 16 minors allocated for each major device */
  855. for (m = i << 4; m < ((i + 1) << 4); m++) {
  856. sd_hardsizes[m] = hard_sector;
  857. }
  858. printk("SCSI device %s: "
  859.        "%d %d-byte hdwr sectors (%d MB)n",
  860.        nbuff, rscsi_disks[i].capacity,
  861.        hard_sector, (sz/2 - sz/1250 + 974)/1950);
  862. }
  863. /* Rescale capacity to 512-byte units */
  864. if (sector_size == 4096)
  865. rscsi_disks[i].capacity <<= 3;
  866. if (sector_size == 2048)
  867. rscsi_disks[i].capacity <<= 2;
  868. if (sector_size == 1024)
  869. rscsi_disks[i].capacity <<= 1;
  870. if (sector_size == 256)
  871. rscsi_disks[i].capacity >>= 1;
  872. }
  873. /*
  874.  * Unless otherwise specified, this is not write protected.
  875.  */
  876. rscsi_disks[i].write_prot = 0;
  877. if (rscsi_disks[i].device->removable && rscsi_disks[i].ready) {
  878. /* FLOPTICAL */
  879. /*
  880.  * For removable scsi disk ( FLOPTICAL ) we have to recognise
  881.  * the Write Protect Flag. This flag is kept in the Scsi_Disk
  882.  * struct and tested at open !
  883.  * Daniel Roche ( dan@lectra.fr )
  884.  *
  885.  * Changed to get all pages (0x3f) rather than page 1 to
  886.  * get around devices which do not have a page 1.  Since
  887.  * we're only interested in the header anyway, this should
  888.  * be fine.
  889.  *   -- Matthew Dharm (mdharm-scsi@one-eyed-alien.net)
  890.  */
  891. memset((void *) &cmd[0], 0, 8);
  892. cmd[0] = MODE_SENSE;
  893. cmd[1] = (rscsi_disks[i].device->scsi_level <= SCSI_2) ?
  894.  ((rscsi_disks[i].device->lun << 5) & 0xe0) : 0;
  895. cmd[2] = 0x3f; /* Get all pages */
  896. cmd[4] = 255;   /* Ask for 255 bytes, even tho we want just the first 8 */
  897. SRpnt->sr_cmd_len = 0;
  898. SRpnt->sr_sense_buffer[0] = 0;
  899. SRpnt->sr_sense_buffer[2] = 0;
  900. /* same code as READCAPA !! */
  901. SRpnt->sr_data_direction = SCSI_DATA_READ;
  902. scsi_wait_req(SRpnt, (void *) cmd, (void *) buffer,
  903.     512, SD_TIMEOUT, MAX_RETRIES);
  904. the_result = SRpnt->sr_result;
  905. if (the_result) {
  906. printk("%s: test WP failed, assume Write Enabledn", nbuff);
  907. } else {
  908. rscsi_disks[i].write_prot = ((buffer[2] & 0x80) != 0);
  909. printk("%s: Write Protect is %sn", nbuff,
  910.        rscsi_disks[i].write_prot ? "on" : "off");
  911. }
  912. } /* check for write protect */
  913. SRpnt->sr_device->ten = 1;
  914. SRpnt->sr_device->remap = 1;
  915. SRpnt->sr_device->sector_size = sector_size;
  916. /* Wake up a process waiting for device */
  917. scsi_release_request(SRpnt);
  918. SRpnt = NULL;
  919. scsi_free(buffer, 512);
  920. return i;
  921. }
  922. /*
  923.  * The sd_init() function looks at all SCSI drives present, determines
  924.  * their size, and reads partition table entries for them.
  925.  */
  926. static int sd_registered;
  927. static int sd_init()
  928. {
  929. int i;
  930. if (sd_template.dev_noticed == 0)
  931. return 0;
  932. if (!rscsi_disks)
  933. sd_template.dev_max = sd_template.dev_noticed + SD_EXTRA_DEVS;
  934. if (sd_template.dev_max > N_SD_MAJORS * SCSI_DISKS_PER_MAJOR)
  935. sd_template.dev_max = N_SD_MAJORS * SCSI_DISKS_PER_MAJOR;
  936. if (!sd_registered) {
  937. for (i = 0; i < N_USED_SD_MAJORS; i++) {
  938. if (devfs_register_blkdev(SD_MAJOR(i), "sd", &sd_fops)) {
  939. printk("Unable to get major %d for SCSI diskn", SD_MAJOR(i));
  940. sd_template.dev_noticed = 0;
  941. return 1;
  942. }
  943. }
  944. sd_registered++;
  945. }
  946. /* We do not support attaching loadable devices yet. */
  947. if (rscsi_disks)
  948. return 0;
  949. rscsi_disks = kmalloc(sd_template.dev_max * sizeof(Scsi_Disk), GFP_ATOMIC);
  950. if (!rscsi_disks)
  951. goto cleanup_devfs;
  952. memset(rscsi_disks, 0, sd_template.dev_max * sizeof(Scsi_Disk));
  953. /* for every (necessary) major: */
  954. sd_sizes = kmalloc((sd_template.dev_max << 4) * sizeof(int), GFP_ATOMIC);
  955. if (!sd_sizes)
  956. goto cleanup_disks;
  957. memset(sd_sizes, 0, (sd_template.dev_max << 4) * sizeof(int));
  958. sd_blocksizes = kmalloc((sd_template.dev_max << 4) * sizeof(int), GFP_ATOMIC);
  959. if (!sd_blocksizes)
  960. goto cleanup_sizes;
  961. sd_hardsizes = kmalloc((sd_template.dev_max << 4) * sizeof(int), GFP_ATOMIC);
  962. if (!sd_hardsizes)
  963. goto cleanup_blocksizes;
  964. sd_max_sectors = kmalloc((sd_template.dev_max << 4) * sizeof(int), GFP_ATOMIC);
  965. if (!sd_max_sectors)
  966. goto cleanup_max_sectors;
  967. for (i = 0; i < sd_template.dev_max << 4; i++) {
  968. sd_blocksizes[i] = 1024;
  969. sd_hardsizes[i] = 512;
  970. /*
  971.  * Allow lowlevel device drivers to generate 512k large scsi
  972.  * commands if they know what they're doing and they ask for it
  973.  * explicitly via the SHpnt->max_sectors API.
  974.  */
  975. sd_max_sectors[i] = MAX_SEGMENTS*8;
  976. }
  977. for (i = 0; i < N_USED_SD_MAJORS; i++) {
  978. blksize_size[SD_MAJOR(i)] = sd_blocksizes + i * (SCSI_DISKS_PER_MAJOR << 4);
  979. hardsect_size[SD_MAJOR(i)] = sd_hardsizes + i * (SCSI_DISKS_PER_MAJOR << 4);
  980. max_sectors[SD_MAJOR(i)] = sd_max_sectors + i * (SCSI_DISKS_PER_MAJOR << 4);
  981. }
  982. /*
  983.  * FIXME: should unregister blksize_size, hardsect_size and max_sectors when
  984.  * the module is unloaded.
  985.  */
  986. sd = kmalloc((sd_template.dev_max << 4) *
  987.   sizeof(struct hd_struct),
  988.   GFP_ATOMIC);
  989. if (!sd)
  990. goto cleanup_sd;
  991. memset(sd, 0, (sd_template.dev_max << 4) * sizeof(struct hd_struct));
  992. if (N_USED_SD_MAJORS > 1)
  993. sd_gendisks = kmalloc(N_USED_SD_MAJORS * sizeof(struct gendisk), GFP_ATOMIC);
  994. if (!sd_gendisks)
  995. goto cleanup_sd_gendisks;
  996. for (i = 0; i < N_USED_SD_MAJORS; i++) {
  997. sd_gendisks[i] = sd_gendisk;
  998. sd_gendisks[i].de_arr = kmalloc (SCSI_DISKS_PER_MAJOR * sizeof *sd_gendisks[i].de_arr,
  999.                                                  GFP_ATOMIC);
  1000. if (!sd_gendisks[i].de_arr)
  1001. goto cleanup_gendisks_de_arr;
  1002.                 memset (sd_gendisks[i].de_arr, 0,
  1003.                         SCSI_DISKS_PER_MAJOR * sizeof *sd_gendisks[i].de_arr);
  1004. sd_gendisks[i].flags = kmalloc (SCSI_DISKS_PER_MAJOR * sizeof *sd_gendisks[i].flags,
  1005.                                                 GFP_ATOMIC);
  1006. if (!sd_gendisks[i].flags)
  1007. goto cleanup_gendisks_flags;
  1008.                 memset (sd_gendisks[i].flags, 0,
  1009.                         SCSI_DISKS_PER_MAJOR * sizeof *sd_gendisks[i].flags);
  1010. sd_gendisks[i].major = SD_MAJOR(i);
  1011. sd_gendisks[i].major_name = "sd";
  1012. sd_gendisks[i].minor_shift = 4;
  1013. sd_gendisks[i].max_p = 1 << 4;
  1014. sd_gendisks[i].part = sd + (i * SCSI_DISKS_PER_MAJOR << 4);
  1015. sd_gendisks[i].sizes = sd_sizes + (i * SCSI_DISKS_PER_MAJOR << 4);
  1016. sd_gendisks[i].nr_real = 0;
  1017. sd_gendisks[i].real_devices =
  1018.     (void *) (rscsi_disks + i * SCSI_DISKS_PER_MAJOR);
  1019. }
  1020. return 0;
  1021. cleanup_gendisks_flags:
  1022. kfree(sd_gendisks[i].de_arr);
  1023. cleanup_gendisks_de_arr:
  1024. while (--i >= 0 ) {
  1025. kfree(sd_gendisks[i].de_arr);
  1026. kfree(sd_gendisks[i].flags);
  1027. }
  1028. if (sd_gendisks != &sd_gendisk)
  1029. kfree(sd_gendisks);
  1030. cleanup_sd_gendisks:
  1031. kfree(sd);
  1032. cleanup_sd:
  1033. kfree(sd_max_sectors);
  1034. cleanup_max_sectors:
  1035. kfree(sd_hardsizes);
  1036. cleanup_blocksizes:
  1037. kfree(sd_blocksizes);
  1038. cleanup_sizes:
  1039. kfree(sd_sizes);
  1040. cleanup_disks:
  1041. kfree(rscsi_disks);
  1042. rscsi_disks = NULL;
  1043. cleanup_devfs:
  1044. for (i = 0; i < N_USED_SD_MAJORS; i++) {
  1045. devfs_unregister_blkdev(SD_MAJOR(i), "sd");
  1046. }
  1047. sd_registered--;
  1048. sd_template.dev_noticed = 0;
  1049. return 1;
  1050. }
  1051. static void sd_finish()
  1052. {
  1053. int i;
  1054. for (i = 0; i < N_USED_SD_MAJORS; i++) {
  1055. blk_dev[SD_MAJOR(i)].queue = sd_find_queue;
  1056. add_gendisk(&sd_gendisks[i]);
  1057. }
  1058. for (i = 0; i < sd_template.dev_max; ++i)
  1059. if (!rscsi_disks[i].capacity && rscsi_disks[i].device) {
  1060. sd_init_onedisk(i);
  1061. if (!rscsi_disks[i].has_part_table) {
  1062. sd_sizes[i << 4] = rscsi_disks[i].capacity;
  1063. register_disk(&SD_GENDISK(i), MKDEV_SD(i),
  1064. 1<<4, &sd_fops,
  1065. rscsi_disks[i].capacity);
  1066. rscsi_disks[i].has_part_table = 1;
  1067. }
  1068. }
  1069. /* If our host adapter is capable of scatter-gather, then we increase
  1070.  * the read-ahead to 60 blocks (120 sectors).  If not, we use
  1071.  * a two block (4 sector) read ahead. We can only respect this with the
  1072.  * granularity of every 16 disks (one device major).
  1073.  */
  1074. for (i = 0; i < N_USED_SD_MAJORS; i++) {
  1075. read_ahead[SD_MAJOR(i)] =
  1076.     (rscsi_disks[i * SCSI_DISKS_PER_MAJOR].device
  1077.      && rscsi_disks[i * SCSI_DISKS_PER_MAJOR].device->host->sg_tablesize)
  1078.     ? 120 /* 120 sector read-ahead */
  1079.     : 4; /* 4 sector read-ahead */
  1080. }
  1081. return;
  1082. }
  1083. static int sd_detect(Scsi_Device * SDp)
  1084. {
  1085. if (SDp->type != TYPE_DISK && SDp->type != TYPE_MOD)
  1086. return 0;
  1087. sd_template.dev_noticed++;
  1088. return 1;
  1089. }
  1090. static int sd_attach(Scsi_Device * SDp)
  1091. {
  1092.         unsigned int devnum;
  1093. Scsi_Disk *dpnt;
  1094. int i;
  1095. char nbuff[6];
  1096. if (SDp->type != TYPE_DISK && SDp->type != TYPE_MOD)
  1097. return 0;
  1098. if (sd_template.nr_dev >= sd_template.dev_max || rscsi_disks == NULL) {
  1099. SDp->attached--;
  1100. return 1;
  1101. }
  1102. for (dpnt = rscsi_disks, i = 0; i < sd_template.dev_max; i++, dpnt++)
  1103. if (!dpnt->device)
  1104. break;
  1105. if (i >= sd_template.dev_max) {
  1106. printk(KERN_WARNING "scsi_devices corrupt (sd),"
  1107.     " nr_dev %d dev_max %dn",
  1108.     sd_template.nr_dev, sd_template.dev_max);
  1109. SDp->attached--;
  1110. return 1;
  1111. }
  1112. rscsi_disks[i].device = SDp;
  1113. rscsi_disks[i].has_part_table = 0;
  1114. sd_template.nr_dev++;
  1115. SD_GENDISK(i).nr_real++;
  1116.         devnum = i % SCSI_DISKS_PER_MAJOR;
  1117.         SD_GENDISK(i).de_arr[devnum] = SDp->de;
  1118.         if (SDp->removable)
  1119. SD_GENDISK(i).flags[devnum] |= GENHD_FL_REMOVABLE;
  1120. sd_devname(i, nbuff);
  1121. printk("Attached scsi %sdisk %s at scsi%d, channel %d, id %d, lun %dn",
  1122.        SDp->removable ? "removable " : "",
  1123.        nbuff, SDp->host->host_no, SDp->channel, SDp->id, SDp->lun);
  1124. return 0;
  1125. }
  1126. #define DEVICE_BUSY rscsi_disks[target].device->busy
  1127. #define ALLOW_REVALIDATE rscsi_disks[target].device->allow_revalidate
  1128. #define USAGE rscsi_disks[target].device->access_count
  1129. #define CAPACITY rscsi_disks[target].capacity
  1130. #define MAYBE_REINIT  sd_init_onedisk(target)
  1131. /* This routine is called to flush all partitions and partition tables
  1132.  * for a changed scsi disk, and then re-read the new partition table.
  1133.  * If we are revalidating a disk because of a media change, then we
  1134.  * enter with usage == 0.  If we are using an ioctl, we automatically have
  1135.  * usage == 1 (we need an open channel to use an ioctl :-), so this
  1136.  * is our limit.
  1137.  */
  1138. int revalidate_scsidisk(kdev_t dev, int maxusage)
  1139. {
  1140. int target;
  1141. int max_p;
  1142. int start;
  1143. int i;
  1144. target = DEVICE_NR(dev);
  1145. if (DEVICE_BUSY || (ALLOW_REVALIDATE == 0 && USAGE > maxusage)) {
  1146. printk("Device busy for revalidation (usage=%d)n", USAGE);
  1147. return -EBUSY;
  1148. }
  1149. DEVICE_BUSY = 1;
  1150. max_p = sd_gendisks->max_p;
  1151. start = target << sd_gendisks->minor_shift;
  1152. for (i = max_p - 1; i >= 0; i--) {
  1153. int index = start + i;
  1154. invalidate_device(MKDEV_SD_PARTITION(index), 1);
  1155. sd_gendisks->part[index].start_sect = 0;
  1156. sd_gendisks->part[index].nr_sects = 0;
  1157. /*
  1158.  * Reset the blocksize for everything so that we can read
  1159.  * the partition table.  Technically we will determine the
  1160.  * correct block size when we revalidate, but we do this just
  1161.  * to make sure that everything remains consistent.
  1162.  */
  1163. sd_blocksizes[index] = 1024;
  1164. if (rscsi_disks[target].device->sector_size == 2048)
  1165. sd_blocksizes[index] = 2048;
  1166. else
  1167. sd_blocksizes[index] = 1024;
  1168. }
  1169. #ifdef MAYBE_REINIT
  1170. MAYBE_REINIT;
  1171. #endif
  1172. grok_partitions(&SD_GENDISK(target), target % SCSI_DISKS_PER_MAJOR,
  1173. 1<<4, CAPACITY);
  1174. DEVICE_BUSY = 0;
  1175. return 0;
  1176. }
  1177. static int fop_revalidate_scsidisk(kdev_t dev)
  1178. {
  1179. return revalidate_scsidisk(dev, 0);
  1180. }
  1181. static void sd_detach(Scsi_Device * SDp)
  1182. {
  1183. Scsi_Disk *dpnt;
  1184. int i, j;
  1185. int max_p;
  1186. int start;
  1187. if (rscsi_disks == NULL)
  1188. return;
  1189. for (dpnt = rscsi_disks, i = 0; i < sd_template.dev_max; i++, dpnt++)
  1190. if (dpnt->device == SDp) {
  1191. /* If we are disconnecting a disk driver, sync and invalidate
  1192.  * everything */
  1193. max_p = sd_gendisk.max_p;
  1194. start = i << sd_gendisk.minor_shift;
  1195. for (j = max_p - 1; j >= 0; j--) {
  1196. int index = start + j;
  1197. invalidate_device(MKDEV_SD_PARTITION(index), 1);
  1198. sd_gendisks->part[index].start_sect = 0;
  1199. sd_gendisks->part[index].nr_sects = 0;
  1200. sd_sizes[index] = 0;
  1201. }
  1202.                         devfs_register_partitions (&SD_GENDISK (i),
  1203.                                                    SD_MINOR_NUMBER (start), 1);
  1204. /* unregister_disk() */
  1205. dpnt->has_part_table = 0;
  1206. dpnt->device = NULL;
  1207. dpnt->capacity = 0;
  1208. SDp->attached--;
  1209. sd_template.dev_noticed--;
  1210. sd_template.nr_dev--;
  1211. SD_GENDISK(i).nr_real--;
  1212. return;
  1213. }
  1214. return;
  1215. }
  1216. static int __init init_sd(void)
  1217. {
  1218. sd_template.module = THIS_MODULE;
  1219. return scsi_register_module(MODULE_SCSI_DEV, &sd_template);
  1220. }
  1221. static void __exit exit_sd(void)
  1222. {
  1223. int i;
  1224. scsi_unregister_module(MODULE_SCSI_DEV, &sd_template);
  1225. for (i = 0; i < N_USED_SD_MAJORS; i++)
  1226. devfs_unregister_blkdev(SD_MAJOR(i), "sd");
  1227. sd_registered--;
  1228. if (rscsi_disks != NULL) {
  1229. kfree(rscsi_disks);
  1230. kfree(sd_sizes);
  1231. kfree(sd_blocksizes);
  1232. kfree(sd_hardsizes);
  1233. kfree((char *) sd);
  1234. }
  1235. for (i = 0; i < N_USED_SD_MAJORS; i++) {
  1236. del_gendisk(&sd_gendisks[i]);
  1237. blk_size[SD_MAJOR(i)] = NULL;
  1238. hardsect_size[SD_MAJOR(i)] = NULL;
  1239. read_ahead[SD_MAJOR(i)] = 0;
  1240. }
  1241. sd_template.dev_max = 0;
  1242. if (sd_gendisks != &sd_gendisk)
  1243. kfree(sd_gendisks);
  1244. }
  1245. module_init(init_sd);
  1246. module_exit(exit_sd);
  1247. MODULE_LICENSE("GPL");