]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blob - drivers/scsi/sd.c
280d231a86ed378c8237cb079fb6163610a2a1f5
[linux-2.6-omap-h63xx.git] / drivers / scsi / sd.c
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  *      Modification history:
9  *       - Drew Eckhardt <drew@colorado.edu> original
10  *       - Eric Youngdale <eric@andante.org> add scatter-gather, multiple 
11  *         outstanding request, and other enhancements.
12  *         Support loadable low-level scsi drivers.
13  *       - Jirka Hanika <geo@ff.cuni.cz> support more scsi disks using 
14  *         eight major numbers.
15  *       - Richard Gooch <rgooch@atnf.csiro.au> support devfs.
16  *       - Torben Mathiasen <tmm@image.dk> Resource allocation fixes in 
17  *         sd_init and cleanups.
18  *       - Alex Davis <letmein@erols.com> Fix problem where partition info
19  *         not being read in sd_open. Fix problem where removable media 
20  *         could be ejected after sd_open.
21  *       - Douglas Gilbert <dgilbert@interlog.com> cleanup for lk 2.5.x
22  *       - Badari Pulavarty <pbadari@us.ibm.com>, Matthew Wilcox 
23  *         <willy@debian.org>, Kurt Garloff <garloff@suse.de>: 
24  *         Support 32k/1M disks.
25  *
26  *      Logging policy (needs CONFIG_SCSI_LOGGING defined):
27  *       - setting up transfer: SCSI_LOG_HLQUEUE levels 1 and 2
28  *       - end of transfer (bh + scsi_lib): SCSI_LOG_HLCOMPLETE level 1
29  *       - entering sd_ioctl: SCSI_LOG_IOCTL level 1
30  *       - entering other commands: SCSI_LOG_HLQUEUE level 3
31  *      Note: when the logging level is set by the user, it must be greater
32  *      than the level indicated above to trigger output.       
33  */
34
35 #include <linux/module.h>
36 #include <linux/fs.h>
37 #include <linux/kernel.h>
38 #include <linux/mm.h>
39 #include <linux/bio.h>
40 #include <linux/genhd.h>
41 #include <linux/hdreg.h>
42 #include <linux/errno.h>
43 #include <linux/idr.h>
44 #include <linux/interrupt.h>
45 #include <linux/init.h>
46 #include <linux/blkdev.h>
47 #include <linux/blkpg.h>
48 #include <linux/delay.h>
49 #include <linux/mutex.h>
50 #include <asm/uaccess.h>
51
52 #include <scsi/scsi.h>
53 #include <scsi/scsi_cmnd.h>
54 #include <scsi/scsi_dbg.h>
55 #include <scsi/scsi_device.h>
56 #include <scsi/scsi_driver.h>
57 #include <scsi/scsi_eh.h>
58 #include <scsi/scsi_host.h>
59 #include <scsi/scsi_ioctl.h>
60 #include <scsi/scsicam.h>
61
62 #include "sd.h"
63 #include "scsi_logging.h"
64
65 MODULE_AUTHOR("Eric Youngdale");
66 MODULE_DESCRIPTION("SCSI disk (sd) driver");
67 MODULE_LICENSE("GPL");
68
69 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK0_MAJOR);
70 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK1_MAJOR);
71 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK2_MAJOR);
72 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK3_MAJOR);
73 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK4_MAJOR);
74 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK5_MAJOR);
75 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK6_MAJOR);
76 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK7_MAJOR);
77 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK8_MAJOR);
78 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK9_MAJOR);
79 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK10_MAJOR);
80 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK11_MAJOR);
81 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK12_MAJOR);
82 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK13_MAJOR);
83 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK14_MAJOR);
84 MODULE_ALIAS_BLOCKDEV_MAJOR(SCSI_DISK15_MAJOR);
85 MODULE_ALIAS_SCSI_DEVICE(TYPE_DISK);
86 MODULE_ALIAS_SCSI_DEVICE(TYPE_MOD);
87 MODULE_ALIAS_SCSI_DEVICE(TYPE_RBC);
88
89 #define SD_PARTS        64
90
91 #if !defined(CONFIG_DEBUG_BLOCK_EXT_DEVT)
92 #define SD_MINORS       16
93 #else
94 #define SD_MINORS       1
95 #endif
96
97 #define SD_EXT_MINORS   (SD_PARTS - SD_MINORS)
98
99 static int  sd_revalidate_disk(struct gendisk *);
100 static int  sd_probe(struct device *);
101 static int  sd_remove(struct device *);
102 static void sd_shutdown(struct device *);
103 static int sd_suspend(struct device *, pm_message_t state);
104 static int sd_resume(struct device *);
105 static void sd_rescan(struct device *);
106 static int sd_done(struct scsi_cmnd *);
107 static void sd_read_capacity(struct scsi_disk *sdkp, unsigned char *buffer);
108 static void scsi_disk_release(struct device *cdev);
109 static void sd_print_sense_hdr(struct scsi_disk *, struct scsi_sense_hdr *);
110 static void sd_print_result(struct scsi_disk *, int);
111
112 static DEFINE_IDA(sd_index_ida);
113
114 /* This semaphore is used to mediate the 0->1 reference get in the
115  * face of object destruction (i.e. we can't allow a get on an
116  * object after last put) */
117 static DEFINE_MUTEX(sd_ref_mutex);
118
119 static const char *sd_cache_types[] = {
120         "write through", "none", "write back",
121         "write back, no read (daft)"
122 };
123
124 static ssize_t
125 sd_store_cache_type(struct device *dev, struct device_attribute *attr,
126                     const char *buf, size_t count)
127 {
128         int i, ct = -1, rcd, wce, sp;
129         struct scsi_disk *sdkp = to_scsi_disk(dev);
130         struct scsi_device *sdp = sdkp->device;
131         char buffer[64];
132         char *buffer_data;
133         struct scsi_mode_data data;
134         struct scsi_sense_hdr sshdr;
135         int len;
136
137         if (sdp->type != TYPE_DISK)
138                 /* no cache control on RBC devices; theoretically they
139                  * can do it, but there's probably so many exceptions
140                  * it's not worth the risk */
141                 return -EINVAL;
142
143         for (i = 0; i < ARRAY_SIZE(sd_cache_types); i++) {
144                 const int len = strlen(sd_cache_types[i]);
145                 if (strncmp(sd_cache_types[i], buf, len) == 0 &&
146                     buf[len] == '\n') {
147                         ct = i;
148                         break;
149                 }
150         }
151         if (ct < 0)
152                 return -EINVAL;
153         rcd = ct & 0x01 ? 1 : 0;
154         wce = ct & 0x02 ? 1 : 0;
155         if (scsi_mode_sense(sdp, 0x08, 8, buffer, sizeof(buffer), SD_TIMEOUT,
156                             SD_MAX_RETRIES, &data, NULL))
157                 return -EINVAL;
158         len = min_t(size_t, sizeof(buffer), data.length - data.header_length -
159                   data.block_descriptor_length);
160         buffer_data = buffer + data.header_length +
161                 data.block_descriptor_length;
162         buffer_data[2] &= ~0x05;
163         buffer_data[2] |= wce << 2 | rcd;
164         sp = buffer_data[0] & 0x80 ? 1 : 0;
165
166         if (scsi_mode_select(sdp, 1, sp, 8, buffer_data, len, SD_TIMEOUT,
167                              SD_MAX_RETRIES, &data, &sshdr)) {
168                 if (scsi_sense_valid(&sshdr))
169                         sd_print_sense_hdr(sdkp, &sshdr);
170                 return -EINVAL;
171         }
172         sd_revalidate_disk(sdkp->disk);
173         return count;
174 }
175
176 static ssize_t
177 sd_store_manage_start_stop(struct device *dev, struct device_attribute *attr,
178                            const char *buf, size_t count)
179 {
180         struct scsi_disk *sdkp = to_scsi_disk(dev);
181         struct scsi_device *sdp = sdkp->device;
182
183         if (!capable(CAP_SYS_ADMIN))
184                 return -EACCES;
185
186         sdp->manage_start_stop = simple_strtoul(buf, NULL, 10);
187
188         return count;
189 }
190
191 static ssize_t
192 sd_store_allow_restart(struct device *dev, struct device_attribute *attr,
193                        const char *buf, size_t count)
194 {
195         struct scsi_disk *sdkp = to_scsi_disk(dev);
196         struct scsi_device *sdp = sdkp->device;
197
198         if (!capable(CAP_SYS_ADMIN))
199                 return -EACCES;
200
201         if (sdp->type != TYPE_DISK)
202                 return -EINVAL;
203
204         sdp->allow_restart = simple_strtoul(buf, NULL, 10);
205
206         return count;
207 }
208
209 static ssize_t
210 sd_show_cache_type(struct device *dev, struct device_attribute *attr,
211                    char *buf)
212 {
213         struct scsi_disk *sdkp = to_scsi_disk(dev);
214         int ct = sdkp->RCD + 2*sdkp->WCE;
215
216         return snprintf(buf, 40, "%s\n", sd_cache_types[ct]);
217 }
218
219 static ssize_t
220 sd_show_fua(struct device *dev, struct device_attribute *attr, char *buf)
221 {
222         struct scsi_disk *sdkp = to_scsi_disk(dev);
223
224         return snprintf(buf, 20, "%u\n", sdkp->DPOFUA);
225 }
226
227 static ssize_t
228 sd_show_manage_start_stop(struct device *dev, struct device_attribute *attr,
229                           char *buf)
230 {
231         struct scsi_disk *sdkp = to_scsi_disk(dev);
232         struct scsi_device *sdp = sdkp->device;
233
234         return snprintf(buf, 20, "%u\n", sdp->manage_start_stop);
235 }
236
237 static ssize_t
238 sd_show_allow_restart(struct device *dev, struct device_attribute *attr,
239                       char *buf)
240 {
241         struct scsi_disk *sdkp = to_scsi_disk(dev);
242
243         return snprintf(buf, 40, "%d\n", sdkp->device->allow_restart);
244 }
245
246 static ssize_t
247 sd_show_protection_type(struct device *dev, struct device_attribute *attr,
248                         char *buf)
249 {
250         struct scsi_disk *sdkp = to_scsi_disk(dev);
251
252         return snprintf(buf, 20, "%u\n", sdkp->protection_type);
253 }
254
255 static ssize_t
256 sd_show_app_tag_own(struct device *dev, struct device_attribute *attr,
257                     char *buf)
258 {
259         struct scsi_disk *sdkp = to_scsi_disk(dev);
260
261         return snprintf(buf, 20, "%u\n", sdkp->ATO);
262 }
263
264 static struct device_attribute sd_disk_attrs[] = {
265         __ATTR(cache_type, S_IRUGO|S_IWUSR, sd_show_cache_type,
266                sd_store_cache_type),
267         __ATTR(FUA, S_IRUGO, sd_show_fua, NULL),
268         __ATTR(allow_restart, S_IRUGO|S_IWUSR, sd_show_allow_restart,
269                sd_store_allow_restart),
270         __ATTR(manage_start_stop, S_IRUGO|S_IWUSR, sd_show_manage_start_stop,
271                sd_store_manage_start_stop),
272         __ATTR(protection_type, S_IRUGO, sd_show_protection_type, NULL),
273         __ATTR(app_tag_own, S_IRUGO, sd_show_app_tag_own, NULL),
274         __ATTR_NULL,
275 };
276
277 static struct class sd_disk_class = {
278         .name           = "scsi_disk",
279         .owner          = THIS_MODULE,
280         .dev_release    = scsi_disk_release,
281         .dev_attrs      = sd_disk_attrs,
282 };
283
284 static struct scsi_driver sd_template = {
285         .owner                  = THIS_MODULE,
286         .gendrv = {
287                 .name           = "sd",
288                 .probe          = sd_probe,
289                 .remove         = sd_remove,
290                 .suspend        = sd_suspend,
291                 .resume         = sd_resume,
292                 .shutdown       = sd_shutdown,
293         },
294         .rescan                 = sd_rescan,
295         .done                   = sd_done,
296 };
297
298 /*
299  * Device no to disk mapping:
300  * 
301  *       major         disc2     disc  p1
302  *   |............|.............|....|....| <- dev_t
303  *    31        20 19          8 7  4 3  0
304  * 
305  * Inside a major, we have 16k disks, however mapped non-
306  * contiguously. The first 16 disks are for major0, the next
307  * ones with major1, ... Disk 256 is for major0 again, disk 272 
308  * for major1, ... 
309  * As we stay compatible with our numbering scheme, we can reuse 
310  * the well-know SCSI majors 8, 65--71, 136--143.
311  */
312 static int sd_major(int major_idx)
313 {
314         switch (major_idx) {
315         case 0:
316                 return SCSI_DISK0_MAJOR;
317         case 1 ... 7:
318                 return SCSI_DISK1_MAJOR + major_idx - 1;
319         case 8 ... 15:
320                 return SCSI_DISK8_MAJOR + major_idx - 8;
321         default:
322                 BUG();
323                 return 0;       /* shut up gcc */
324         }
325 }
326
327 static struct scsi_disk *__scsi_disk_get(struct gendisk *disk)
328 {
329         struct scsi_disk *sdkp = NULL;
330
331         if (disk->private_data) {
332                 sdkp = scsi_disk(disk);
333                 if (scsi_device_get(sdkp->device) == 0)
334                         get_device(&sdkp->dev);
335                 else
336                         sdkp = NULL;
337         }
338         return sdkp;
339 }
340
341 static struct scsi_disk *scsi_disk_get(struct gendisk *disk)
342 {
343         struct scsi_disk *sdkp;
344
345         mutex_lock(&sd_ref_mutex);
346         sdkp = __scsi_disk_get(disk);
347         mutex_unlock(&sd_ref_mutex);
348         return sdkp;
349 }
350
351 static struct scsi_disk *scsi_disk_get_from_dev(struct device *dev)
352 {
353         struct scsi_disk *sdkp;
354
355         mutex_lock(&sd_ref_mutex);
356         sdkp = dev_get_drvdata(dev);
357         if (sdkp)
358                 sdkp = __scsi_disk_get(sdkp->disk);
359         mutex_unlock(&sd_ref_mutex);
360         return sdkp;
361 }
362
363 static void scsi_disk_put(struct scsi_disk *sdkp)
364 {
365         struct scsi_device *sdev = sdkp->device;
366
367         mutex_lock(&sd_ref_mutex);
368         put_device(&sdkp->dev);
369         scsi_device_put(sdev);
370         mutex_unlock(&sd_ref_mutex);
371 }
372
373 /**
374  *      sd_init_command - build a scsi (read or write) command from
375  *      information in the request structure.
376  *      @SCpnt: pointer to mid-level's per scsi command structure that
377  *      contains request and into which the scsi command is written
378  *
379  *      Returns 1 if successful and 0 if error (or cannot be done now).
380  **/
381 static int sd_prep_fn(struct request_queue *q, struct request *rq)
382 {
383         struct scsi_cmnd *SCpnt;
384         struct scsi_device *sdp = q->queuedata;
385         struct gendisk *disk = rq->rq_disk;
386         struct scsi_disk *sdkp;
387         sector_t block = rq->sector;
388         sector_t threshold;
389         unsigned int this_count = rq->nr_sectors;
390         unsigned int timeout = sdp->timeout;
391         int ret;
392
393         if (rq->cmd_type == REQ_TYPE_BLOCK_PC) {
394                 ret = scsi_setup_blk_pc_cmnd(sdp, rq);
395                 goto out;
396         } else if (rq->cmd_type != REQ_TYPE_FS) {
397                 ret = BLKPREP_KILL;
398                 goto out;
399         }
400         ret = scsi_setup_fs_cmnd(sdp, rq);
401         if (ret != BLKPREP_OK)
402                 goto out;
403         SCpnt = rq->special;
404         sdkp = scsi_disk(disk);
405
406         /* from here on until we're complete, any goto out
407          * is used for a killable error condition */
408         ret = BLKPREP_KILL;
409
410         SCSI_LOG_HLQUEUE(1, scmd_printk(KERN_INFO, SCpnt,
411                                         "sd_init_command: block=%llu, "
412                                         "count=%d\n",
413                                         (unsigned long long)block,
414                                         this_count));
415
416         if (!sdp || !scsi_device_online(sdp) ||
417             block + rq->nr_sectors > get_capacity(disk)) {
418                 SCSI_LOG_HLQUEUE(2, scmd_printk(KERN_INFO, SCpnt,
419                                                 "Finishing %ld sectors\n",
420                                                 rq->nr_sectors));
421                 SCSI_LOG_HLQUEUE(2, scmd_printk(KERN_INFO, SCpnt,
422                                                 "Retry with 0x%p\n", SCpnt));
423                 goto out;
424         }
425
426         if (sdp->changed) {
427                 /*
428                  * quietly refuse to do anything to a changed disc until 
429                  * the changed bit has been reset
430                  */
431                 /* printk("SCSI disk has been changed. Prohibiting further I/O.\n"); */
432                 goto out;
433         }
434
435         /*
436          * Some SD card readers can't handle multi-sector accesses which touch
437          * the last one or two hardware sectors.  Split accesses as needed.
438          */
439         threshold = get_capacity(disk) - SD_LAST_BUGGY_SECTORS *
440                 (sdp->sector_size / 512);
441
442         if (unlikely(sdp->last_sector_bug && block + this_count > threshold)) {
443                 if (block < threshold) {
444                         /* Access up to the threshold but not beyond */
445                         this_count = threshold - block;
446                 } else {
447                         /* Access only a single hardware sector */
448                         this_count = sdp->sector_size / 512;
449                 }
450         }
451
452         SCSI_LOG_HLQUEUE(2, scmd_printk(KERN_INFO, SCpnt, "block=%llu\n",
453                                         (unsigned long long)block));
454
455         /*
456          * If we have a 1K hardware sectorsize, prevent access to single
457          * 512 byte sectors.  In theory we could handle this - in fact
458          * the scsi cdrom driver must be able to handle this because
459          * we typically use 1K blocksizes, and cdroms typically have
460          * 2K hardware sectorsizes.  Of course, things are simpler
461          * with the cdrom, since it is read-only.  For performance
462          * reasons, the filesystems should be able to handle this
463          * and not force the scsi disk driver to use bounce buffers
464          * for this.
465          */
466         if (sdp->sector_size == 1024) {
467                 if ((block & 1) || (rq->nr_sectors & 1)) {
468                         scmd_printk(KERN_ERR, SCpnt,
469                                     "Bad block number requested\n");
470                         goto out;
471                 } else {
472                         block = block >> 1;
473                         this_count = this_count >> 1;
474                 }
475         }
476         if (sdp->sector_size == 2048) {
477                 if ((block & 3) || (rq->nr_sectors & 3)) {
478                         scmd_printk(KERN_ERR, SCpnt,
479                                     "Bad block number requested\n");
480                         goto out;
481                 } else {
482                         block = block >> 2;
483                         this_count = this_count >> 2;
484                 }
485         }
486         if (sdp->sector_size == 4096) {
487                 if ((block & 7) || (rq->nr_sectors & 7)) {
488                         scmd_printk(KERN_ERR, SCpnt,
489                                     "Bad block number requested\n");
490                         goto out;
491                 } else {
492                         block = block >> 3;
493                         this_count = this_count >> 3;
494                 }
495         }
496         if (rq_data_dir(rq) == WRITE) {
497                 if (!sdp->writeable) {
498                         goto out;
499                 }
500                 SCpnt->cmnd[0] = WRITE_6;
501                 SCpnt->sc_data_direction = DMA_TO_DEVICE;
502
503                 if (blk_integrity_rq(rq) &&
504                     sd_dif_prepare(rq, block, sdp->sector_size) == -EIO)
505                         goto out;
506
507         } else if (rq_data_dir(rq) == READ) {
508                 SCpnt->cmnd[0] = READ_6;
509                 SCpnt->sc_data_direction = DMA_FROM_DEVICE;
510         } else {
511                 scmd_printk(KERN_ERR, SCpnt, "Unknown command %x\n", rq->cmd_flags);
512                 goto out;
513         }
514
515         SCSI_LOG_HLQUEUE(2, scmd_printk(KERN_INFO, SCpnt,
516                                         "%s %d/%ld 512 byte blocks.\n",
517                                         (rq_data_dir(rq) == WRITE) ?
518                                         "writing" : "reading", this_count,
519                                         rq->nr_sectors));
520
521         /* Set RDPROTECT/WRPROTECT if disk is formatted with DIF */
522         if (scsi_host_dif_capable(sdp->host, sdkp->protection_type))
523                 SCpnt->cmnd[1] = 1 << 5;
524         else
525                 SCpnt->cmnd[1] = 0;
526
527         if (block > 0xffffffff) {
528                 SCpnt->cmnd[0] += READ_16 - READ_6;
529                 SCpnt->cmnd[1] |= blk_fua_rq(rq) ? 0x8 : 0;
530                 SCpnt->cmnd[2] = sizeof(block) > 4 ? (unsigned char) (block >> 56) & 0xff : 0;
531                 SCpnt->cmnd[3] = sizeof(block) > 4 ? (unsigned char) (block >> 48) & 0xff : 0;
532                 SCpnt->cmnd[4] = sizeof(block) > 4 ? (unsigned char) (block >> 40) & 0xff : 0;
533                 SCpnt->cmnd[5] = sizeof(block) > 4 ? (unsigned char) (block >> 32) & 0xff : 0;
534                 SCpnt->cmnd[6] = (unsigned char) (block >> 24) & 0xff;
535                 SCpnt->cmnd[7] = (unsigned char) (block >> 16) & 0xff;
536                 SCpnt->cmnd[8] = (unsigned char) (block >> 8) & 0xff;
537                 SCpnt->cmnd[9] = (unsigned char) block & 0xff;
538                 SCpnt->cmnd[10] = (unsigned char) (this_count >> 24) & 0xff;
539                 SCpnt->cmnd[11] = (unsigned char) (this_count >> 16) & 0xff;
540                 SCpnt->cmnd[12] = (unsigned char) (this_count >> 8) & 0xff;
541                 SCpnt->cmnd[13] = (unsigned char) this_count & 0xff;
542                 SCpnt->cmnd[14] = SCpnt->cmnd[15] = 0;
543         } else if ((this_count > 0xff) || (block > 0x1fffff) ||
544                    scsi_device_protection(SCpnt->device) ||
545                    SCpnt->device->use_10_for_rw) {
546                 if (this_count > 0xffff)
547                         this_count = 0xffff;
548
549                 SCpnt->cmnd[0] += READ_10 - READ_6;
550                 SCpnt->cmnd[1] |= blk_fua_rq(rq) ? 0x8 : 0;
551                 SCpnt->cmnd[2] = (unsigned char) (block >> 24) & 0xff;
552                 SCpnt->cmnd[3] = (unsigned char) (block >> 16) & 0xff;
553                 SCpnt->cmnd[4] = (unsigned char) (block >> 8) & 0xff;
554                 SCpnt->cmnd[5] = (unsigned char) block & 0xff;
555                 SCpnt->cmnd[6] = SCpnt->cmnd[9] = 0;
556                 SCpnt->cmnd[7] = (unsigned char) (this_count >> 8) & 0xff;
557                 SCpnt->cmnd[8] = (unsigned char) this_count & 0xff;
558         } else {
559                 if (unlikely(blk_fua_rq(rq))) {
560                         /*
561                          * This happens only if this drive failed
562                          * 10byte rw command with ILLEGAL_REQUEST
563                          * during operation and thus turned off
564                          * use_10_for_rw.
565                          */
566                         scmd_printk(KERN_ERR, SCpnt,
567                                     "FUA write on READ/WRITE(6) drive\n");
568                         goto out;
569                 }
570
571                 SCpnt->cmnd[1] |= (unsigned char) ((block >> 16) & 0x1f);
572                 SCpnt->cmnd[2] = (unsigned char) ((block >> 8) & 0xff);
573                 SCpnt->cmnd[3] = (unsigned char) block & 0xff;
574                 SCpnt->cmnd[4] = (unsigned char) this_count;
575                 SCpnt->cmnd[5] = 0;
576         }
577         SCpnt->sdb.length = this_count * sdp->sector_size;
578
579         /* If DIF or DIX is enabled, tell HBA how to handle request */
580         if (sdkp->protection_type || scsi_prot_sg_count(SCpnt))
581                 sd_dif_op(SCpnt, sdkp->protection_type, scsi_prot_sg_count(SCpnt));
582
583         /*
584          * We shouldn't disconnect in the middle of a sector, so with a dumb
585          * host adapter, it's safe to assume that we can at least transfer
586          * this many bytes between each connect / disconnect.
587          */
588         SCpnt->transfersize = sdp->sector_size;
589         SCpnt->underflow = this_count << 9;
590         SCpnt->allowed = SD_MAX_RETRIES;
591         SCpnt->timeout_per_command = timeout;
592
593         /*
594          * This indicates that the command is ready from our end to be
595          * queued.
596          */
597         ret = BLKPREP_OK;
598  out:
599         return scsi_prep_return(q, rq, ret);
600 }
601
602 /**
603  *      sd_open - open a scsi disk device
604  *      @inode: only i_rdev member may be used
605  *      @filp: only f_mode and f_flags may be used
606  *
607  *      Returns 0 if successful. Returns a negated errno value in case 
608  *      of error.
609  *
610  *      Note: This can be called from a user context (e.g. fsck(1) )
611  *      or from within the kernel (e.g. as a result of a mount(1) ).
612  *      In the latter case @inode and @filp carry an abridged amount
613  *      of information as noted above.
614  **/
615 static int sd_open(struct inode *inode, struct file *filp)
616 {
617         struct gendisk *disk = inode->i_bdev->bd_disk;
618         struct scsi_disk *sdkp;
619         struct scsi_device *sdev;
620         int retval;
621
622         if (!(sdkp = scsi_disk_get(disk)))
623                 return -ENXIO;
624
625
626         SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp, "sd_open\n"));
627
628         sdev = sdkp->device;
629
630         /*
631          * If the device is in error recovery, wait until it is done.
632          * If the device is offline, then disallow any access to it.
633          */
634         retval = -ENXIO;
635         if (!scsi_block_when_processing_errors(sdev))
636                 goto error_out;
637
638         if (sdev->removable || sdkp->write_prot)
639                 check_disk_change(inode->i_bdev);
640
641         /*
642          * If the drive is empty, just let the open fail.
643          */
644         retval = -ENOMEDIUM;
645         if (sdev->removable && !sdkp->media_present &&
646             !(filp->f_flags & O_NDELAY))
647                 goto error_out;
648
649         /*
650          * If the device has the write protect tab set, have the open fail
651          * if the user expects to be able to write to the thing.
652          */
653         retval = -EROFS;
654         if (sdkp->write_prot && (filp->f_mode & FMODE_WRITE))
655                 goto error_out;
656
657         /*
658          * It is possible that the disk changing stuff resulted in
659          * the device being taken offline.  If this is the case,
660          * report this to the user, and don't pretend that the
661          * open actually succeeded.
662          */
663         retval = -ENXIO;
664         if (!scsi_device_online(sdev))
665                 goto error_out;
666
667         if (!sdkp->openers++ && sdev->removable) {
668                 if (scsi_block_when_processing_errors(sdev))
669                         scsi_set_medium_removal(sdev, SCSI_REMOVAL_PREVENT);
670         }
671
672         return 0;
673
674 error_out:
675         scsi_disk_put(sdkp);
676         return retval;  
677 }
678
679 /**
680  *      sd_release - invoked when the (last) close(2) is called on this
681  *      scsi disk.
682  *      @inode: only i_rdev member may be used
683  *      @filp: only f_mode and f_flags may be used
684  *
685  *      Returns 0. 
686  *
687  *      Note: may block (uninterruptible) if error recovery is underway
688  *      on this disk.
689  **/
690 static int sd_release(struct inode *inode, struct file *filp)
691 {
692         struct gendisk *disk = inode->i_bdev->bd_disk;
693         struct scsi_disk *sdkp = scsi_disk(disk);
694         struct scsi_device *sdev = sdkp->device;
695
696         SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp, "sd_release\n"));
697
698         if (!--sdkp->openers && sdev->removable) {
699                 if (scsi_block_when_processing_errors(sdev))
700                         scsi_set_medium_removal(sdev, SCSI_REMOVAL_ALLOW);
701         }
702
703         /*
704          * XXX and what if there are packets in flight and this close()
705          * XXX is followed by a "rmmod sd_mod"?
706          */
707         scsi_disk_put(sdkp);
708         return 0;
709 }
710
711 static int sd_getgeo(struct block_device *bdev, struct hd_geometry *geo)
712 {
713         struct scsi_disk *sdkp = scsi_disk(bdev->bd_disk);
714         struct scsi_device *sdp = sdkp->device;
715         struct Scsi_Host *host = sdp->host;
716         int diskinfo[4];
717
718         /* default to most commonly used values */
719         diskinfo[0] = 0x40;     /* 1 << 6 */
720         diskinfo[1] = 0x20;     /* 1 << 5 */
721         diskinfo[2] = sdkp->capacity >> 11;
722         
723         /* override with calculated, extended default, or driver values */
724         if (host->hostt->bios_param)
725                 host->hostt->bios_param(sdp, bdev, sdkp->capacity, diskinfo);
726         else
727                 scsicam_bios_param(bdev, sdkp->capacity, diskinfo);
728
729         geo->heads = diskinfo[0];
730         geo->sectors = diskinfo[1];
731         geo->cylinders = diskinfo[2];
732         return 0;
733 }
734
735 /**
736  *      sd_ioctl - process an ioctl
737  *      @inode: only i_rdev/i_bdev members may be used
738  *      @filp: only f_mode and f_flags may be used
739  *      @cmd: ioctl command number
740  *      @arg: this is third argument given to ioctl(2) system call.
741  *      Often contains a pointer.
742  *
743  *      Returns 0 if successful (some ioctls return postive numbers on
744  *      success as well). Returns a negated errno value in case of error.
745  *
746  *      Note: most ioctls are forward onto the block subsystem or further
747  *      down in the scsi subsystem.
748  **/
749 static int sd_ioctl(struct inode * inode, struct file * filp, 
750                     unsigned int cmd, unsigned long arg)
751 {
752         struct block_device *bdev = inode->i_bdev;
753         struct gendisk *disk = bdev->bd_disk;
754         struct scsi_device *sdp = scsi_disk(disk)->device;
755         void __user *p = (void __user *)arg;
756         int error;
757     
758         SCSI_LOG_IOCTL(1, printk("sd_ioctl: disk=%s, cmd=0x%x\n",
759                                                 disk->disk_name, cmd));
760
761         /*
762          * If we are in the middle of error recovery, don't let anyone
763          * else try and use this device.  Also, if error recovery fails, it
764          * may try and take the device offline, in which case all further
765          * access to the device is prohibited.
766          */
767         error = scsi_nonblockable_ioctl(sdp, cmd, p, filp);
768         if (!scsi_block_when_processing_errors(sdp) || !error)
769                 return error;
770
771         /*
772          * Send SCSI addressing ioctls directly to mid level, send other
773          * ioctls to block level and then onto mid level if they can't be
774          * resolved.
775          */
776         switch (cmd) {
777                 case SCSI_IOCTL_GET_IDLUN:
778                 case SCSI_IOCTL_GET_BUS_NUMBER:
779                         return scsi_ioctl(sdp, cmd, p);
780                 default:
781                         error = scsi_cmd_ioctl(filp, disk->queue, disk, cmd, p);
782                         if (error != -ENOTTY)
783                                 return error;
784         }
785         return scsi_ioctl(sdp, cmd, p);
786 }
787
788 static void set_media_not_present(struct scsi_disk *sdkp)
789 {
790         sdkp->media_present = 0;
791         sdkp->capacity = 0;
792         sdkp->device->changed = 1;
793 }
794
795 /**
796  *      sd_media_changed - check if our medium changed
797  *      @disk: kernel device descriptor 
798  *
799  *      Returns 0 if not applicable or no change; 1 if change
800  *
801  *      Note: this function is invoked from the block subsystem.
802  **/
803 static int sd_media_changed(struct gendisk *disk)
804 {
805         struct scsi_disk *sdkp = scsi_disk(disk);
806         struct scsi_device *sdp = sdkp->device;
807         struct scsi_sense_hdr *sshdr = NULL;
808         int retval;
809
810         SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp, "sd_media_changed\n"));
811
812         if (!sdp->removable)
813                 return 0;
814
815         /*
816          * If the device is offline, don't send any commands - just pretend as
817          * if the command failed.  If the device ever comes back online, we
818          * can deal with it then.  It is only because of unrecoverable errors
819          * that we would ever take a device offline in the first place.
820          */
821         if (!scsi_device_online(sdp)) {
822                 set_media_not_present(sdkp);
823                 retval = 1;
824                 goto out;
825         }
826
827         /*
828          * Using TEST_UNIT_READY enables differentiation between drive with
829          * no cartridge loaded - NOT READY, drive with changed cartridge -
830          * UNIT ATTENTION, or with same cartridge - GOOD STATUS.
831          *
832          * Drives that auto spin down. eg iomega jaz 1G, will be started
833          * by sd_spinup_disk() from sd_revalidate_disk(), which happens whenever
834          * sd_revalidate() is called.
835          */
836         retval = -ENODEV;
837
838         if (scsi_block_when_processing_errors(sdp)) {
839                 sshdr  = kzalloc(sizeof(*sshdr), GFP_KERNEL);
840                 retval = scsi_test_unit_ready(sdp, SD_TIMEOUT, SD_MAX_RETRIES,
841                                               sshdr);
842         }
843
844         /*
845          * Unable to test, unit probably not ready.   This usually
846          * means there is no disc in the drive.  Mark as changed,
847          * and we will figure it out later once the drive is
848          * available again.
849          */
850         if (retval || (scsi_sense_valid(sshdr) &&
851                        /* 0x3a is medium not present */
852                        sshdr->asc == 0x3a)) {
853                 set_media_not_present(sdkp);
854                 retval = 1;
855                 goto out;
856         }
857
858         /*
859          * For removable scsi disk we have to recognise the presence
860          * of a disk in the drive. This is kept in the struct scsi_disk
861          * struct and tested at open !  Daniel Roche (dan@lectra.fr)
862          */
863         sdkp->media_present = 1;
864
865         retval = sdp->changed;
866         sdp->changed = 0;
867 out:
868         if (retval != sdkp->previous_state)
869                 sdev_evt_send_simple(sdp, SDEV_EVT_MEDIA_CHANGE, GFP_KERNEL);
870         sdkp->previous_state = retval;
871         kfree(sshdr);
872         return retval;
873 }
874
875 static int sd_sync_cache(struct scsi_disk *sdkp)
876 {
877         int retries, res;
878         struct scsi_device *sdp = sdkp->device;
879         struct scsi_sense_hdr sshdr;
880
881         if (!scsi_device_online(sdp))
882                 return -ENODEV;
883
884
885         for (retries = 3; retries > 0; --retries) {
886                 unsigned char cmd[10] = { 0 };
887
888                 cmd[0] = SYNCHRONIZE_CACHE;
889                 /*
890                  * Leave the rest of the command zero to indicate
891                  * flush everything.
892                  */
893                 res = scsi_execute_req(sdp, cmd, DMA_NONE, NULL, 0, &sshdr,
894                                        SD_TIMEOUT, SD_MAX_RETRIES);
895                 if (res == 0)
896                         break;
897         }
898
899         if (res) {
900                 sd_print_result(sdkp, res);
901                 if (driver_byte(res) & DRIVER_SENSE)
902                         sd_print_sense_hdr(sdkp, &sshdr);
903         }
904
905         if (res)
906                 return -EIO;
907         return 0;
908 }
909
910 static void sd_prepare_flush(struct request_queue *q, struct request *rq)
911 {
912         rq->cmd_type = REQ_TYPE_BLOCK_PC;
913         rq->timeout = SD_TIMEOUT;
914         rq->cmd[0] = SYNCHRONIZE_CACHE;
915         rq->cmd_len = 10;
916 }
917
918 static void sd_rescan(struct device *dev)
919 {
920         struct scsi_disk *sdkp = scsi_disk_get_from_dev(dev);
921
922         if (sdkp) {
923                 sd_revalidate_disk(sdkp->disk);
924                 scsi_disk_put(sdkp);
925         }
926 }
927
928
929 #ifdef CONFIG_COMPAT
930 /* 
931  * This gets directly called from VFS. When the ioctl 
932  * is not recognized we go back to the other translation paths. 
933  */
934 static long sd_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
935 {
936         struct block_device *bdev = file->f_path.dentry->d_inode->i_bdev;
937         struct gendisk *disk = bdev->bd_disk;
938         struct scsi_device *sdev = scsi_disk(disk)->device;
939
940         /*
941          * If we are in the middle of error recovery, don't let anyone
942          * else try and use this device.  Also, if error recovery fails, it
943          * may try and take the device offline, in which case all further
944          * access to the device is prohibited.
945          */
946         if (!scsi_block_when_processing_errors(sdev))
947                 return -ENODEV;
948                
949         if (sdev->host->hostt->compat_ioctl) {
950                 int ret;
951
952                 ret = sdev->host->hostt->compat_ioctl(sdev, cmd, (void __user *)arg);
953
954                 return ret;
955         }
956
957         /* 
958          * Let the static ioctl translation table take care of it.
959          */
960         return -ENOIOCTLCMD; 
961 }
962 #endif
963
964 static struct block_device_operations sd_fops = {
965         .owner                  = THIS_MODULE,
966         .open                   = sd_open,
967         .release                = sd_release,
968         .ioctl                  = sd_ioctl,
969         .getgeo                 = sd_getgeo,
970 #ifdef CONFIG_COMPAT
971         .compat_ioctl           = sd_compat_ioctl,
972 #endif
973         .media_changed          = sd_media_changed,
974         .revalidate_disk        = sd_revalidate_disk,
975 };
976
977 static unsigned int sd_completed_bytes(struct scsi_cmnd *scmd)
978 {
979         u64 start_lba = scmd->request->sector;
980         u64 end_lba = scmd->request->sector + (scsi_bufflen(scmd) / 512);
981         u64 bad_lba;
982         int info_valid;
983
984         if (!blk_fs_request(scmd->request))
985                 return 0;
986
987         info_valid = scsi_get_sense_info_fld(scmd->sense_buffer,
988                                              SCSI_SENSE_BUFFERSIZE,
989                                              &bad_lba);
990         if (!info_valid)
991                 return 0;
992
993         if (scsi_bufflen(scmd) <= scmd->device->sector_size)
994                 return 0;
995
996         if (scmd->device->sector_size < 512) {
997                 /* only legitimate sector_size here is 256 */
998                 start_lba <<= 1;
999                 end_lba <<= 1;
1000         } else {
1001                 /* be careful ... don't want any overflows */
1002                 u64 factor = scmd->device->sector_size / 512;
1003                 do_div(start_lba, factor);
1004                 do_div(end_lba, factor);
1005         }
1006
1007         /* The bad lba was reported incorrectly, we have no idea where
1008          * the error is.
1009          */
1010         if (bad_lba < start_lba  || bad_lba >= end_lba)
1011                 return 0;
1012
1013         /* This computation should always be done in terms of
1014          * the resolution of the device's medium.
1015          */
1016         return (bad_lba - start_lba) * scmd->device->sector_size;
1017 }
1018
1019 /**
1020  *      sd_done - bottom half handler: called when the lower level
1021  *      driver has completed (successfully or otherwise) a scsi command.
1022  *      @SCpnt: mid-level's per command structure.
1023  *
1024  *      Note: potentially run from within an ISR. Must not block.
1025  **/
1026 static int sd_done(struct scsi_cmnd *SCpnt)
1027 {
1028         int result = SCpnt->result;
1029         unsigned int good_bytes = result ? 0 : scsi_bufflen(SCpnt);
1030         struct scsi_sense_hdr sshdr;
1031         int sense_valid = 0;
1032         int sense_deferred = 0;
1033
1034         if (result) {
1035                 sense_valid = scsi_command_normalize_sense(SCpnt, &sshdr);
1036                 if (sense_valid)
1037                         sense_deferred = scsi_sense_is_deferred(&sshdr);
1038         }
1039 #ifdef CONFIG_SCSI_LOGGING
1040         SCSI_LOG_HLCOMPLETE(1, scsi_print_result(SCpnt));
1041         if (sense_valid) {
1042                 SCSI_LOG_HLCOMPLETE(1, scmd_printk(KERN_INFO, SCpnt,
1043                                                    "sd_done: sb[respc,sk,asc,"
1044                                                    "ascq]=%x,%x,%x,%x\n",
1045                                                    sshdr.response_code,
1046                                                    sshdr.sense_key, sshdr.asc,
1047                                                    sshdr.ascq));
1048         }
1049 #endif
1050         if (driver_byte(result) != DRIVER_SENSE &&
1051             (!sense_valid || sense_deferred))
1052                 goto out;
1053
1054         switch (sshdr.sense_key) {
1055         case HARDWARE_ERROR:
1056         case MEDIUM_ERROR:
1057                 good_bytes = sd_completed_bytes(SCpnt);
1058                 break;
1059         case RECOVERED_ERROR:
1060         case NO_SENSE:
1061                 /* Inform the user, but make sure that it's not treated
1062                  * as a hard error.
1063                  */
1064                 scsi_print_sense("sd", SCpnt);
1065                 SCpnt->result = 0;
1066                 memset(SCpnt->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
1067                 good_bytes = scsi_bufflen(SCpnt);
1068                 break;
1069         case ABORTED_COMMAND:
1070                 if (sshdr.asc == 0x10) { /* DIF: Disk detected corruption */
1071                         scsi_print_result(SCpnt);
1072                         scsi_print_sense("sd", SCpnt);
1073                         good_bytes = sd_completed_bytes(SCpnt);
1074                 }
1075                 break;
1076         case ILLEGAL_REQUEST:
1077                 if (sshdr.asc == 0x10) { /* DIX: HBA detected corruption */
1078                         scsi_print_result(SCpnt);
1079                         scsi_print_sense("sd", SCpnt);
1080                         good_bytes = sd_completed_bytes(SCpnt);
1081                 }
1082                 if (!scsi_device_protection(SCpnt->device) &&
1083                     SCpnt->device->use_10_for_rw &&
1084                     (SCpnt->cmnd[0] == READ_10 ||
1085                      SCpnt->cmnd[0] == WRITE_10))
1086                         SCpnt->device->use_10_for_rw = 0;
1087                 if (SCpnt->device->use_10_for_ms &&
1088                     (SCpnt->cmnd[0] == MODE_SENSE_10 ||
1089                      SCpnt->cmnd[0] == MODE_SELECT_10))
1090                         SCpnt->device->use_10_for_ms = 0;
1091                 break;
1092         default:
1093                 break;
1094         }
1095  out:
1096         if (rq_data_dir(SCpnt->request) == READ && scsi_prot_sg_count(SCpnt))
1097                 sd_dif_complete(SCpnt, good_bytes);
1098
1099         return good_bytes;
1100 }
1101
1102 static int media_not_present(struct scsi_disk *sdkp,
1103                              struct scsi_sense_hdr *sshdr)
1104 {
1105
1106         if (!scsi_sense_valid(sshdr))
1107                 return 0;
1108         /* not invoked for commands that could return deferred errors */
1109         if (sshdr->sense_key != NOT_READY &&
1110             sshdr->sense_key != UNIT_ATTENTION)
1111                 return 0;
1112         if (sshdr->asc != 0x3A) /* medium not present */
1113                 return 0;
1114
1115         set_media_not_present(sdkp);
1116         return 1;
1117 }
1118
1119 /*
1120  * spinup disk - called only in sd_revalidate_disk()
1121  */
1122 static void
1123 sd_spinup_disk(struct scsi_disk *sdkp)
1124 {
1125         unsigned char cmd[10];
1126         unsigned long spintime_expire = 0;
1127         int retries, spintime;
1128         unsigned int the_result;
1129         struct scsi_sense_hdr sshdr;
1130         int sense_valid = 0;
1131
1132         spintime = 0;
1133
1134         /* Spin up drives, as required.  Only do this at boot time */
1135         /* Spinup needs to be done for module loads too. */
1136         do {
1137                 retries = 0;
1138
1139                 do {
1140                         cmd[0] = TEST_UNIT_READY;
1141                         memset((void *) &cmd[1], 0, 9);
1142
1143                         the_result = scsi_execute_req(sdkp->device, cmd,
1144                                                       DMA_NONE, NULL, 0,
1145                                                       &sshdr, SD_TIMEOUT,
1146                                                       SD_MAX_RETRIES);
1147
1148                         /*
1149                          * If the drive has indicated to us that it
1150                          * doesn't have any media in it, don't bother
1151                          * with any more polling.
1152                          */
1153                         if (media_not_present(sdkp, &sshdr))
1154                                 return;
1155
1156                         if (the_result)
1157                                 sense_valid = scsi_sense_valid(&sshdr);
1158                         retries++;
1159                 } while (retries < 3 && 
1160                          (!scsi_status_is_good(the_result) ||
1161                           ((driver_byte(the_result) & DRIVER_SENSE) &&
1162                           sense_valid && sshdr.sense_key == UNIT_ATTENTION)));
1163
1164                 if ((driver_byte(the_result) & DRIVER_SENSE) == 0) {
1165                         /* no sense, TUR either succeeded or failed
1166                          * with a status error */
1167                         if(!spintime && !scsi_status_is_good(the_result)) {
1168                                 sd_printk(KERN_NOTICE, sdkp, "Unit Not Ready\n");
1169                                 sd_print_result(sdkp, the_result);
1170                         }
1171                         break;
1172                 }
1173                                         
1174                 /*
1175                  * The device does not want the automatic start to be issued.
1176                  */
1177                 if (sdkp->device->no_start_on_add) {
1178                         break;
1179                 }
1180
1181                 /*
1182                  * If manual intervention is required, or this is an
1183                  * absent USB storage device, a spinup is meaningless.
1184                  */
1185                 if (sense_valid &&
1186                     sshdr.sense_key == NOT_READY &&
1187                     sshdr.asc == 4 && sshdr.ascq == 3) {
1188                         break;          /* manual intervention required */
1189
1190                 /*
1191                  * Issue command to spin up drive when not ready
1192                  */
1193                 } else if (sense_valid && sshdr.sense_key == NOT_READY) {
1194                         if (!spintime) {
1195                                 sd_printk(KERN_NOTICE, sdkp, "Spinning up disk...");
1196                                 cmd[0] = START_STOP;
1197                                 cmd[1] = 1;     /* Return immediately */
1198                                 memset((void *) &cmd[2], 0, 8);
1199                                 cmd[4] = 1;     /* Start spin cycle */
1200                                 if (sdkp->device->start_stop_pwr_cond)
1201                                         cmd[4] |= 1 << 4;
1202                                 scsi_execute_req(sdkp->device, cmd, DMA_NONE,
1203                                                  NULL, 0, &sshdr,
1204                                                  SD_TIMEOUT, SD_MAX_RETRIES);
1205                                 spintime_expire = jiffies + 100 * HZ;
1206                                 spintime = 1;
1207                         }
1208                         /* Wait 1 second for next try */
1209                         msleep(1000);
1210                         printk(".");
1211
1212                 /*
1213                  * Wait for USB flash devices with slow firmware.
1214                  * Yes, this sense key/ASC combination shouldn't
1215                  * occur here.  It's characteristic of these devices.
1216                  */
1217                 } else if (sense_valid &&
1218                                 sshdr.sense_key == UNIT_ATTENTION &&
1219                                 sshdr.asc == 0x28) {
1220                         if (!spintime) {
1221                                 spintime_expire = jiffies + 5 * HZ;
1222                                 spintime = 1;
1223                         }
1224                         /* Wait 1 second for next try */
1225                         msleep(1000);
1226                 } else {
1227                         /* we don't understand the sense code, so it's
1228                          * probably pointless to loop */
1229                         if(!spintime) {
1230                                 sd_printk(KERN_NOTICE, sdkp, "Unit Not Ready\n");
1231                                 sd_print_sense_hdr(sdkp, &sshdr);
1232                         }
1233                         break;
1234                 }
1235                                 
1236         } while (spintime && time_before_eq(jiffies, spintime_expire));
1237
1238         if (spintime) {
1239                 if (scsi_status_is_good(the_result))
1240                         printk("ready\n");
1241                 else
1242                         printk("not responding...\n");
1243         }
1244 }
1245
1246
1247 /*
1248  * Determine whether disk supports Data Integrity Field.
1249  */
1250 void sd_read_protection_type(struct scsi_disk *sdkp, unsigned char *buffer)
1251 {
1252         struct scsi_device *sdp = sdkp->device;
1253         u8 type;
1254
1255         if (scsi_device_protection(sdp) == 0 || (buffer[12] & 1) == 0)
1256                 type = 0;
1257         else
1258                 type = ((buffer[12] >> 1) & 7) + 1; /* P_TYPE 0 = Type 1 */
1259
1260         switch (type) {
1261         case SD_DIF_TYPE0_PROTECTION:
1262                 sdkp->protection_type = 0;
1263                 break;
1264
1265         case SD_DIF_TYPE1_PROTECTION:
1266         case SD_DIF_TYPE3_PROTECTION:
1267                 sdkp->protection_type = type;
1268                 break;
1269
1270         case SD_DIF_TYPE2_PROTECTION:
1271                 sd_printk(KERN_ERR, sdkp, "formatted with DIF Type 2 "  \
1272                           "protection which is currently unsupported. " \
1273                           "Disabling disk!\n");
1274                 goto disable;
1275
1276         default:
1277                 sd_printk(KERN_ERR, sdkp, "formatted with unknown "     \
1278                           "protection type %d. Disabling disk!\n", type);
1279                 goto disable;
1280         }
1281
1282         return;
1283
1284 disable:
1285         sdkp->protection_type = 0;
1286         sdkp->capacity = 0;
1287 }
1288
1289 /*
1290  * read disk capacity
1291  */
1292 static void
1293 sd_read_capacity(struct scsi_disk *sdkp, unsigned char *buffer)
1294 {
1295         unsigned char cmd[16];
1296         int the_result, retries;
1297         int sector_size = 0;
1298         /* Force READ CAPACITY(16) when PROTECT=1 */
1299         int longrc = scsi_device_protection(sdkp->device) ? 1 : 0;
1300         struct scsi_sense_hdr sshdr;
1301         int sense_valid = 0;
1302         struct scsi_device *sdp = sdkp->device;
1303
1304 repeat:
1305         retries = 3;
1306         do {
1307                 if (longrc) {
1308                         memset((void *) cmd, 0, 16);
1309                         cmd[0] = SERVICE_ACTION_IN;
1310                         cmd[1] = SAI_READ_CAPACITY_16;
1311                         cmd[13] = 13;
1312                         memset((void *) buffer, 0, 13);
1313                 } else {
1314                         cmd[0] = READ_CAPACITY;
1315                         memset((void *) &cmd[1], 0, 9);
1316                         memset((void *) buffer, 0, 8);
1317                 }
1318                 
1319                 the_result = scsi_execute_req(sdp, cmd, DMA_FROM_DEVICE,
1320                                               buffer, longrc ? 13 : 8, &sshdr,
1321                                               SD_TIMEOUT, SD_MAX_RETRIES);
1322
1323                 if (media_not_present(sdkp, &sshdr))
1324                         return;
1325
1326                 if (the_result)
1327                         sense_valid = scsi_sense_valid(&sshdr);
1328                 retries--;
1329
1330         } while (the_result && retries);
1331
1332         if (the_result && !longrc) {
1333                 sd_printk(KERN_NOTICE, sdkp, "READ CAPACITY failed\n");
1334                 sd_print_result(sdkp, the_result);
1335                 if (driver_byte(the_result) & DRIVER_SENSE)
1336                         sd_print_sense_hdr(sdkp, &sshdr);
1337                 else
1338                         sd_printk(KERN_NOTICE, sdkp, "Sense not available.\n");
1339
1340                 /* Set dirty bit for removable devices if not ready -
1341                  * sometimes drives will not report this properly. */
1342                 if (sdp->removable &&
1343                     sense_valid && sshdr.sense_key == NOT_READY)
1344                         sdp->changed = 1;
1345
1346                 /* Either no media are present but the drive didn't tell us,
1347                    or they are present but the read capacity command fails */
1348                 /* sdkp->media_present = 0; -- not always correct */
1349                 sdkp->capacity = 0; /* unknown mapped to zero - as usual */
1350
1351                 return;
1352         } else if (the_result && longrc) {
1353                 /* READ CAPACITY(16) has been failed */
1354                 sd_printk(KERN_NOTICE, sdkp, "READ CAPACITY(16) failed\n");
1355                 sd_print_result(sdkp, the_result);
1356                 sd_printk(KERN_NOTICE, sdkp, "Use 0xffffffff as device size\n");
1357
1358                 sdkp->capacity = 1 + (sector_t) 0xffffffff;             
1359                 goto got_data;
1360         }       
1361         
1362         if (!longrc) {
1363                 sector_size = (buffer[4] << 24) |
1364                         (buffer[5] << 16) | (buffer[6] << 8) | buffer[7];
1365                 if (buffer[0] == 0xff && buffer[1] == 0xff &&
1366                     buffer[2] == 0xff && buffer[3] == 0xff) {
1367                         if(sizeof(sdkp->capacity) > 4) {
1368                                 sd_printk(KERN_NOTICE, sdkp, "Very big device. "
1369                                           "Trying to use READ CAPACITY(16).\n");
1370                                 longrc = 1;
1371                                 goto repeat;
1372                         }
1373                         sd_printk(KERN_ERR, sdkp, "Too big for this kernel. Use "
1374                                   "a kernel compiled with support for large "
1375                                   "block devices.\n");
1376                         sdkp->capacity = 0;
1377                         goto got_data;
1378                 }
1379                 sdkp->capacity = 1 + (((sector_t)buffer[0] << 24) |
1380                         (buffer[1] << 16) |
1381                         (buffer[2] << 8) |
1382                         buffer[3]);                     
1383         } else {
1384                 sdkp->capacity = 1 + (((u64)buffer[0] << 56) |
1385                         ((u64)buffer[1] << 48) |
1386                         ((u64)buffer[2] << 40) |
1387                         ((u64)buffer[3] << 32) |
1388                         ((sector_t)buffer[4] << 24) |
1389                         ((sector_t)buffer[5] << 16) |
1390                         ((sector_t)buffer[6] << 8)  |
1391                         (sector_t)buffer[7]);
1392                         
1393                 sector_size = (buffer[8] << 24) |
1394                         (buffer[9] << 16) | (buffer[10] << 8) | buffer[11];
1395
1396                 sd_read_protection_type(sdkp, buffer);
1397         }       
1398
1399         /* Some devices return the total number of sectors, not the
1400          * highest sector number.  Make the necessary adjustment. */
1401         if (sdp->fix_capacity) {
1402                 --sdkp->capacity;
1403
1404         /* Some devices have version which report the correct sizes
1405          * and others which do not. We guess size according to a heuristic
1406          * and err on the side of lowering the capacity. */
1407         } else {
1408                 if (sdp->guess_capacity)
1409                         if (sdkp->capacity & 0x01) /* odd sizes are odd */
1410                                 --sdkp->capacity;
1411         }
1412
1413 got_data:
1414         if (sector_size == 0) {
1415                 sector_size = 512;
1416                 sd_printk(KERN_NOTICE, sdkp, "Sector size 0 reported, "
1417                           "assuming 512.\n");
1418         }
1419
1420         if (sector_size != 512 &&
1421             sector_size != 1024 &&
1422             sector_size != 2048 &&
1423             sector_size != 4096 &&
1424             sector_size != 256) {
1425                 sd_printk(KERN_NOTICE, sdkp, "Unsupported sector size %d.\n",
1426                           sector_size);
1427                 /*
1428                  * The user might want to re-format the drive with
1429                  * a supported sectorsize.  Once this happens, it
1430                  * would be relatively trivial to set the thing up.
1431                  * For this reason, we leave the thing in the table.
1432                  */
1433                 sdkp->capacity = 0;
1434                 /*
1435                  * set a bogus sector size so the normal read/write
1436                  * logic in the block layer will eventually refuse any
1437                  * request on this device without tripping over power
1438                  * of two sector size assumptions
1439                  */
1440                 sector_size = 512;
1441         }
1442         {
1443                 /*
1444                  * The msdos fs needs to know the hardware sector size
1445                  * So I have created this table. See ll_rw_blk.c
1446                  * Jacques Gelinas (Jacques@solucorp.qc.ca)
1447                  */
1448                 int hard_sector = sector_size;
1449                 sector_t sz = (sdkp->capacity/2) * (hard_sector/256);
1450                 struct request_queue *queue = sdp->request_queue;
1451                 sector_t mb = sz;
1452
1453                 blk_queue_hardsect_size(queue, hard_sector);
1454                 /* avoid 64-bit division on 32-bit platforms */
1455                 sector_div(sz, 625);
1456                 mb -= sz - 974;
1457                 sector_div(mb, 1950);
1458
1459                 sd_printk(KERN_NOTICE, sdkp,
1460                           "%llu %d-byte hardware sectors (%llu MB)\n",
1461                           (unsigned long long)sdkp->capacity,
1462                           hard_sector, (unsigned long long)mb);
1463         }
1464
1465         /* Rescale capacity to 512-byte units */
1466         if (sector_size == 4096)
1467                 sdkp->capacity <<= 3;
1468         else if (sector_size == 2048)
1469                 sdkp->capacity <<= 2;
1470         else if (sector_size == 1024)
1471                 sdkp->capacity <<= 1;
1472         else if (sector_size == 256)
1473                 sdkp->capacity >>= 1;
1474
1475         sdkp->device->sector_size = sector_size;
1476 }
1477
1478 /* called with buffer of length 512 */
1479 static inline int
1480 sd_do_mode_sense(struct scsi_device *sdp, int dbd, int modepage,
1481                  unsigned char *buffer, int len, struct scsi_mode_data *data,
1482                  struct scsi_sense_hdr *sshdr)
1483 {
1484         return scsi_mode_sense(sdp, dbd, modepage, buffer, len,
1485                                SD_TIMEOUT, SD_MAX_RETRIES, data,
1486                                sshdr);
1487 }
1488
1489 /*
1490  * read write protect setting, if possible - called only in sd_revalidate_disk()
1491  * called with buffer of length SD_BUF_SIZE
1492  */
1493 static void
1494 sd_read_write_protect_flag(struct scsi_disk *sdkp, unsigned char *buffer)
1495 {
1496         int res;
1497         struct scsi_device *sdp = sdkp->device;
1498         struct scsi_mode_data data;
1499
1500         set_disk_ro(sdkp->disk, 0);
1501         if (sdp->skip_ms_page_3f) {
1502                 sd_printk(KERN_NOTICE, sdkp, "Assuming Write Enabled\n");
1503                 return;
1504         }
1505
1506         if (sdp->use_192_bytes_for_3f) {
1507                 res = sd_do_mode_sense(sdp, 0, 0x3F, buffer, 192, &data, NULL);
1508         } else {
1509                 /*
1510                  * First attempt: ask for all pages (0x3F), but only 4 bytes.
1511                  * We have to start carefully: some devices hang if we ask
1512                  * for more than is available.
1513                  */
1514                 res = sd_do_mode_sense(sdp, 0, 0x3F, buffer, 4, &data, NULL);
1515
1516                 /*
1517                  * Second attempt: ask for page 0 When only page 0 is
1518                  * implemented, a request for page 3F may return Sense Key
1519                  * 5: Illegal Request, Sense Code 24: Invalid field in
1520                  * CDB.
1521                  */
1522                 if (!scsi_status_is_good(res))
1523                         res = sd_do_mode_sense(sdp, 0, 0, buffer, 4, &data, NULL);
1524
1525                 /*
1526                  * Third attempt: ask 255 bytes, as we did earlier.
1527                  */
1528                 if (!scsi_status_is_good(res))
1529                         res = sd_do_mode_sense(sdp, 0, 0x3F, buffer, 255,
1530                                                &data, NULL);
1531         }
1532
1533         if (!scsi_status_is_good(res)) {
1534                 sd_printk(KERN_WARNING, sdkp,
1535                           "Test WP failed, assume Write Enabled\n");
1536         } else {
1537                 sdkp->write_prot = ((data.device_specific & 0x80) != 0);
1538                 set_disk_ro(sdkp->disk, sdkp->write_prot);
1539                 sd_printk(KERN_NOTICE, sdkp, "Write Protect is %s\n",
1540                           sdkp->write_prot ? "on" : "off");
1541                 sd_printk(KERN_DEBUG, sdkp,
1542                           "Mode Sense: %02x %02x %02x %02x\n",
1543                           buffer[0], buffer[1], buffer[2], buffer[3]);
1544         }
1545 }
1546
1547 /*
1548  * sd_read_cache_type - called only from sd_revalidate_disk()
1549  * called with buffer of length SD_BUF_SIZE
1550  */
1551 static void
1552 sd_read_cache_type(struct scsi_disk *sdkp, unsigned char *buffer)
1553 {
1554         int len = 0, res;
1555         struct scsi_device *sdp = sdkp->device;
1556
1557         int dbd;
1558         int modepage;
1559         struct scsi_mode_data data;
1560         struct scsi_sense_hdr sshdr;
1561
1562         if (sdp->skip_ms_page_8)
1563                 goto defaults;
1564
1565         if (sdp->type == TYPE_RBC) {
1566                 modepage = 6;
1567                 dbd = 8;
1568         } else {
1569                 modepage = 8;
1570                 dbd = 0;
1571         }
1572
1573         /* cautiously ask */
1574         res = sd_do_mode_sense(sdp, dbd, modepage, buffer, 4, &data, &sshdr);
1575
1576         if (!scsi_status_is_good(res))
1577                 goto bad_sense;
1578
1579         if (!data.header_length) {
1580                 modepage = 6;
1581                 sd_printk(KERN_ERR, sdkp, "Missing header in MODE_SENSE response\n");
1582         }
1583
1584         /* that went OK, now ask for the proper length */
1585         len = data.length;
1586
1587         /*
1588          * We're only interested in the first three bytes, actually.
1589          * But the data cache page is defined for the first 20.
1590          */
1591         if (len < 3)
1592                 goto bad_sense;
1593         if (len > 20)
1594                 len = 20;
1595
1596         /* Take headers and block descriptors into account */
1597         len += data.header_length + data.block_descriptor_length;
1598         if (len > SD_BUF_SIZE)
1599                 goto bad_sense;
1600
1601         /* Get the data */
1602         res = sd_do_mode_sense(sdp, dbd, modepage, buffer, len, &data, &sshdr);
1603
1604         if (scsi_status_is_good(res)) {
1605                 int offset = data.header_length + data.block_descriptor_length;
1606
1607                 if (offset >= SD_BUF_SIZE - 2) {
1608                         sd_printk(KERN_ERR, sdkp, "Malformed MODE SENSE response\n");
1609                         goto defaults;
1610                 }
1611
1612                 if ((buffer[offset] & 0x3f) != modepage) {
1613                         sd_printk(KERN_ERR, sdkp, "Got wrong page\n");
1614                         goto defaults;
1615                 }
1616
1617                 if (modepage == 8) {
1618                         sdkp->WCE = ((buffer[offset + 2] & 0x04) != 0);
1619                         sdkp->RCD = ((buffer[offset + 2] & 0x01) != 0);
1620                 } else {
1621                         sdkp->WCE = ((buffer[offset + 2] & 0x01) == 0);
1622                         sdkp->RCD = 0;
1623                 }
1624
1625                 sdkp->DPOFUA = (data.device_specific & 0x10) != 0;
1626                 if (sdkp->DPOFUA && !sdkp->device->use_10_for_rw) {
1627                         sd_printk(KERN_NOTICE, sdkp,
1628                                   "Uses READ/WRITE(6), disabling FUA\n");
1629                         sdkp->DPOFUA = 0;
1630                 }
1631
1632                 sd_printk(KERN_NOTICE, sdkp,
1633                        "Write cache: %s, read cache: %s, %s\n",
1634                        sdkp->WCE ? "enabled" : "disabled",
1635                        sdkp->RCD ? "disabled" : "enabled",
1636                        sdkp->DPOFUA ? "supports DPO and FUA"
1637                        : "doesn't support DPO or FUA");
1638
1639                 return;
1640         }
1641
1642 bad_sense:
1643         if (scsi_sense_valid(&sshdr) &&
1644             sshdr.sense_key == ILLEGAL_REQUEST &&
1645             sshdr.asc == 0x24 && sshdr.ascq == 0x0)
1646                 /* Invalid field in CDB */
1647                 sd_printk(KERN_NOTICE, sdkp, "Cache data unavailable\n");
1648         else
1649                 sd_printk(KERN_ERR, sdkp, "Asking for cache data failed\n");
1650
1651 defaults:
1652         sd_printk(KERN_ERR, sdkp, "Assuming drive cache: write through\n");
1653         sdkp->WCE = 0;
1654         sdkp->RCD = 0;
1655         sdkp->DPOFUA = 0;
1656 }
1657
1658 /*
1659  * The ATO bit indicates whether the DIF application tag is available
1660  * for use by the operating system.
1661  */
1662 void sd_read_app_tag_own(struct scsi_disk *sdkp, unsigned char *buffer)
1663 {
1664         int res, offset;
1665         struct scsi_device *sdp = sdkp->device;
1666         struct scsi_mode_data data;
1667         struct scsi_sense_hdr sshdr;
1668
1669         if (sdp->type != TYPE_DISK)
1670                 return;
1671
1672         if (sdkp->protection_type == 0)
1673                 return;
1674
1675         res = scsi_mode_sense(sdp, 1, 0x0a, buffer, 36, SD_TIMEOUT,
1676                               SD_MAX_RETRIES, &data, &sshdr);
1677
1678         if (!scsi_status_is_good(res) || !data.header_length ||
1679             data.length < 6) {
1680                 sd_printk(KERN_WARNING, sdkp,
1681                           "getting Control mode page failed, assume no ATO\n");
1682
1683                 if (scsi_sense_valid(&sshdr))
1684                         sd_print_sense_hdr(sdkp, &sshdr);
1685
1686                 return;
1687         }
1688
1689         offset = data.header_length + data.block_descriptor_length;
1690
1691         if ((buffer[offset] & 0x3f) != 0x0a) {
1692                 sd_printk(KERN_ERR, sdkp, "ATO Got wrong page\n");
1693                 return;
1694         }
1695
1696         if ((buffer[offset + 5] & 0x80) == 0)
1697                 return;
1698
1699         sdkp->ATO = 1;
1700
1701         return;
1702 }
1703
1704 /**
1705  *      sd_revalidate_disk - called the first time a new disk is seen,
1706  *      performs disk spin up, read_capacity, etc.
1707  *      @disk: struct gendisk we care about
1708  **/
1709 static int sd_revalidate_disk(struct gendisk *disk)
1710 {
1711         struct scsi_disk *sdkp = scsi_disk(disk);
1712         struct scsi_device *sdp = sdkp->device;
1713         unsigned char *buffer;
1714         unsigned ordered;
1715
1716         SCSI_LOG_HLQUEUE(3, sd_printk(KERN_INFO, sdkp,
1717                                       "sd_revalidate_disk\n"));
1718
1719         /*
1720          * If the device is offline, don't try and read capacity or any
1721          * of the other niceties.
1722          */
1723         if (!scsi_device_online(sdp))
1724                 goto out;
1725
1726         buffer = kmalloc(SD_BUF_SIZE, GFP_KERNEL);
1727         if (!buffer) {
1728                 sd_printk(KERN_WARNING, sdkp, "sd_revalidate_disk: Memory "
1729                           "allocation failure.\n");
1730                 goto out;
1731         }
1732
1733         /* defaults, until the device tells us otherwise */
1734         sdp->sector_size = 512;
1735         sdkp->capacity = 0;
1736         sdkp->media_present = 1;
1737         sdkp->write_prot = 0;
1738         sdkp->WCE = 0;
1739         sdkp->RCD = 0;
1740         sdkp->ATO = 0;
1741
1742         sd_spinup_disk(sdkp);
1743
1744         /*
1745          * Without media there is no reason to ask; moreover, some devices
1746          * react badly if we do.
1747          */
1748         if (sdkp->media_present) {
1749                 sd_read_capacity(sdkp, buffer);
1750                 sd_read_write_protect_flag(sdkp, buffer);
1751                 sd_read_cache_type(sdkp, buffer);
1752                 sd_read_app_tag_own(sdkp, buffer);
1753         }
1754
1755         /*
1756          * We now have all cache related info, determine how we deal
1757          * with ordered requests.  Note that as the current SCSI
1758          * dispatch function can alter request order, we cannot use
1759          * QUEUE_ORDERED_TAG_* even when ordered tag is supported.
1760          */
1761         if (sdkp->WCE)
1762                 ordered = sdkp->DPOFUA
1763                         ? QUEUE_ORDERED_DRAIN_FUA : QUEUE_ORDERED_DRAIN_FLUSH;
1764         else
1765                 ordered = QUEUE_ORDERED_DRAIN;
1766
1767         blk_queue_ordered(sdkp->disk->queue, ordered, sd_prepare_flush);
1768
1769         set_capacity(disk, sdkp->capacity);
1770         kfree(buffer);
1771
1772  out:
1773         return 0;
1774 }
1775
1776 /**
1777  *      sd_probe - called during driver initialization and whenever a
1778  *      new scsi device is attached to the system. It is called once
1779  *      for each scsi device (not just disks) present.
1780  *      @dev: pointer to device object
1781  *
1782  *      Returns 0 if successful (or not interested in this scsi device 
1783  *      (e.g. scanner)); 1 when there is an error.
1784  *
1785  *      Note: this function is invoked from the scsi mid-level.
1786  *      This function sets up the mapping between a given 
1787  *      <host,channel,id,lun> (found in sdp) and new device name 
1788  *      (e.g. /dev/sda). More precisely it is the block device major 
1789  *      and minor number that is chosen here.
1790  *
1791  *      Assume sd_attach is not re-entrant (for time being)
1792  *      Also think about sd_attach() and sd_remove() running coincidentally.
1793  **/
1794 static int sd_probe(struct device *dev)
1795 {
1796         struct scsi_device *sdp = to_scsi_device(dev);
1797         struct scsi_disk *sdkp;
1798         struct gendisk *gd;
1799         u32 index;
1800         int error;
1801
1802         error = -ENODEV;
1803         if (sdp->type != TYPE_DISK && sdp->type != TYPE_MOD && sdp->type != TYPE_RBC)
1804                 goto out;
1805
1806         SCSI_LOG_HLQUEUE(3, sdev_printk(KERN_INFO, sdp,
1807                                         "sd_attach\n"));
1808
1809         error = -ENOMEM;
1810         sdkp = kzalloc(sizeof(*sdkp), GFP_KERNEL);
1811         if (!sdkp)
1812                 goto out;
1813
1814         gd = alloc_disk_ext(SD_MINORS, SD_EXT_MINORS);
1815         if (!gd)
1816                 goto out_free;
1817
1818         do {
1819                 if (!ida_pre_get(&sd_index_ida, GFP_KERNEL))
1820                         goto out_put;
1821
1822                 error = ida_get_new(&sd_index_ida, &index);
1823         } while (error == -EAGAIN);
1824
1825         if (error)
1826                 goto out_put;
1827
1828         error = -EBUSY;
1829         if (index >= SD_MAX_DISKS)
1830                 goto out_free_index;
1831
1832         sdkp->device = sdp;
1833         sdkp->driver = &sd_template;
1834         sdkp->disk = gd;
1835         sdkp->index = index;
1836         sdkp->openers = 0;
1837         sdkp->previous_state = 1;
1838
1839         if (!sdp->timeout) {
1840                 if (sdp->type != TYPE_MOD)
1841                         sdp->timeout = SD_TIMEOUT;
1842                 else
1843                         sdp->timeout = SD_MOD_TIMEOUT;
1844         }
1845
1846         device_initialize(&sdkp->dev);
1847         sdkp->dev.parent = &sdp->sdev_gendev;
1848         sdkp->dev.class = &sd_disk_class;
1849         strncpy(sdkp->dev.bus_id, sdp->sdev_gendev.bus_id, BUS_ID_SIZE);
1850
1851         if (device_add(&sdkp->dev))
1852                 goto out_free_index;
1853
1854         get_device(&sdp->sdev_gendev);
1855
1856         gd->major = sd_major((index & 0xf0) >> 4);
1857         gd->first_minor = ((index & 0xf) << 4) | (index & 0xfff00);
1858         gd->minors = SD_MINORS;
1859         gd->ext_minors = SD_EXT_MINORS;
1860         gd->fops = &sd_fops;
1861
1862         if (index < 26) {
1863                 sprintf(gd->disk_name, "sd%c", 'a' + index % 26);
1864         } else if (index < (26 + 1) * 26) {
1865                 sprintf(gd->disk_name, "sd%c%c",
1866                         'a' + index / 26 - 1,'a' + index % 26);
1867         } else {
1868                 const unsigned int m1 = (index / 26 - 1) / 26 - 1;
1869                 const unsigned int m2 = (index / 26 - 1) % 26;
1870                 const unsigned int m3 =  index % 26;
1871                 sprintf(gd->disk_name, "sd%c%c%c",
1872                         'a' + m1, 'a' + m2, 'a' + m3);
1873         }
1874
1875         gd->private_data = &sdkp->driver;
1876         gd->queue = sdkp->device->request_queue;
1877
1878         sd_revalidate_disk(gd);
1879
1880         blk_queue_prep_rq(sdp->request_queue, sd_prep_fn);
1881
1882         gd->driverfs_dev = &sdp->sdev_gendev;
1883         gd->flags = GENHD_FL_DRIVERFS;
1884         if (sdp->removable)
1885                 gd->flags |= GENHD_FL_REMOVABLE;
1886
1887         dev_set_drvdata(dev, sdkp);
1888         add_disk(gd);
1889         sd_dif_config_host(sdkp);
1890
1891         sd_printk(KERN_NOTICE, sdkp, "Attached SCSI %sdisk\n",
1892                   sdp->removable ? "removable " : "");
1893
1894         return 0;
1895
1896  out_free_index:
1897         ida_remove(&sd_index_ida, index);
1898  out_put:
1899         put_disk(gd);
1900  out_free:
1901         kfree(sdkp);
1902  out:
1903         return error;
1904 }
1905
1906 /**
1907  *      sd_remove - called whenever a scsi disk (previously recognized by
1908  *      sd_probe) is detached from the system. It is called (potentially
1909  *      multiple times) during sd module unload.
1910  *      @sdp: pointer to mid level scsi device object
1911  *
1912  *      Note: this function is invoked from the scsi mid-level.
1913  *      This function potentially frees up a device name (e.g. /dev/sdc)
1914  *      that could be re-used by a subsequent sd_probe().
1915  *      This function is not called when the built-in sd driver is "exit-ed".
1916  **/
1917 static int sd_remove(struct device *dev)
1918 {
1919         struct scsi_disk *sdkp = dev_get_drvdata(dev);
1920
1921         device_del(&sdkp->dev);
1922         del_gendisk(sdkp->disk);
1923         sd_shutdown(dev);
1924
1925         mutex_lock(&sd_ref_mutex);
1926         dev_set_drvdata(dev, NULL);
1927         put_device(&sdkp->dev);
1928         mutex_unlock(&sd_ref_mutex);
1929
1930         return 0;
1931 }
1932
1933 /**
1934  *      scsi_disk_release - Called to free the scsi_disk structure
1935  *      @dev: pointer to embedded class device
1936  *
1937  *      sd_ref_mutex must be held entering this routine.  Because it is
1938  *      called on last put, you should always use the scsi_disk_get()
1939  *      scsi_disk_put() helpers which manipulate the semaphore directly
1940  *      and never do a direct put_device.
1941  **/
1942 static void scsi_disk_release(struct device *dev)
1943 {
1944         struct scsi_disk *sdkp = to_scsi_disk(dev);
1945         struct gendisk *disk = sdkp->disk;
1946         
1947         ida_remove(&sd_index_ida, sdkp->index);
1948
1949         disk->private_data = NULL;
1950         put_disk(disk);
1951         put_device(&sdkp->device->sdev_gendev);
1952
1953         kfree(sdkp);
1954 }
1955
1956 static int sd_start_stop_device(struct scsi_disk *sdkp, int start)
1957 {
1958         unsigned char cmd[6] = { START_STOP };  /* START_VALID */
1959         struct scsi_sense_hdr sshdr;
1960         struct scsi_device *sdp = sdkp->device;
1961         int res;
1962
1963         if (start)
1964                 cmd[4] |= 1;    /* START */
1965
1966         if (sdp->start_stop_pwr_cond)
1967                 cmd[4] |= start ? 1 << 4 : 3 << 4;      /* Active or Standby */
1968
1969         if (!scsi_device_online(sdp))
1970                 return -ENODEV;
1971
1972         res = scsi_execute_req(sdp, cmd, DMA_NONE, NULL, 0, &sshdr,
1973                                SD_TIMEOUT, SD_MAX_RETRIES);
1974         if (res) {
1975                 sd_printk(KERN_WARNING, sdkp, "START_STOP FAILED\n");
1976                 sd_print_result(sdkp, res);
1977                 if (driver_byte(res) & DRIVER_SENSE)
1978                         sd_print_sense_hdr(sdkp, &sshdr);
1979         }
1980
1981         return res;
1982 }
1983
1984 /*
1985  * Send a SYNCHRONIZE CACHE instruction down to the device through
1986  * the normal SCSI command structure.  Wait for the command to
1987  * complete.
1988  */
1989 static void sd_shutdown(struct device *dev)
1990 {
1991         struct scsi_disk *sdkp = scsi_disk_get_from_dev(dev);
1992
1993         if (!sdkp)
1994                 return;         /* this can happen */
1995
1996         if (sdkp->WCE) {
1997                 sd_printk(KERN_NOTICE, sdkp, "Synchronizing SCSI cache\n");
1998                 sd_sync_cache(sdkp);
1999         }
2000
2001         if (system_state != SYSTEM_RESTART && sdkp->device->manage_start_stop) {
2002                 sd_printk(KERN_NOTICE, sdkp, "Stopping disk\n");
2003                 sd_start_stop_device(sdkp, 0);
2004         }
2005
2006         scsi_disk_put(sdkp);
2007 }
2008
2009 static int sd_suspend(struct device *dev, pm_message_t mesg)
2010 {
2011         struct scsi_disk *sdkp = scsi_disk_get_from_dev(dev);
2012         int ret = 0;
2013
2014         if (!sdkp)
2015                 return 0;       /* this can happen */
2016
2017         if (sdkp->WCE) {
2018                 sd_printk(KERN_NOTICE, sdkp, "Synchronizing SCSI cache\n");
2019                 ret = sd_sync_cache(sdkp);
2020                 if (ret)
2021                         goto done;
2022         }
2023
2024         if ((mesg.event & PM_EVENT_SLEEP) && sdkp->device->manage_start_stop) {
2025                 sd_printk(KERN_NOTICE, sdkp, "Stopping disk\n");
2026                 ret = sd_start_stop_device(sdkp, 0);
2027         }
2028
2029 done:
2030         scsi_disk_put(sdkp);
2031         return ret;
2032 }
2033
2034 static int sd_resume(struct device *dev)
2035 {
2036         struct scsi_disk *sdkp = scsi_disk_get_from_dev(dev);
2037         int ret = 0;
2038
2039         if (!sdkp->device->manage_start_stop)
2040                 goto done;
2041
2042         sd_printk(KERN_NOTICE, sdkp, "Starting disk\n");
2043         ret = sd_start_stop_device(sdkp, 1);
2044
2045 done:
2046         scsi_disk_put(sdkp);
2047         return ret;
2048 }
2049
2050 /**
2051  *      init_sd - entry point for this driver (both when built in or when
2052  *      a module).
2053  *
2054  *      Note: this function registers this driver with the scsi mid-level.
2055  **/
2056 static int __init init_sd(void)
2057 {
2058         int majors = 0, i, err;
2059
2060         SCSI_LOG_HLQUEUE(3, printk("init_sd: sd driver entry point\n"));
2061
2062         for (i = 0; i < SD_MAJORS; i++)
2063                 if (register_blkdev(sd_major(i), "sd") == 0)
2064                         majors++;
2065
2066         if (!majors)
2067                 return -ENODEV;
2068
2069         err = class_register(&sd_disk_class);
2070         if (err)
2071                 goto err_out;
2072
2073         err = scsi_register_driver(&sd_template.gendrv);
2074         if (err)
2075                 goto err_out_class;
2076
2077         return 0;
2078
2079 err_out_class:
2080         class_unregister(&sd_disk_class);
2081 err_out:
2082         for (i = 0; i < SD_MAJORS; i++)
2083                 unregister_blkdev(sd_major(i), "sd");
2084         return err;
2085 }
2086
2087 /**
2088  *      exit_sd - exit point for this driver (when it is a module).
2089  *
2090  *      Note: this function unregisters this driver from the scsi mid-level.
2091  **/
2092 static void __exit exit_sd(void)
2093 {
2094         int i;
2095
2096         SCSI_LOG_HLQUEUE(3, printk("exit_sd: exiting sd driver\n"));
2097
2098         scsi_unregister_driver(&sd_template.gendrv);
2099         class_unregister(&sd_disk_class);
2100
2101         for (i = 0; i < SD_MAJORS; i++)
2102                 unregister_blkdev(sd_major(i), "sd");
2103 }
2104
2105 module_init(init_sd);
2106 module_exit(exit_sd);
2107
2108 static void sd_print_sense_hdr(struct scsi_disk *sdkp,
2109                                struct scsi_sense_hdr *sshdr)
2110 {
2111         sd_printk(KERN_INFO, sdkp, "");
2112         scsi_show_sense_hdr(sshdr);
2113         sd_printk(KERN_INFO, sdkp, "");
2114         scsi_show_extd_sense(sshdr->asc, sshdr->ascq);
2115 }
2116
2117 static void sd_print_result(struct scsi_disk *sdkp, int result)
2118 {
2119         sd_printk(KERN_INFO, sdkp, "");
2120         scsi_show_result(result);
2121 }
2122