ide: add ide_setting_ioctl() helper
[safe/jmp/linux-2.6] / drivers / ide / ide-disk.c
1 /*
2  *  Copyright (C) 1994-1998        Linus Torvalds & authors (see below)
3  *  Copyright (C) 1998-2002        Linux ATA Development
4  *                                    Andre Hedrick <andre@linux-ide.org>
5  *  Copyright (C) 2003             Red Hat <alan@redhat.com>
6  *  Copyright (C) 2003-2005, 2007  Bartlomiej Zolnierkiewicz
7  */
8
9 /*
10  *  Mostly written by Mark Lord <mlord@pobox.com>
11  *                and Gadi Oxman <gadio@netvision.net.il>
12  *                and Andre Hedrick <andre@linux-ide.org>
13  *
14  * This is the IDE/ATA disk driver, as evolved from hd.c and ide.c.
15  */
16
17 #define IDEDISK_VERSION "1.18"
18
19 #include <linux/module.h>
20 #include <linux/types.h>
21 #include <linux/string.h>
22 #include <linux/kernel.h>
23 #include <linux/timer.h>
24 #include <linux/mm.h>
25 #include <linux/interrupt.h>
26 #include <linux/major.h>
27 #include <linux/errno.h>
28 #include <linux/genhd.h>
29 #include <linux/slab.h>
30 #include <linux/delay.h>
31 #include <linux/mutex.h>
32 #include <linux/leds.h>
33 #include <linux/ide.h>
34 #include <linux/hdreg.h>
35
36 #include <asm/byteorder.h>
37 #include <asm/irq.h>
38 #include <asm/uaccess.h>
39 #include <asm/io.h>
40 #include <asm/div64.h>
41
42 #if !defined(CONFIG_DEBUG_BLOCK_EXT_DEVT)
43 #define IDE_DISK_MINORS         (1 << PARTN_BITS)
44 #else
45 #define IDE_DISK_MINORS         0
46 #endif
47
48 struct ide_disk_obj {
49         ide_drive_t     *drive;
50         ide_driver_t    *driver;
51         struct gendisk  *disk;
52         struct kref     kref;
53         unsigned int    openers;        /* protected by BKL for now */
54 };
55
56 static DEFINE_MUTEX(idedisk_ref_mutex);
57
58 #define to_ide_disk(obj) container_of(obj, struct ide_disk_obj, kref)
59
60 #define ide_disk_g(disk) \
61         container_of((disk)->private_data, struct ide_disk_obj, driver)
62
63 static void ide_disk_release(struct kref *);
64
65 static struct ide_disk_obj *ide_disk_get(struct gendisk *disk)
66 {
67         struct ide_disk_obj *idkp = NULL;
68
69         mutex_lock(&idedisk_ref_mutex);
70         idkp = ide_disk_g(disk);
71         if (idkp) {
72                 if (ide_device_get(idkp->drive))
73                         idkp = NULL;
74                 else
75                         kref_get(&idkp->kref);
76         }
77         mutex_unlock(&idedisk_ref_mutex);
78         return idkp;
79 }
80
81 static void ide_disk_put(struct ide_disk_obj *idkp)
82 {
83         ide_drive_t *drive = idkp->drive;
84
85         mutex_lock(&idedisk_ref_mutex);
86         kref_put(&idkp->kref, ide_disk_release);
87         ide_device_put(drive);
88         mutex_unlock(&idedisk_ref_mutex);
89 }
90
91 static const u8 ide_rw_cmds[] = {
92         ATA_CMD_READ_MULTI,
93         ATA_CMD_WRITE_MULTI,
94         ATA_CMD_READ_MULTI_EXT,
95         ATA_CMD_WRITE_MULTI_EXT,
96         ATA_CMD_PIO_READ,
97         ATA_CMD_PIO_WRITE,
98         ATA_CMD_PIO_READ_EXT,
99         ATA_CMD_PIO_WRITE_EXT,
100         ATA_CMD_READ,
101         ATA_CMD_WRITE,
102         ATA_CMD_READ_EXT,
103         ATA_CMD_WRITE_EXT,
104 };
105
106 static const u8 ide_data_phases[] = {
107         TASKFILE_MULTI_IN,
108         TASKFILE_MULTI_OUT,
109         TASKFILE_IN,
110         TASKFILE_OUT,
111         TASKFILE_IN_DMA,
112         TASKFILE_OUT_DMA,
113 };
114
115 static void ide_tf_set_cmd(ide_drive_t *drive, ide_task_t *task, u8 dma)
116 {
117         u8 index, lba48, write;
118
119         lba48 = (task->tf_flags & IDE_TFLAG_LBA48) ? 2 : 0;
120         write = (task->tf_flags & IDE_TFLAG_WRITE) ? 1 : 0;
121
122         if (dma)
123                 index = 8;
124         else
125                 index = drive->mult_count ? 0 : 4;
126
127         task->tf.command = ide_rw_cmds[index + lba48 + write];
128
129         if (dma)
130                 index = 8; /* fixup index */
131
132         task->data_phase = ide_data_phases[index / 2 + write];
133 }
134
135 /*
136  * __ide_do_rw_disk() issues READ and WRITE commands to a disk,
137  * using LBA if supported, or CHS otherwise, to address sectors.
138  */
139 static ide_startstop_t __ide_do_rw_disk(ide_drive_t *drive, struct request *rq,
140                                         sector_t block)
141 {
142         ide_hwif_t *hwif        = HWIF(drive);
143         unsigned int dma        = drive->using_dma;
144         u16 nsectors            = (u16)rq->nr_sectors;
145         u8 lba48                = (drive->addressing == 1) ? 1 : 0;
146         ide_task_t              task;
147         struct ide_taskfile     *tf = &task.tf;
148         ide_startstop_t         rc;
149
150         if ((hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA) && lba48 && dma) {
151                 if (block + rq->nr_sectors > 1ULL << 28)
152                         dma = 0;
153                 else
154                         lba48 = 0;
155         }
156
157         if (!dma) {
158                 ide_init_sg_cmd(drive, rq);
159                 ide_map_sg(drive, rq);
160         }
161
162         memset(&task, 0, sizeof(task));
163         task.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
164
165         if (drive->select.b.lba) {
166                 if (lba48) {
167                         pr_debug("%s: LBA=0x%012llx\n", drive->name,
168                                         (unsigned long long)block);
169
170                         tf->hob_nsect = (nsectors >> 8) & 0xff;
171                         tf->hob_lbal  = (u8)(block >> 24);
172                         if (sizeof(block) != 4) {
173                                 tf->hob_lbam = (u8)((u64)block >> 32);
174                                 tf->hob_lbah = (u8)((u64)block >> 40);
175                         }
176
177                         tf->nsect  = nsectors & 0xff;
178                         tf->lbal   = (u8) block;
179                         tf->lbam   = (u8)(block >>  8);
180                         tf->lbah   = (u8)(block >> 16);
181
182                         task.tf_flags |= (IDE_TFLAG_LBA48 | IDE_TFLAG_HOB);
183                 } else {
184                         tf->nsect  = nsectors & 0xff;
185                         tf->lbal   = block;
186                         tf->lbam   = block >>= 8;
187                         tf->lbah   = block >>= 8;
188                         tf->device = (block >> 8) & 0xf;
189                 }
190         } else {
191                 unsigned int sect, head, cyl, track;
192
193                 track = (int)block / drive->sect;
194                 sect  = (int)block % drive->sect + 1;
195                 head  = track % drive->head;
196                 cyl   = track / drive->head;
197
198                 pr_debug("%s: CHS=%u/%u/%u\n", drive->name, cyl, head, sect);
199
200                 tf->nsect  = nsectors & 0xff;
201                 tf->lbal   = sect;
202                 tf->lbam   = cyl;
203                 tf->lbah   = cyl >> 8;
204                 tf->device = head;
205         }
206
207         if (rq_data_dir(rq))
208                 task.tf_flags |= IDE_TFLAG_WRITE;
209
210         ide_tf_set_cmd(drive, &task, dma);
211         if (!dma)
212                 hwif->data_phase = task.data_phase;
213         task.rq = rq;
214
215         rc = do_rw_taskfile(drive, &task);
216
217         if (rc == ide_stopped && dma) {
218                 /* fallback to PIO */
219                 task.tf_flags |= IDE_TFLAG_DMA_PIO_FALLBACK;
220                 ide_tf_set_cmd(drive, &task, 0);
221                 hwif->data_phase = task.data_phase;
222                 ide_init_sg_cmd(drive, rq);
223                 rc = do_rw_taskfile(drive, &task);
224         }
225
226         return rc;
227 }
228
229 /*
230  * 268435455  == 137439 MB or 28bit limit
231  * 320173056  == 163929 MB or 48bit addressing
232  * 1073741822 == 549756 MB or 48bit addressing fake drive
233  */
234
235 static ide_startstop_t ide_do_rw_disk(ide_drive_t *drive, struct request *rq,
236                                       sector_t block)
237 {
238         ide_hwif_t *hwif = HWIF(drive);
239
240         BUG_ON(drive->blocked);
241
242         if (!blk_fs_request(rq)) {
243                 blk_dump_rq_flags(rq, "ide_do_rw_disk - bad command");
244                 ide_end_request(drive, 0, 0);
245                 return ide_stopped;
246         }
247
248         ledtrig_ide_activity();
249
250         pr_debug("%s: %sing: block=%llu, sectors=%lu, buffer=0x%08lx\n",
251                  drive->name, rq_data_dir(rq) == READ ? "read" : "writ",
252                  (unsigned long long)block, rq->nr_sectors,
253                  (unsigned long)rq->buffer);
254
255         if (hwif->rw_disk)
256                 hwif->rw_disk(drive, rq);
257
258         return __ide_do_rw_disk(drive, rq, block);
259 }
260
261 /*
262  * Queries for true maximum capacity of the drive.
263  * Returns maximum LBA address (> 0) of the drive, 0 if failed.
264  */
265 static u64 idedisk_read_native_max_address(ide_drive_t *drive, int lba48)
266 {
267         ide_task_t args;
268         struct ide_taskfile *tf = &args.tf;
269         u64 addr = 0;
270
271         /* Create IDE/ATA command request structure */
272         memset(&args, 0, sizeof(ide_task_t));
273         if (lba48)
274                 tf->command = ATA_CMD_READ_NATIVE_MAX_EXT;
275         else
276                 tf->command = ATA_CMD_READ_NATIVE_MAX;
277         tf->device  = ATA_LBA;
278         args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
279         if (lba48)
280                 args.tf_flags |= (IDE_TFLAG_LBA48 | IDE_TFLAG_HOB);
281         /* submit command request */
282         ide_no_data_taskfile(drive, &args);
283
284         /* if OK, compute maximum address value */
285         if ((tf->status & 0x01) == 0)
286                 addr = ide_get_lba_addr(tf, lba48) + 1;
287
288         return addr;
289 }
290
291 /*
292  * Sets maximum virtual LBA address of the drive.
293  * Returns new maximum virtual LBA address (> 0) or 0 on failure.
294  */
295 static u64 idedisk_set_max_address(ide_drive_t *drive, u64 addr_req, int lba48)
296 {
297         ide_task_t args;
298         struct ide_taskfile *tf = &args.tf;
299         u64 addr_set = 0;
300
301         addr_req--;
302         /* Create IDE/ATA command request structure */
303         memset(&args, 0, sizeof(ide_task_t));
304         tf->lbal     = (addr_req >>  0) & 0xff;
305         tf->lbam     = (addr_req >>= 8) & 0xff;
306         tf->lbah     = (addr_req >>= 8) & 0xff;
307         if (lba48) {
308                 tf->hob_lbal = (addr_req >>= 8) & 0xff;
309                 tf->hob_lbam = (addr_req >>= 8) & 0xff;
310                 tf->hob_lbah = (addr_req >>= 8) & 0xff;
311                 tf->command  = ATA_CMD_SET_MAX_EXT;
312         } else {
313                 tf->device   = (addr_req >>= 8) & 0x0f;
314                 tf->command  = ATA_CMD_SET_MAX;
315         }
316         tf->device |= ATA_LBA;
317         args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
318         if (lba48)
319                 args.tf_flags |= (IDE_TFLAG_LBA48 | IDE_TFLAG_HOB);
320         /* submit command request */
321         ide_no_data_taskfile(drive, &args);
322         /* if OK, compute maximum address value */
323         if ((tf->status & 0x01) == 0)
324                 addr_set = ide_get_lba_addr(tf, lba48) + 1;
325
326         return addr_set;
327 }
328
329 static unsigned long long sectors_to_MB(unsigned long long n)
330 {
331         n <<= 9;                /* make it bytes */
332         do_div(n, 1000000);     /* make it MB */
333         return n;
334 }
335
336 /*
337  * Some disks report total number of sectors instead of
338  * maximum sector address.  We list them here.
339  */
340 static const struct drive_list_entry hpa_list[] = {
341         { "ST340823A",  NULL },
342         { "ST320413A",  NULL },
343         { "ST310211A",  NULL },
344         { NULL,         NULL }
345 };
346
347 static void idedisk_check_hpa(ide_drive_t *drive)
348 {
349         unsigned long long capacity, set_max;
350         int lba48 = ata_id_lba48_enabled(drive->id);
351
352         capacity = drive->capacity64;
353
354         set_max = idedisk_read_native_max_address(drive, lba48);
355
356         if (ide_in_drive_list(drive->id, hpa_list)) {
357                 /*
358                  * Since we are inclusive wrt to firmware revisions do this
359                  * extra check and apply the workaround only when needed.
360                  */
361                 if (set_max == capacity + 1)
362                         set_max--;
363         }
364
365         if (set_max <= capacity)
366                 return;
367
368         printk(KERN_INFO "%s: Host Protected Area detected.\n"
369                          "\tcurrent capacity is %llu sectors (%llu MB)\n"
370                          "\tnative  capacity is %llu sectors (%llu MB)\n",
371                          drive->name,
372                          capacity, sectors_to_MB(capacity),
373                          set_max, sectors_to_MB(set_max));
374
375         set_max = idedisk_set_max_address(drive, set_max, lba48);
376
377         if (set_max) {
378                 drive->capacity64 = set_max;
379                 printk(KERN_INFO "%s: Host Protected Area disabled.\n",
380                                  drive->name);
381         }
382 }
383
384 static void init_idedisk_capacity(ide_drive_t *drive)
385 {
386         u16 *id = drive->id;
387         /*
388          * If this drive supports the Host Protected Area feature set,
389          * then we may need to change our opinion about the drive's capacity.
390          */
391         int hpa = ata_id_hpa_enabled(id);
392
393         if (ata_id_lba48_enabled(id)) {
394                 /* drive speaks 48-bit LBA */
395                 drive->select.b.lba = 1;
396                 drive->capacity64 = ata_id_u64(id, ATA_ID_LBA_CAPACITY_2);
397                 if (hpa)
398                         idedisk_check_hpa(drive);
399         } else if (ata_id_has_lba(id) && ata_id_is_lba_capacity_ok(id)) {
400                 /* drive speaks 28-bit LBA */
401                 drive->select.b.lba = 1;
402                 drive->capacity64 = ata_id_u32(id, ATA_ID_LBA_CAPACITY);
403                 if (hpa)
404                         idedisk_check_hpa(drive);
405         } else {
406                 /* drive speaks boring old 28-bit CHS */
407                 drive->capacity64 = drive->cyl * drive->head * drive->sect;
408         }
409 }
410
411 static sector_t idedisk_capacity(ide_drive_t *drive)
412 {
413         return drive->capacity64;
414 }
415
416 #ifdef CONFIG_IDE_PROC_FS
417 static int smart_enable(ide_drive_t *drive)
418 {
419         ide_task_t args;
420         struct ide_taskfile *tf = &args.tf;
421
422         memset(&args, 0, sizeof(ide_task_t));
423         tf->feature = ATA_SMART_ENABLE;
424         tf->lbam    = ATA_SMART_LBAM_PASS;
425         tf->lbah    = ATA_SMART_LBAH_PASS;
426         tf->command = ATA_CMD_SMART;
427         args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
428         return ide_no_data_taskfile(drive, &args);
429 }
430
431 static int get_smart_data(ide_drive_t *drive, u8 *buf, u8 sub_cmd)
432 {
433         ide_task_t args;
434         struct ide_taskfile *tf = &args.tf;
435
436         memset(&args, 0, sizeof(ide_task_t));
437         tf->feature = sub_cmd;
438         tf->nsect   = 0x01;
439         tf->lbam    = ATA_SMART_LBAM_PASS;
440         tf->lbah    = ATA_SMART_LBAH_PASS;
441         tf->command = ATA_CMD_SMART;
442         args.tf_flags   = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
443         args.data_phase = TASKFILE_IN;
444         (void) smart_enable(drive);
445         return ide_raw_taskfile(drive, &args, buf, 1);
446 }
447
448 static int proc_idedisk_read_cache
449         (char *page, char **start, off_t off, int count, int *eof, void *data)
450 {
451         ide_drive_t     *drive = (ide_drive_t *) data;
452         char            *out = page;
453         int             len;
454
455         if (drive->id_read)
456                 len = sprintf(out, "%i\n", drive->id[ATA_ID_BUF_SIZE] / 2);
457         else
458                 len = sprintf(out, "(none)\n");
459
460         PROC_IDE_READ_RETURN(page, start, off, count, eof, len);
461 }
462
463 static int proc_idedisk_read_capacity
464         (char *page, char **start, off_t off, int count, int *eof, void *data)
465 {
466         ide_drive_t*drive = (ide_drive_t *)data;
467         int len;
468
469         len = sprintf(page, "%llu\n", (long long)idedisk_capacity(drive));
470
471         PROC_IDE_READ_RETURN(page, start, off, count, eof, len);
472 }
473
474 static int proc_idedisk_read_smart(char *page, char **start, off_t off,
475                                    int count, int *eof, void *data, u8 sub_cmd)
476 {
477         ide_drive_t     *drive = (ide_drive_t *)data;
478         int             len = 0, i = 0;
479
480         if (get_smart_data(drive, page, sub_cmd) == 0) {
481                 unsigned short *val = (unsigned short *) page;
482                 char *out = (char *)val + SECTOR_SIZE;
483
484                 page = out;
485                 do {
486                         out += sprintf(out, "%04x%c", le16_to_cpu(*val),
487                                        (++i & 7) ? ' ' : '\n');
488                         val += 1;
489                 } while (i < SECTOR_SIZE / 2);
490                 len = out - page;
491         }
492
493         PROC_IDE_READ_RETURN(page, start, off, count, eof, len);
494 }
495
496 static int proc_idedisk_read_sv
497         (char *page, char **start, off_t off, int count, int *eof, void *data)
498 {
499         return proc_idedisk_read_smart(page, start, off, count, eof, data,
500                                        ATA_SMART_READ_VALUES);
501 }
502
503 static int proc_idedisk_read_st
504         (char *page, char **start, off_t off, int count, int *eof, void *data)
505 {
506         return proc_idedisk_read_smart(page, start, off, count, eof, data,
507                                        ATA_SMART_READ_THRESHOLDS);
508 }
509
510 static ide_proc_entry_t idedisk_proc[] = {
511         { "cache",        S_IFREG|S_IRUGO, proc_idedisk_read_cache,    NULL },
512         { "capacity",     S_IFREG|S_IRUGO, proc_idedisk_read_capacity, NULL },
513         { "geometry",     S_IFREG|S_IRUGO, proc_ide_read_geometry,     NULL },
514         { "smart_values", S_IFREG|S_IRUSR, proc_idedisk_read_sv,       NULL },
515         { "smart_thresholds", S_IFREG|S_IRUSR, proc_idedisk_read_st,   NULL },
516         { NULL, 0, NULL, NULL }
517 };
518 #endif  /* CONFIG_IDE_PROC_FS */
519
520 static void idedisk_prepare_flush(struct request_queue *q, struct request *rq)
521 {
522         ide_drive_t *drive = q->queuedata;
523         ide_task_t *task = kmalloc(sizeof(*task), GFP_ATOMIC);
524
525         /* FIXME: map struct ide_taskfile on rq->cmd[] */
526         BUG_ON(task == NULL);
527
528         memset(task, 0, sizeof(*task));
529         if (ata_id_flush_ext_enabled(drive->id) &&
530             (drive->capacity64 >= (1UL << 28)))
531                 task->tf.command = ATA_CMD_FLUSH_EXT;
532         else
533                 task->tf.command = ATA_CMD_FLUSH;
534         task->tf_flags   = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE |
535                            IDE_TFLAG_DYN;
536         task->data_phase = TASKFILE_NO_DATA;
537
538         rq->cmd_type = REQ_TYPE_ATA_TASKFILE;
539         rq->cmd_flags |= REQ_SOFTBARRIER;
540         rq->special = task;
541 }
542
543 ide_devset_get(multcount, mult_count);
544
545 /*
546  * This is tightly woven into the driver->do_special can not touch.
547  * DON'T do it again until a total personality rewrite is committed.
548  */
549 static int set_multcount(ide_drive_t *drive, int arg)
550 {
551         struct request *rq;
552         int error;
553
554         if (arg < 0 || arg > (drive->id[ATA_ID_MAX_MULTSECT] & 0xff))
555                 return -EINVAL;
556
557         if (drive->special.b.set_multmode)
558                 return -EBUSY;
559
560         rq = blk_get_request(drive->queue, READ, __GFP_WAIT);
561         rq->cmd_type = REQ_TYPE_ATA_TASKFILE;
562
563         drive->mult_req = arg;
564         drive->special.b.set_multmode = 1;
565         error = blk_execute_rq(drive->queue, NULL, rq, 0);
566         blk_put_request(rq);
567
568         return (drive->mult_count == arg) ? 0 : -EIO;
569 }
570
571 ide_devset_get(nowerr, nowerr);
572
573 static int set_nowerr(ide_drive_t *drive, int arg)
574 {
575         if (arg < 0 || arg > 1)
576                 return -EINVAL;
577
578         if (ide_spin_wait_hwgroup(drive))
579                 return -EBUSY;
580         drive->nowerr = arg;
581         drive->bad_wstat = arg ? BAD_R_STAT : BAD_W_STAT;
582         spin_unlock_irq(&ide_lock);
583         return 0;
584 }
585
586 static void update_ordered(ide_drive_t *drive)
587 {
588         u16 *id = drive->id;
589         unsigned ordered = QUEUE_ORDERED_NONE;
590         prepare_flush_fn *prep_fn = NULL;
591
592         if (drive->wcache) {
593                 unsigned long long capacity;
594                 int barrier;
595                 /*
596                  * We must avoid issuing commands a drive does not
597                  * understand or we may crash it. We check flush cache
598                  * is supported. We also check we have the LBA48 flush
599                  * cache if the drive capacity is too large. By this
600                  * time we have trimmed the drive capacity if LBA48 is
601                  * not available so we don't need to recheck that.
602                  */
603                 capacity = idedisk_capacity(drive);
604                 barrier = ata_id_flush_enabled(id) && !drive->noflush &&
605                         (drive->addressing == 0 || capacity <= (1ULL << 28) ||
606                          ata_id_flush_ext_enabled(id));
607
608                 printk(KERN_INFO "%s: cache flushes %ssupported\n",
609                        drive->name, barrier ? "" : "not ");
610
611                 if (barrier) {
612                         ordered = QUEUE_ORDERED_DRAIN_FLUSH;
613                         prep_fn = idedisk_prepare_flush;
614                 }
615         } else
616                 ordered = QUEUE_ORDERED_DRAIN;
617
618         blk_queue_ordered(drive->queue, ordered, prep_fn);
619 }
620
621 ide_devset_get(wcache, wcache);
622
623 static int set_wcache(ide_drive_t *drive, int arg)
624 {
625         ide_task_t args;
626         int err = 1;
627
628         if (arg < 0 || arg > 1)
629                 return -EINVAL;
630
631         if (ata_id_flush_enabled(drive->id)) {
632                 memset(&args, 0, sizeof(ide_task_t));
633                 args.tf.feature = arg ?
634                         SETFEATURES_WC_ON : SETFEATURES_WC_OFF;
635                 args.tf.command = ATA_CMD_SET_FEATURES;
636                 args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
637                 err = ide_no_data_taskfile(drive, &args);
638                 if (err == 0)
639                         drive->wcache = arg;
640         }
641
642         update_ordered(drive);
643
644         return err;
645 }
646
647 static int do_idedisk_flushcache(ide_drive_t *drive)
648 {
649         ide_task_t args;
650
651         memset(&args, 0, sizeof(ide_task_t));
652         if (ata_id_flush_ext_enabled(drive->id))
653                 args.tf.command = ATA_CMD_FLUSH_EXT;
654         else
655                 args.tf.command = ATA_CMD_FLUSH;
656         args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
657         return ide_no_data_taskfile(drive, &args);
658 }
659
660 ide_devset_get(acoustic, acoustic);
661
662 static int set_acoustic(ide_drive_t *drive, int arg)
663 {
664         ide_task_t args;
665
666         if (arg < 0 || arg > 254)
667                 return -EINVAL;
668
669         memset(&args, 0, sizeof(ide_task_t));
670         args.tf.feature = arg ? SETFEATURES_AAM_ON : SETFEATURES_AAM_OFF;
671         args.tf.nsect   = arg;
672         args.tf.command = ATA_CMD_SET_FEATURES;
673         args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
674         ide_no_data_taskfile(drive, &args);
675         drive->acoustic = arg;
676         return 0;
677 }
678
679 ide_devset_get(addressing, addressing);
680
681 /*
682  * drive->addressing:
683  *      0: 28-bit
684  *      1: 48-bit
685  *      2: 48-bit capable doing 28-bit
686  */
687 static int set_addressing(ide_drive_t *drive, int arg)
688 {
689         if (arg < 0 || arg > 2)
690                 return -EINVAL;
691
692         drive->addressing =  0;
693
694         if (drive->hwif->host_flags & IDE_HFLAG_NO_LBA48)
695                 return 0;
696
697         if (ata_id_lba48_enabled(drive->id) == 0)
698                 return -EIO;
699
700         drive->addressing = arg;
701
702         return 0;
703 }
704
705 #ifdef CONFIG_IDE_PROC_FS
706 ide_devset_rw_nolock(acoustic,  0, 254, acoustic);
707 ide_devset_rw_nolock(address,   0,   2, addressing);
708 ide_devset_rw_nolock(multcount, 0,  16, multcount);
709 ide_devset_rw_nolock(nowerr,    0,   1, nowerr);
710 ide_devset_rw_nolock(wcache,    0,   1, wcache);
711
712 ide_devset_rw(bios_cyl,         0, 65535, bios_cyl);
713 ide_devset_rw(bios_head,        0,   255, bios_head);
714 ide_devset_rw(bios_sect,        0,    63, bios_sect);
715 ide_devset_rw(failures,         0, 65535, failures);
716 ide_devset_rw(lun,              0,     7, lun);
717 ide_devset_rw(max_failures,     0, 65535, max_failures);
718
719 static const struct ide_devset *idedisk_settings[] = {
720         &ide_devset_acoustic,
721         &ide_devset_address,
722         &ide_devset_bios_cyl,
723         &ide_devset_bios_head,
724         &ide_devset_bios_sect,
725         &ide_devset_failures,
726         &ide_devset_lun,
727         &ide_devset_max_failures,
728         &ide_devset_multcount,
729         &ide_devset_nowerr,
730         &ide_devset_wcache,
731         NULL
732 };
733 #endif
734
735 static void idedisk_setup(ide_drive_t *drive)
736 {
737         struct ide_disk_obj *idkp = drive->driver_data;
738         ide_hwif_t *hwif = drive->hwif;
739         u16 *id = drive->id;
740         char *m = (char *)&id[ATA_ID_PROD];
741         unsigned long long capacity;
742
743         ide_proc_register_driver(drive, idkp->driver);
744
745         if (drive->id_read == 0)
746                 return;
747
748         if (drive->removable) {
749                 /*
750                  * Removable disks (eg. SYQUEST); ignore 'WD' drives
751                  */
752                 if (m[0] != 'W' || m[1] != 'D')
753                         drive->doorlocking = 1;
754         }
755
756         (void)set_addressing(drive, 1);
757
758         if (drive->addressing == 1) {
759                 int max_s = 2048;
760
761                 if (max_s > hwif->rqsize)
762                         max_s = hwif->rqsize;
763
764                 blk_queue_max_sectors(drive->queue, max_s);
765         }
766
767         printk(KERN_INFO "%s: max request size: %dKiB\n", drive->name,
768                          drive->queue->max_sectors / 2);
769
770         /* calculate drive capacity, and select LBA if possible */
771         init_idedisk_capacity(drive);
772
773         /* limit drive capacity to 137GB if LBA48 cannot be used */
774         if (drive->addressing == 0 && drive->capacity64 > 1ULL << 28) {
775                 printk(KERN_WARNING "%s: cannot use LBA48 - full capacity "
776                        "%llu sectors (%llu MB)\n",
777                        drive->name, (unsigned long long)drive->capacity64,
778                        sectors_to_MB(drive->capacity64));
779                 drive->capacity64 = 1ULL << 28;
780         }
781
782         if ((hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA) && drive->addressing) {
783                 if (drive->capacity64 > 1ULL << 28) {
784                         printk(KERN_INFO "%s: cannot use LBA48 DMA - PIO mode"
785                                          " will be used for accessing sectors "
786                                          "> %u\n", drive->name, 1 << 28);
787                 } else
788                         drive->addressing = 0;
789         }
790
791         /*
792          * if possible, give fdisk access to more of the drive,
793          * by correcting bios_cyls:
794          */
795         capacity = idedisk_capacity(drive);
796
797         if (!drive->forced_geom) {
798                 if (ata_id_lba48_enabled(drive->id)) {
799                         /* compatibility */
800                         drive->bios_sect = 63;
801                         drive->bios_head = 255;
802                 }
803
804                 if (drive->bios_sect && drive->bios_head) {
805                         unsigned int cap0 = capacity; /* truncate to 32 bits */
806                         unsigned int cylsz, cyl;
807
808                         if (cap0 != capacity)
809                                 drive->bios_cyl = 65535;
810                         else {
811                                 cylsz = drive->bios_sect * drive->bios_head;
812                                 cyl = cap0 / cylsz;
813                                 if (cyl > 65535)
814                                         cyl = 65535;
815                                 if (cyl > drive->bios_cyl)
816                                         drive->bios_cyl = cyl;
817                         }
818                 }
819         }
820         printk(KERN_INFO "%s: %llu sectors (%llu MB)",
821                          drive->name, capacity, sectors_to_MB(capacity));
822
823         /* Only print cache size when it was specified */
824         if (id[ATA_ID_BUF_SIZE])
825                 printk(KERN_CONT " w/%dKiB Cache", id[ATA_ID_BUF_SIZE] / 2);
826
827         printk(KERN_CONT ", CHS=%d/%d/%d\n",
828                          drive->bios_cyl, drive->bios_head, drive->bios_sect);
829
830         /* write cache enabled? */
831         if ((id[ATA_ID_CSFO] & 1) || ata_id_wcache_enabled(id))
832                 drive->wcache = 1;
833
834         set_wcache(drive, 1);
835 }
836
837 static void ide_cacheflush_p(ide_drive_t *drive)
838 {
839         if (!drive->wcache || ata_id_flush_enabled(drive->id) == 0)
840                 return;
841
842         if (do_idedisk_flushcache(drive))
843                 printk(KERN_INFO "%s: wcache flush failed!\n", drive->name);
844 }
845
846 static void ide_disk_remove(ide_drive_t *drive)
847 {
848         struct ide_disk_obj *idkp = drive->driver_data;
849         struct gendisk *g = idkp->disk;
850
851         ide_proc_unregister_driver(drive, idkp->driver);
852
853         del_gendisk(g);
854
855         ide_cacheflush_p(drive);
856
857         ide_disk_put(idkp);
858 }
859
860 static void ide_disk_release(struct kref *kref)
861 {
862         struct ide_disk_obj *idkp = to_ide_disk(kref);
863         ide_drive_t *drive = idkp->drive;
864         struct gendisk *g = idkp->disk;
865
866         drive->driver_data = NULL;
867         g->private_data = NULL;
868         put_disk(g);
869         kfree(idkp);
870 }
871
872 static int ide_disk_probe(ide_drive_t *drive);
873
874 /*
875  * On HPA drives the capacity needs to be
876  * reinitilized on resume otherwise the disk
877  * can not be used and a hard reset is required
878  */
879 static void ide_disk_resume(ide_drive_t *drive)
880 {
881         if (ata_id_hpa_enabled(drive->id))
882                 init_idedisk_capacity(drive);
883 }
884
885 static void ide_device_shutdown(ide_drive_t *drive)
886 {
887 #ifdef  CONFIG_ALPHA
888         /* On Alpha, halt(8) doesn't actually turn the machine off,
889            it puts you into the sort of firmware monitor. Typically,
890            it's used to boot another kernel image, so it's not much
891            different from reboot(8). Therefore, we don't need to
892            spin down the disk in this case, especially since Alpha
893            firmware doesn't handle disks in standby mode properly.
894            On the other hand, it's reasonably safe to turn the power
895            off when the shutdown process reaches the firmware prompt,
896            as the firmware initialization takes rather long time -
897            at least 10 seconds, which should be sufficient for
898            the disk to expire its write cache. */
899         if (system_state != SYSTEM_POWER_OFF) {
900 #else
901         if (system_state == SYSTEM_RESTART) {
902 #endif
903                 ide_cacheflush_p(drive);
904                 return;
905         }
906
907         printk(KERN_INFO "Shutdown: %s\n", drive->name);
908
909         drive->gendev.bus->suspend(&drive->gendev, PMSG_SUSPEND);
910 }
911
912 static ide_driver_t idedisk_driver = {
913         .gen_driver = {
914                 .owner          = THIS_MODULE,
915                 .name           = "ide-disk",
916                 .bus            = &ide_bus_type,
917         },
918         .probe                  = ide_disk_probe,
919         .remove                 = ide_disk_remove,
920         .resume                 = ide_disk_resume,
921         .shutdown               = ide_device_shutdown,
922         .version                = IDEDISK_VERSION,
923         .media                  = ide_disk,
924         .do_request             = ide_do_rw_disk,
925         .end_request            = ide_end_request,
926         .error                  = __ide_error,
927 #ifdef CONFIG_IDE_PROC_FS
928         .proc                   = idedisk_proc,
929         .settings               = idedisk_settings,
930 #endif
931 };
932
933 static int idedisk_set_doorlock(ide_drive_t *drive, int on)
934 {
935         ide_task_t task;
936
937         memset(&task, 0, sizeof(task));
938         task.tf.command = on ? ATA_CMD_MEDIA_LOCK : ATA_CMD_MEDIA_UNLOCK;
939         task.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
940
941         return ide_no_data_taskfile(drive, &task);
942 }
943
944 static int idedisk_open(struct inode *inode, struct file *filp)
945 {
946         struct gendisk *disk = inode->i_bdev->bd_disk;
947         struct ide_disk_obj *idkp;
948         ide_drive_t *drive;
949
950         idkp = ide_disk_get(disk);
951         if (idkp == NULL)
952                 return -ENXIO;
953
954         drive = idkp->drive;
955
956         idkp->openers++;
957
958         if (drive->removable && idkp->openers == 1) {
959                 check_disk_change(inode->i_bdev);
960                 /*
961                  * Ignore the return code from door_lock,
962                  * since the open() has already succeeded,
963                  * and the door_lock is irrelevant at this point.
964                  */
965                 if (drive->doorlocking && idedisk_set_doorlock(drive, 1))
966                         drive->doorlocking = 0;
967         }
968         return 0;
969 }
970
971 static int idedisk_release(struct inode *inode, struct file *filp)
972 {
973         struct gendisk *disk = inode->i_bdev->bd_disk;
974         struct ide_disk_obj *idkp = ide_disk_g(disk);
975         ide_drive_t *drive = idkp->drive;
976
977         if (idkp->openers == 1)
978                 ide_cacheflush_p(drive);
979
980         if (drive->removable && idkp->openers == 1) {
981                 if (drive->doorlocking && idedisk_set_doorlock(drive, 0))
982                         drive->doorlocking = 0;
983         }
984
985         idkp->openers--;
986
987         ide_disk_put(idkp);
988
989         return 0;
990 }
991
992 static int idedisk_getgeo(struct block_device *bdev, struct hd_geometry *geo)
993 {
994         struct ide_disk_obj *idkp = ide_disk_g(bdev->bd_disk);
995         ide_drive_t *drive = idkp->drive;
996
997         geo->heads = drive->bios_head;
998         geo->sectors = drive->bios_sect;
999         geo->cylinders = (u16)drive->bios_cyl; /* truncate */
1000         return 0;
1001 }
1002
1003 static const struct ide_ioctl_devset ide_disk_ioctl_settings[] = {
1004 { HDIO_GET_ADDRESS,     HDIO_SET_ADDRESS,   get_addressing, set_addressing },
1005 { HDIO_GET_MULTCOUNT,   HDIO_SET_MULTCOUNT, get_multcount,  set_multcount  },
1006 { HDIO_GET_NOWERR,      HDIO_SET_NOWERR,    get_nowerr,     set_nowerr     },
1007 { HDIO_GET_WCACHE,      HDIO_SET_WCACHE,    get_wcache,     set_wcache     },
1008 { HDIO_GET_ACOUSTIC,    HDIO_SET_ACOUSTIC,  get_acoustic,   set_acoustic   },
1009 { 0 }
1010 };
1011
1012 static int idedisk_ioctl(struct inode *inode, struct file *file,
1013                         unsigned int cmd, unsigned long arg)
1014 {
1015         struct block_device *bdev = inode->i_bdev;
1016         struct ide_disk_obj *idkp = ide_disk_g(bdev->bd_disk);
1017         ide_drive_t *drive = idkp->drive;
1018         int err;
1019
1020         err = ide_setting_ioctl(drive, bdev, cmd, arg, ide_disk_ioctl_settings);
1021         if (err != -EOPNOTSUPP)
1022                 return err;
1023
1024         return generic_ide_ioctl(drive, file, bdev, cmd, arg);
1025 }
1026
1027 static int idedisk_media_changed(struct gendisk *disk)
1028 {
1029         struct ide_disk_obj *idkp = ide_disk_g(disk);
1030         ide_drive_t *drive = idkp->drive;
1031
1032         /* do not scan partitions twice if this is a removable device */
1033         if (drive->attach) {
1034                 drive->attach = 0;
1035                 return 0;
1036         }
1037         /* if removable, always assume it was changed */
1038         return drive->removable;
1039 }
1040
1041 static int idedisk_revalidate_disk(struct gendisk *disk)
1042 {
1043         struct ide_disk_obj *idkp = ide_disk_g(disk);
1044         set_capacity(disk, idedisk_capacity(idkp->drive));
1045         return 0;
1046 }
1047
1048 static struct block_device_operations idedisk_ops = {
1049         .owner                  = THIS_MODULE,
1050         .open                   = idedisk_open,
1051         .release                = idedisk_release,
1052         .ioctl                  = idedisk_ioctl,
1053         .getgeo                 = idedisk_getgeo,
1054         .media_changed          = idedisk_media_changed,
1055         .revalidate_disk        = idedisk_revalidate_disk
1056 };
1057
1058 MODULE_DESCRIPTION("ATA DISK Driver");
1059
1060 static int ide_disk_probe(ide_drive_t *drive)
1061 {
1062         struct ide_disk_obj *idkp;
1063         struct gendisk *g;
1064
1065         /* strstr("foo", "") is non-NULL */
1066         if (!strstr("ide-disk", drive->driver_req))
1067                 goto failed;
1068
1069         if (drive->media != ide_disk)
1070                 goto failed;
1071
1072         idkp = kzalloc(sizeof(*idkp), GFP_KERNEL);
1073         if (!idkp)
1074                 goto failed;
1075
1076         g = alloc_disk_node(IDE_DISK_MINORS, hwif_to_node(drive->hwif));
1077         if (!g)
1078                 goto out_free_idkp;
1079
1080         ide_init_disk(g, drive);
1081
1082         kref_init(&idkp->kref);
1083
1084         idkp->drive = drive;
1085         idkp->driver = &idedisk_driver;
1086         idkp->disk = g;
1087
1088         g->private_data = &idkp->driver;
1089
1090         drive->driver_data = idkp;
1091
1092         idedisk_setup(drive);
1093         if ((!drive->head || drive->head > 16) && !drive->select.b.lba) {
1094                 printk(KERN_ERR "%s: INVALID GEOMETRY: %d PHYSICAL HEADS?\n",
1095                         drive->name, drive->head);
1096                 drive->attach = 0;
1097         } else
1098                 drive->attach = 1;
1099
1100         g->minors = IDE_DISK_MINORS;
1101         g->driverfs_dev = &drive->gendev;
1102         g->flags |= GENHD_FL_EXT_DEVT;
1103         if (drive->removable)
1104                 g->flags |= GENHD_FL_REMOVABLE;
1105         set_capacity(g, idedisk_capacity(drive));
1106         g->fops = &idedisk_ops;
1107         add_disk(g);
1108         return 0;
1109
1110 out_free_idkp:
1111         kfree(idkp);
1112 failed:
1113         return -ENODEV;
1114 }
1115
1116 static void __exit idedisk_exit(void)
1117 {
1118         driver_unregister(&idedisk_driver.gen_driver);
1119 }
1120
1121 static int __init idedisk_init(void)
1122 {
1123         return driver_register(&idedisk_driver.gen_driver);
1124 }
1125
1126 MODULE_ALIAS("ide:*m-disk*");
1127 module_init(idedisk_init);
1128 module_exit(idedisk_exit);
1129 MODULE_LICENSE("GPL");