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

Linux/Unix编程

开发平台:

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