ide: move command related fields from ide_hwif_t to struct ide_cmd
[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
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 #include <linux/types.h>
18 #include <linux/string.h>
19 #include <linux/kernel.h>
20 #include <linux/timer.h>
21 #include <linux/mm.h>
22 #include <linux/interrupt.h>
23 #include <linux/major.h>
24 #include <linux/errno.h>
25 #include <linux/genhd.h>
26 #include <linux/slab.h>
27 #include <linux/delay.h>
28 #include <linux/mutex.h>
29 #include <linux/leds.h>
30 #include <linux/ide.h>
31 #include <linux/hdreg.h>
32
33 #include <asm/byteorder.h>
34 #include <asm/irq.h>
35 #include <asm/uaccess.h>
36 #include <asm/io.h>
37 #include <asm/div64.h>
38
39 #include "ide-disk.h"
40
41 static const u8 ide_rw_cmds[] = {
42         ATA_CMD_READ_MULTI,
43         ATA_CMD_WRITE_MULTI,
44         ATA_CMD_READ_MULTI_EXT,
45         ATA_CMD_WRITE_MULTI_EXT,
46         ATA_CMD_PIO_READ,
47         ATA_CMD_PIO_WRITE,
48         ATA_CMD_PIO_READ_EXT,
49         ATA_CMD_PIO_WRITE_EXT,
50         ATA_CMD_READ,
51         ATA_CMD_WRITE,
52         ATA_CMD_READ_EXT,
53         ATA_CMD_WRITE_EXT,
54 };
55
56 static const u8 ide_data_phases[] = {
57         TASKFILE_MULTI_IN,
58         TASKFILE_MULTI_OUT,
59         TASKFILE_IN,
60         TASKFILE_OUT,
61         TASKFILE_IN_DMA,
62         TASKFILE_OUT_DMA,
63 };
64
65 static void ide_tf_set_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 dma)
66 {
67         u8 index, lba48, write;
68
69         lba48 = (cmd->tf_flags & IDE_TFLAG_LBA48) ? 2 : 0;
70         write = (cmd->tf_flags & IDE_TFLAG_WRITE) ? 1 : 0;
71
72         if (dma)
73                 index = 8;
74         else
75                 index = drive->mult_count ? 0 : 4;
76
77         cmd->tf.command = ide_rw_cmds[index + lba48 + write];
78
79         if (dma)
80                 index = 8; /* fixup index */
81
82         cmd->data_phase = ide_data_phases[index / 2 + write];
83 }
84
85 /*
86  * __ide_do_rw_disk() issues READ and WRITE commands to a disk,
87  * using LBA if supported, or CHS otherwise, to address sectors.
88  */
89 static ide_startstop_t __ide_do_rw_disk(ide_drive_t *drive, struct request *rq,
90                                         sector_t block)
91 {
92         ide_hwif_t *hwif        = drive->hwif;
93         u16 nsectors            = (u16)rq->nr_sectors;
94         u8 lba48                = !!(drive->dev_flags & IDE_DFLAG_LBA48);
95         u8 dma                  = !!(drive->dev_flags & IDE_DFLAG_USING_DMA);
96         struct ide_cmd          cmd;
97         struct ide_taskfile     *tf = &cmd.tf;
98         ide_startstop_t         rc;
99
100         if ((hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA) && lba48 && dma) {
101                 if (block + rq->nr_sectors > 1ULL << 28)
102                         dma = 0;
103                 else
104                         lba48 = 0;
105         }
106
107         memset(&cmd, 0, sizeof(cmd));
108         cmd.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
109
110         if (dma == 0) {
111                 ide_init_sg_cmd(&cmd, nsectors);
112                 ide_map_sg(drive, rq);
113         }
114
115         if (drive->dev_flags & IDE_DFLAG_LBA) {
116                 if (lba48) {
117                         pr_debug("%s: LBA=0x%012llx\n", drive->name,
118                                         (unsigned long long)block);
119
120                         tf->hob_nsect = (nsectors >> 8) & 0xff;
121                         tf->hob_lbal  = (u8)(block >> 24);
122                         if (sizeof(block) != 4) {
123                                 tf->hob_lbam = (u8)((u64)block >> 32);
124                                 tf->hob_lbah = (u8)((u64)block >> 40);
125                         }
126
127                         tf->nsect  = nsectors & 0xff;
128                         tf->lbal   = (u8) block;
129                         tf->lbam   = (u8)(block >>  8);
130                         tf->lbah   = (u8)(block >> 16);
131
132                         cmd.tf_flags |= (IDE_TFLAG_LBA48 | IDE_TFLAG_HOB);
133                 } else {
134                         tf->nsect  = nsectors & 0xff;
135                         tf->lbal   = block;
136                         tf->lbam   = block >>= 8;
137                         tf->lbah   = block >>= 8;
138                         tf->device = (block >> 8) & 0xf;
139                 }
140
141                 tf->device |= ATA_LBA;
142         } else {
143                 unsigned int sect, head, cyl, track;
144
145                 track = (int)block / drive->sect;
146                 sect  = (int)block % drive->sect + 1;
147                 head  = track % drive->head;
148                 cyl   = track / drive->head;
149
150                 pr_debug("%s: CHS=%u/%u/%u\n", drive->name, cyl, head, sect);
151
152                 tf->nsect  = nsectors & 0xff;
153                 tf->lbal   = sect;
154                 tf->lbam   = cyl;
155                 tf->lbah   = cyl >> 8;
156                 tf->device = head;
157         }
158
159         cmd.tf_flags |= IDE_TFLAG_FS;
160
161         if (rq_data_dir(rq))
162                 cmd.tf_flags |= IDE_TFLAG_WRITE;
163
164         ide_tf_set_cmd(drive, &cmd, dma);
165         cmd.rq = rq;
166
167         rc = do_rw_taskfile(drive, &cmd);
168
169         if (rc == ide_stopped && dma) {
170                 /* fallback to PIO */
171                 cmd.tf_flags |= IDE_TFLAG_DMA_PIO_FALLBACK;
172                 ide_tf_set_cmd(drive, &cmd, 0);
173                 ide_init_sg_cmd(&cmd, nsectors);
174                 rc = do_rw_taskfile(drive, &cmd);
175         }
176
177         return rc;
178 }
179
180 /*
181  * 268435455  == 137439 MB or 28bit limit
182  * 320173056  == 163929 MB or 48bit addressing
183  * 1073741822 == 549756 MB or 48bit addressing fake drive
184  */
185
186 static ide_startstop_t ide_do_rw_disk(ide_drive_t *drive, struct request *rq,
187                                       sector_t block)
188 {
189         ide_hwif_t *hwif = drive->hwif;
190
191         BUG_ON(drive->dev_flags & IDE_DFLAG_BLOCKED);
192
193         if (!blk_fs_request(rq)) {
194                 blk_dump_rq_flags(rq, "ide_do_rw_disk - bad command");
195                 ide_end_request(drive, 0, 0);
196                 return ide_stopped;
197         }
198
199         ledtrig_ide_activity();
200
201         pr_debug("%s: %sing: block=%llu, sectors=%lu, buffer=0x%08lx\n",
202                  drive->name, rq_data_dir(rq) == READ ? "read" : "writ",
203                  (unsigned long long)block, rq->nr_sectors,
204                  (unsigned long)rq->buffer);
205
206         if (hwif->rw_disk)
207                 hwif->rw_disk(drive, rq);
208
209         return __ide_do_rw_disk(drive, rq, block);
210 }
211
212 /*
213  * Queries for true maximum capacity of the drive.
214  * Returns maximum LBA address (> 0) of the drive, 0 if failed.
215  */
216 static u64 idedisk_read_native_max_address(ide_drive_t *drive, int lba48)
217 {
218         struct ide_cmd cmd;
219         struct ide_taskfile *tf = &cmd.tf;
220         u64 addr = 0;
221
222         memset(&cmd, 0, sizeof(cmd));
223         if (lba48)
224                 tf->command = ATA_CMD_READ_NATIVE_MAX_EXT;
225         else
226                 tf->command = ATA_CMD_READ_NATIVE_MAX;
227         tf->device  = ATA_LBA;
228
229         cmd.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
230         if (lba48)
231                 cmd.tf_flags |= (IDE_TFLAG_LBA48 | IDE_TFLAG_HOB);
232
233         ide_no_data_taskfile(drive, &cmd);
234
235         /* if OK, compute maximum address value */
236         if ((tf->status & 0x01) == 0)
237                 addr = ide_get_lba_addr(tf, lba48) + 1;
238
239         return addr;
240 }
241
242 /*
243  * Sets maximum virtual LBA address of the drive.
244  * Returns new maximum virtual LBA address (> 0) or 0 on failure.
245  */
246 static u64 idedisk_set_max_address(ide_drive_t *drive, u64 addr_req, int lba48)
247 {
248         struct ide_cmd cmd;
249         struct ide_taskfile *tf = &cmd.tf;
250         u64 addr_set = 0;
251
252         addr_req--;
253
254         memset(&cmd, 0, sizeof(cmd));
255         tf->lbal     = (addr_req >>  0) & 0xff;
256         tf->lbam     = (addr_req >>= 8) & 0xff;
257         tf->lbah     = (addr_req >>= 8) & 0xff;
258         if (lba48) {
259                 tf->hob_lbal = (addr_req >>= 8) & 0xff;
260                 tf->hob_lbam = (addr_req >>= 8) & 0xff;
261                 tf->hob_lbah = (addr_req >>= 8) & 0xff;
262                 tf->command  = ATA_CMD_SET_MAX_EXT;
263         } else {
264                 tf->device   = (addr_req >>= 8) & 0x0f;
265                 tf->command  = ATA_CMD_SET_MAX;
266         }
267         tf->device |= ATA_LBA;
268
269         cmd.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
270         if (lba48)
271                 cmd.tf_flags |= (IDE_TFLAG_LBA48 | IDE_TFLAG_HOB);
272
273         ide_no_data_taskfile(drive, &cmd);
274
275         /* if OK, compute maximum address value */
276         if ((tf->status & 0x01) == 0)
277                 addr_set = ide_get_lba_addr(tf, lba48) + 1;
278
279         return addr_set;
280 }
281
282 static unsigned long long sectors_to_MB(unsigned long long n)
283 {
284         n <<= 9;                /* make it bytes */
285         do_div(n, 1000000);     /* make it MB */
286         return n;
287 }
288
289 /*
290  * Some disks report total number of sectors instead of
291  * maximum sector address.  We list them here.
292  */
293 static const struct drive_list_entry hpa_list[] = {
294         { "ST340823A",  NULL },
295         { "ST320413A",  NULL },
296         { "ST310211A",  NULL },
297         { NULL,         NULL }
298 };
299
300 static void idedisk_check_hpa(ide_drive_t *drive)
301 {
302         unsigned long long capacity, set_max;
303         int lba48 = ata_id_lba48_enabled(drive->id);
304
305         capacity = drive->capacity64;
306
307         set_max = idedisk_read_native_max_address(drive, lba48);
308
309         if (ide_in_drive_list(drive->id, hpa_list)) {
310                 /*
311                  * Since we are inclusive wrt to firmware revisions do this
312                  * extra check and apply the workaround only when needed.
313                  */
314                 if (set_max == capacity + 1)
315                         set_max--;
316         }
317
318         if (set_max <= capacity)
319                 return;
320
321         printk(KERN_INFO "%s: Host Protected Area detected.\n"
322                          "\tcurrent capacity is %llu sectors (%llu MB)\n"
323                          "\tnative  capacity is %llu sectors (%llu MB)\n",
324                          drive->name,
325                          capacity, sectors_to_MB(capacity),
326                          set_max, sectors_to_MB(set_max));
327
328         set_max = idedisk_set_max_address(drive, set_max, lba48);
329
330         if (set_max) {
331                 drive->capacity64 = set_max;
332                 printk(KERN_INFO "%s: Host Protected Area disabled.\n",
333                                  drive->name);
334         }
335 }
336
337 static int ide_disk_get_capacity(ide_drive_t *drive)
338 {
339         u16 *id = drive->id;
340         int lba;
341
342         if (ata_id_lba48_enabled(id)) {
343                 /* drive speaks 48-bit LBA */
344                 lba = 1;
345                 drive->capacity64 = ata_id_u64(id, ATA_ID_LBA_CAPACITY_2);
346         } else if (ata_id_has_lba(id) && ata_id_is_lba_capacity_ok(id)) {
347                 /* drive speaks 28-bit LBA */
348                 lba = 1;
349                 drive->capacity64 = ata_id_u32(id, ATA_ID_LBA_CAPACITY);
350         } else {
351                 /* drive speaks boring old 28-bit CHS */
352                 lba = 0;
353                 drive->capacity64 = drive->cyl * drive->head * drive->sect;
354         }
355
356         if (lba) {
357                 drive->dev_flags |= IDE_DFLAG_LBA;
358
359                 /*
360                 * If this device supports the Host Protected Area feature set,
361                 * then we may need to change our opinion about its capacity.
362                 */
363                 if (ata_id_hpa_enabled(id))
364                         idedisk_check_hpa(drive);
365         }
366
367         /* limit drive capacity to 137GB if LBA48 cannot be used */
368         if ((drive->dev_flags & IDE_DFLAG_LBA48) == 0 &&
369             drive->capacity64 > 1ULL << 28) {
370                 printk(KERN_WARNING "%s: cannot use LBA48 - full capacity "
371                        "%llu sectors (%llu MB)\n",
372                        drive->name, (unsigned long long)drive->capacity64,
373                        sectors_to_MB(drive->capacity64));
374                 drive->capacity64 = 1ULL << 28;
375         }
376
377         if ((drive->hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA) &&
378             (drive->dev_flags & IDE_DFLAG_LBA48)) {
379                 if (drive->capacity64 > 1ULL << 28) {
380                         printk(KERN_INFO "%s: cannot use LBA48 DMA - PIO mode"
381                                          " will be used for accessing sectors "
382                                          "> %u\n", drive->name, 1 << 28);
383                 } else
384                         drive->dev_flags &= ~IDE_DFLAG_LBA48;
385         }
386
387         return 0;
388 }
389
390 static void idedisk_prepare_flush(struct request_queue *q, struct request *rq)
391 {
392         ide_drive_t *drive = q->queuedata;
393         struct ide_cmd *cmd = kmalloc(sizeof(*cmd), GFP_ATOMIC);
394
395         /* FIXME: map struct ide_taskfile on rq->cmd[] */
396         BUG_ON(cmd == NULL);
397
398         memset(cmd, 0, sizeof(*cmd));
399         if (ata_id_flush_ext_enabled(drive->id) &&
400             (drive->capacity64 >= (1UL << 28)))
401                 cmd->tf.command = ATA_CMD_FLUSH_EXT;
402         else
403                 cmd->tf.command = ATA_CMD_FLUSH;
404         cmd->tf_flags    = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE |
405                            IDE_TFLAG_DYN;
406         cmd->data_phase = TASKFILE_NO_DATA;
407
408         rq->cmd_type = REQ_TYPE_ATA_TASKFILE;
409         rq->cmd_flags |= REQ_SOFTBARRIER;
410         rq->special = cmd;
411 }
412
413 ide_devset_get(multcount, mult_count);
414
415 /*
416  * This is tightly woven into the driver->do_special can not touch.
417  * DON'T do it again until a total personality rewrite is committed.
418  */
419 static int set_multcount(ide_drive_t *drive, int arg)
420 {
421         struct request *rq;
422         int error;
423
424         if (arg < 0 || arg > (drive->id[ATA_ID_MAX_MULTSECT] & 0xff))
425                 return -EINVAL;
426
427         if (drive->special.b.set_multmode)
428                 return -EBUSY;
429
430         rq = blk_get_request(drive->queue, READ, __GFP_WAIT);
431         rq->cmd_type = REQ_TYPE_ATA_TASKFILE;
432
433         drive->mult_req = arg;
434         drive->special.b.set_multmode = 1;
435         error = blk_execute_rq(drive->queue, NULL, rq, 0);
436         blk_put_request(rq);
437
438         return (drive->mult_count == arg) ? 0 : -EIO;
439 }
440
441 ide_devset_get_flag(nowerr, IDE_DFLAG_NOWERR);
442
443 static int set_nowerr(ide_drive_t *drive, int arg)
444 {
445         if (arg < 0 || arg > 1)
446                 return -EINVAL;
447
448         if (arg)
449                 drive->dev_flags |= IDE_DFLAG_NOWERR;
450         else
451                 drive->dev_flags &= ~IDE_DFLAG_NOWERR;
452
453         drive->bad_wstat = arg ? BAD_R_STAT : BAD_W_STAT;
454
455         return 0;
456 }
457
458 static int ide_do_setfeature(ide_drive_t *drive, u8 feature, u8 nsect)
459 {
460         struct ide_cmd cmd;
461
462         memset(&cmd, 0, sizeof(cmd));
463         cmd.tf.feature = feature;
464         cmd.tf.nsect   = nsect;
465         cmd.tf.command = ATA_CMD_SET_FEATURES;
466         cmd.tf_flags   = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
467
468         return ide_no_data_taskfile(drive, &cmd);
469 }
470
471 static void update_ordered(ide_drive_t *drive)
472 {
473         u16 *id = drive->id;
474         unsigned ordered = QUEUE_ORDERED_NONE;
475         prepare_flush_fn *prep_fn = NULL;
476
477         if (drive->dev_flags & IDE_DFLAG_WCACHE) {
478                 unsigned long long capacity;
479                 int barrier;
480                 /*
481                  * We must avoid issuing commands a drive does not
482                  * understand or we may crash it. We check flush cache
483                  * is supported. We also check we have the LBA48 flush
484                  * cache if the drive capacity is too large. By this
485                  * time we have trimmed the drive capacity if LBA48 is
486                  * not available so we don't need to recheck that.
487                  */
488                 capacity = ide_gd_capacity(drive);
489                 barrier = ata_id_flush_enabled(id) &&
490                         (drive->dev_flags & IDE_DFLAG_NOFLUSH) == 0 &&
491                         ((drive->dev_flags & IDE_DFLAG_LBA48) == 0 ||
492                          capacity <= (1ULL << 28) ||
493                          ata_id_flush_ext_enabled(id));
494
495                 printk(KERN_INFO "%s: cache flushes %ssupported\n",
496                        drive->name, barrier ? "" : "not ");
497
498                 if (barrier) {
499                         ordered = QUEUE_ORDERED_DRAIN_FLUSH;
500                         prep_fn = idedisk_prepare_flush;
501                 }
502         } else
503                 ordered = QUEUE_ORDERED_DRAIN;
504
505         blk_queue_ordered(drive->queue, ordered, prep_fn);
506 }
507
508 ide_devset_get_flag(wcache, IDE_DFLAG_WCACHE);
509
510 static int set_wcache(ide_drive_t *drive, int arg)
511 {
512         int err = 1;
513
514         if (arg < 0 || arg > 1)
515                 return -EINVAL;
516
517         if (ata_id_flush_enabled(drive->id)) {
518                 err = ide_do_setfeature(drive,
519                         arg ? SETFEATURES_WC_ON : SETFEATURES_WC_OFF, 0);
520                 if (err == 0) {
521                         if (arg)
522                                 drive->dev_flags |= IDE_DFLAG_WCACHE;
523                         else
524                                 drive->dev_flags &= ~IDE_DFLAG_WCACHE;
525                 }
526         }
527
528         update_ordered(drive);
529
530         return err;
531 }
532
533 static int do_idedisk_flushcache(ide_drive_t *drive)
534 {
535         struct ide_cmd cmd;
536
537         memset(&cmd, 0, sizeof(cmd));
538         if (ata_id_flush_ext_enabled(drive->id))
539                 cmd.tf.command = ATA_CMD_FLUSH_EXT;
540         else
541                 cmd.tf.command = ATA_CMD_FLUSH;
542         cmd.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
543
544         return ide_no_data_taskfile(drive, &cmd);
545 }
546
547 ide_devset_get(acoustic, acoustic);
548
549 static int set_acoustic(ide_drive_t *drive, int arg)
550 {
551         if (arg < 0 || arg > 254)
552                 return -EINVAL;
553
554         ide_do_setfeature(drive,
555                 arg ? SETFEATURES_AAM_ON : SETFEATURES_AAM_OFF, arg);
556
557         drive->acoustic = arg;
558
559         return 0;
560 }
561
562 ide_devset_get_flag(addressing, IDE_DFLAG_LBA48);
563
564 /*
565  * drive->addressing:
566  *      0: 28-bit
567  *      1: 48-bit
568  *      2: 48-bit capable doing 28-bit
569  */
570 static int set_addressing(ide_drive_t *drive, int arg)
571 {
572         if (arg < 0 || arg > 2)
573                 return -EINVAL;
574
575         if (arg && ((drive->hwif->host_flags & IDE_HFLAG_NO_LBA48) ||
576             ata_id_lba48_enabled(drive->id) == 0))
577                 return -EIO;
578
579         if (arg == 2)
580                 arg = 0;
581
582         if (arg)
583                 drive->dev_flags |= IDE_DFLAG_LBA48;
584         else
585                 drive->dev_flags &= ~IDE_DFLAG_LBA48;
586
587         return 0;
588 }
589
590 ide_ext_devset_rw(acoustic, acoustic);
591 ide_ext_devset_rw(address, addressing);
592 ide_ext_devset_rw(multcount, multcount);
593 ide_ext_devset_rw(wcache, wcache);
594
595 ide_ext_devset_rw_sync(nowerr, nowerr);
596
597 static int ide_disk_check(ide_drive_t *drive, const char *s)
598 {
599         return 1;
600 }
601
602 static void ide_disk_setup(ide_drive_t *drive)
603 {
604         struct ide_disk_obj *idkp = drive->driver_data;
605         struct request_queue *q = drive->queue;
606         ide_hwif_t *hwif = drive->hwif;
607         u16 *id = drive->id;
608         char *m = (char *)&id[ATA_ID_PROD];
609         unsigned long long capacity;
610
611         ide_proc_register_driver(drive, idkp->driver);
612
613         if ((drive->dev_flags & IDE_DFLAG_ID_READ) == 0)
614                 return;
615
616         if (drive->dev_flags & IDE_DFLAG_REMOVABLE) {
617                 /*
618                  * Removable disks (eg. SYQUEST); ignore 'WD' drives
619                  */
620                 if (m[0] != 'W' || m[1] != 'D')
621                         drive->dev_flags |= IDE_DFLAG_DOORLOCKING;
622         }
623
624         (void)set_addressing(drive, 1);
625
626         if (drive->dev_flags & IDE_DFLAG_LBA48) {
627                 int max_s = 2048;
628
629                 if (max_s > hwif->rqsize)
630                         max_s = hwif->rqsize;
631
632                 blk_queue_max_sectors(q, max_s);
633         }
634
635         printk(KERN_INFO "%s: max request size: %dKiB\n", drive->name,
636                 q->max_sectors / 2);
637
638         if (ata_id_is_ssd(id))
639                 queue_flag_set_unlocked(QUEUE_FLAG_NONROT, q);
640
641         /* calculate drive capacity, and select LBA if possible */
642         ide_disk_get_capacity(drive);
643
644         /*
645          * if possible, give fdisk access to more of the drive,
646          * by correcting bios_cyls:
647          */
648         capacity = ide_gd_capacity(drive);
649
650         if ((drive->dev_flags & IDE_DFLAG_FORCED_GEOM) == 0) {
651                 if (ata_id_lba48_enabled(drive->id)) {
652                         /* compatibility */
653                         drive->bios_sect = 63;
654                         drive->bios_head = 255;
655                 }
656
657                 if (drive->bios_sect && drive->bios_head) {
658                         unsigned int cap0 = capacity; /* truncate to 32 bits */
659                         unsigned int cylsz, cyl;
660
661                         if (cap0 != capacity)
662                                 drive->bios_cyl = 65535;
663                         else {
664                                 cylsz = drive->bios_sect * drive->bios_head;
665                                 cyl = cap0 / cylsz;
666                                 if (cyl > 65535)
667                                         cyl = 65535;
668                                 if (cyl > drive->bios_cyl)
669                                         drive->bios_cyl = cyl;
670                         }
671                 }
672         }
673         printk(KERN_INFO "%s: %llu sectors (%llu MB)",
674                          drive->name, capacity, sectors_to_MB(capacity));
675
676         /* Only print cache size when it was specified */
677         if (id[ATA_ID_BUF_SIZE])
678                 printk(KERN_CONT " w/%dKiB Cache", id[ATA_ID_BUF_SIZE] / 2);
679
680         printk(KERN_CONT ", CHS=%d/%d/%d\n",
681                          drive->bios_cyl, drive->bios_head, drive->bios_sect);
682
683         /* write cache enabled? */
684         if ((id[ATA_ID_CSFO] & 1) || ata_id_wcache_enabled(id))
685                 drive->dev_flags |= IDE_DFLAG_WCACHE;
686
687         set_wcache(drive, 1);
688
689         if ((drive->dev_flags & IDE_DFLAG_LBA) == 0 &&
690             (drive->head == 0 || drive->head > 16)) {
691                 printk(KERN_ERR "%s: invalid geometry: %d physical heads?\n",
692                         drive->name, drive->head);
693                 drive->dev_flags &= ~IDE_DFLAG_ATTACH;
694         } else
695                 drive->dev_flags |= IDE_DFLAG_ATTACH;
696 }
697
698 static void ide_disk_flush(ide_drive_t *drive)
699 {
700         if (ata_id_flush_enabled(drive->id) == 0 ||
701             (drive->dev_flags & IDE_DFLAG_WCACHE) == 0)
702                 return;
703
704         if (do_idedisk_flushcache(drive))
705                 printk(KERN_INFO "%s: wcache flush failed!\n", drive->name);
706 }
707
708 static int ide_disk_init_media(ide_drive_t *drive, struct gendisk *disk)
709 {
710         return 0;
711 }
712
713 static int ide_disk_set_doorlock(ide_drive_t *drive, struct gendisk *disk,
714                                  int on)
715 {
716         struct ide_cmd cmd;
717         int ret;
718
719         if ((drive->dev_flags & IDE_DFLAG_DOORLOCKING) == 0)
720                 return 0;
721
722         memset(&cmd, 0, sizeof(cmd));
723         cmd.tf.command = on ? ATA_CMD_MEDIA_LOCK : ATA_CMD_MEDIA_UNLOCK;
724         cmd.tf_flags   = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
725
726         ret = ide_no_data_taskfile(drive, &cmd);
727
728         if (ret)
729                 drive->dev_flags &= ~IDE_DFLAG_DOORLOCKING;
730
731         return ret;
732 }
733
734 const struct ide_disk_ops ide_ata_disk_ops = {
735         .check          = ide_disk_check,
736         .get_capacity   = ide_disk_get_capacity,
737         .setup          = ide_disk_setup,
738         .flush          = ide_disk_flush,
739         .init_media     = ide_disk_init_media,
740         .set_doorlock   = ide_disk_set_doorlock,
741         .do_request     = ide_do_rw_disk,
742         .ioctl          = ide_disk_ioctl,
743 };