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