2 * linux/drivers/ide/ide-disk.c Version 1.18 Mar 05, 2003
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>
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>
15 * This is the IDE/ATA disk driver, as evolved from hd.c and ide.c.
18 #define IDEDISK_VERSION "1.18"
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>
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>
39 #include <linux/ide.h>
41 #include <asm/byteorder.h>
43 #include <asm/uaccess.h>
45 #include <asm/div64.h>
52 unsigned int openers; /* protected by BKL for now */
55 static DEFINE_MUTEX(idedisk_ref_mutex);
57 #define to_ide_disk(obj) container_of(obj, struct ide_disk_obj, kref)
59 #define ide_disk_g(disk) \
60 container_of((disk)->private_data, struct ide_disk_obj, driver)
62 static struct ide_disk_obj *ide_disk_get(struct gendisk *disk)
64 struct ide_disk_obj *idkp = NULL;
66 mutex_lock(&idedisk_ref_mutex);
67 idkp = ide_disk_g(disk);
69 kref_get(&idkp->kref);
70 mutex_unlock(&idedisk_ref_mutex);
74 static void ide_disk_release(struct kref *);
76 static void ide_disk_put(struct ide_disk_obj *idkp)
78 mutex_lock(&idedisk_ref_mutex);
79 kref_put(&idkp->kref, ide_disk_release);
80 mutex_unlock(&idedisk_ref_mutex);
84 * lba_capacity_is_ok() performs a sanity check on the claimed "lba_capacity"
85 * value for this drive (from its reported identification information).
87 * Returns: 1 if lba_capacity looks sensible
90 * It is called only once for each drive.
92 static int lba_capacity_is_ok (struct hd_driveid *id)
94 unsigned long lba_sects, chs_sects, head, tail;
96 /* No non-LBA info .. so valid! */
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.
106 if ((id->cyls == 16383
107 || (id->cyls == 4092 && id->cur_cyls == 16383)) &&
109 (id->heads == 15 || id->heads == 16) &&
110 (id->lba_capacity >= 16383*63*id->heads))
113 lba_sects = id->lba_capacity;
114 chs_sects = id->cyls * id->heads * id->sectors;
116 /* perform a rough sanity check on lba_sects: within 10% is OK */
117 if ((lba_sects - chs_sects) < chs_sects/10)
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 */
129 return 0; /* lba_capacity value may be bad */
133 * __ide_do_rw_disk() issues READ and WRITE commands to a disk,
134 * using LBA if supported, or CHS otherwise, to address sectors.
136 static ide_startstop_t __ide_do_rw_disk(ide_drive_t *drive, struct request *rq, sector_t block)
138 ide_hwif_t *hwif = HWIF(drive);
139 unsigned int dma = drive->using_dma;
140 u8 lba48 = (drive->addressing == 1) ? 1 : 0;
141 u8 command = WIN_NOP;
142 ata_nsector_t nsectors;
143 struct ide_taskfile ltf, *tf = <f;
145 nsectors.all = (u16) rq->nr_sectors;
147 if ((hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA) && lba48 && dma) {
148 if (block + rq->nr_sectors > 1ULL << 28)
155 ide_init_sg_cmd(drive, rq);
156 ide_map_sg(drive, rq);
160 hwif->OUTB(drive->ctl, IDE_CONTROL_REG);
162 /* FIXME: SELECT_MASK(drive, 0) ? */
164 memset(tf, 0, sizeof(*tf));
166 if (drive->select.b.lba) {
168 pr_debug("%s: LBA=0x%012llx\n", drive->name,
169 (unsigned long long)block);
171 tf->hob_nsect = nsectors.b.high;
172 tf->hob_lbal = (u8)(block >> 24);
173 if (sizeof(block) != 4) {
174 tf->hob_lbam = (u8)((u64)block >> 32);
175 tf->hob_lbah = (u8)((u64)block >> 40);
178 tf->nsect = nsectors.b.low;
179 tf->lbal = (u8) block;
180 tf->lbam = (u8)(block >> 8);
181 tf->lbah = (u8)(block >> 16);
183 printk("%s: 0x%02x%02x 0x%02x%02x%02x%02x%02x%02x\n",
184 drive->name, tf->hob_nsect, tf->nsect,
185 tf->hob_lbah, tf->hob_lbam, tf->hob_lbal,
186 tf->lbah, tf->lbam, tf->lbal);
189 tf->nsect = nsectors.b.low;
191 tf->lbam = block >>= 8;
192 tf->lbah = block >>= 8;
193 tf->device = (block >> 8) & 0xf;
196 unsigned int sect,head,cyl,track;
197 track = (int)block / drive->sect;
198 sect = (int)block % drive->sect + 1;
199 head = track % drive->head;
200 cyl = track / drive->head;
202 pr_debug("%s: CHS=%u/%u/%u\n", drive->name, cyl, head, sect);
204 tf->nsect = nsectors.b.low;
211 if (drive->select.b.lba && lba48) {
212 hwif->OUTB(tf->hob_feature, IDE_FEATURE_REG);
213 hwif->OUTB(tf->hob_nsect, IDE_NSECTOR_REG);
214 hwif->OUTB(tf->hob_lbal, IDE_SECTOR_REG);
215 hwif->OUTB(tf->hob_lbam, IDE_LCYL_REG);
216 hwif->OUTB(tf->hob_lbah, IDE_HCYL_REG);
219 hwif->OUTB(tf->feature, IDE_FEATURE_REG);
220 hwif->OUTB(tf->nsect, IDE_NSECTOR_REG);
221 hwif->OUTB(tf->lbal, IDE_SECTOR_REG);
222 hwif->OUTB(tf->lbam, IDE_LCYL_REG);
223 hwif->OUTB(tf->lbah, IDE_HCYL_REG);
225 hwif->OUTB(tf->device | drive->select.all, IDE_SELECT_REG);
228 if (!hwif->dma_setup(drive)) {
229 if (rq_data_dir(rq)) {
230 command = lba48 ? WIN_WRITEDMA_EXT : WIN_WRITEDMA;
232 command = lba48 ? WIN_WRITE_EXT: WIN_WRITE;
234 command = lba48 ? WIN_READDMA_EXT : WIN_READDMA;
236 command = lba48 ? WIN_READ_EXT: WIN_READ;
238 hwif->dma_exec_cmd(drive, command);
239 hwif->dma_start(drive);
242 /* fallback to PIO */
243 ide_init_sg_cmd(drive, rq);
246 if (rq_data_dir(rq) == READ) {
248 if (drive->mult_count) {
249 hwif->data_phase = TASKFILE_MULTI_IN;
250 command = lba48 ? WIN_MULTREAD_EXT : WIN_MULTREAD;
252 hwif->data_phase = TASKFILE_IN;
253 command = lba48 ? WIN_READ_EXT : WIN_READ;
256 ide_execute_command(drive, command, &task_in_intr, WAIT_CMD, NULL);
259 if (drive->mult_count) {
260 hwif->data_phase = TASKFILE_MULTI_OUT;
261 command = lba48 ? WIN_MULTWRITE_EXT : WIN_MULTWRITE;
263 hwif->data_phase = TASKFILE_OUT;
264 command = lba48 ? WIN_WRITE_EXT : WIN_WRITE;
267 /* FIXME: ->OUTBSYNC ? */
268 hwif->OUTB(command, IDE_COMMAND_REG);
270 return pre_task_out_intr(drive, rq);
275 * 268435455 == 137439 MB or 28bit limit
276 * 320173056 == 163929 MB or 48bit addressing
277 * 1073741822 == 549756 MB or 48bit addressing fake drive
280 static ide_startstop_t ide_do_rw_disk (ide_drive_t *drive, struct request *rq, sector_t block)
282 ide_hwif_t *hwif = HWIF(drive);
284 BUG_ON(drive->blocked);
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);
292 ledtrig_ide_activity();
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);
300 hwif->rw_disk(drive, rq);
302 return __ide_do_rw_disk(drive, rq, block);
306 * Queries for true maximum capacity of the drive.
307 * Returns maximum LBA address (> 0) of the drive, 0 if failed.
309 static u64 idedisk_read_native_max_address(ide_drive_t *drive, int lba48)
312 struct ide_taskfile *tf = &args.tf;
315 /* Create IDE/ATA command request structure */
316 memset(&args, 0, sizeof(ide_task_t));
318 tf->command = WIN_READ_NATIVE_MAX_EXT;
320 tf->command = WIN_READ_NATIVE_MAX;
321 tf->device = ATA_LBA;
322 args.command_type = IDE_DRIVE_TASK_NO_DATA;
323 args.handler = &task_no_data_intr;
324 /* submit command request */
325 ide_raw_taskfile(drive, &args, NULL);
327 /* if OK, compute maximum address value */
328 if ((tf->status & 0x01) == 0) {
332 high = (tf->hob_lbah << 16) | (tf->hob_lbam << 8) |
335 high = tf->device & 0xf;
336 low = (tf->lbah << 16) | (tf->lbam << 8) | tf->lbal;
337 addr = ((__u64)high << 24) | low;
338 addr++; /* since the return value is (maxlba - 1), we add 1 */
344 * Sets maximum virtual LBA address of the drive.
345 * Returns new maximum virtual LBA address (> 0) or 0 on failure.
347 static u64 idedisk_set_max_address(ide_drive_t *drive, u64 addr_req, int lba48)
350 struct ide_taskfile *tf = &args.tf;
354 /* Create IDE/ATA command request structure */
355 memset(&args, 0, sizeof(ide_task_t));
356 tf->lbal = (addr_req >> 0) & 0xff;
357 tf->lbam = (addr_req >>= 8) & 0xff;
358 tf->lbah = (addr_req >>= 8) & 0xff;
360 tf->hob_lbal = (addr_req >>= 8) & 0xff;
361 tf->hob_lbam = (addr_req >>= 8) & 0xff;
362 tf->hob_lbah = (addr_req >>= 8) & 0xff;
363 tf->command = WIN_SET_MAX_EXT;
365 tf->device = (addr_req >>= 8) & 0x0f;
366 tf->command = WIN_SET_MAX;
368 tf->device |= ATA_LBA;
369 args.command_type = IDE_DRIVE_TASK_NO_DATA;
370 args.handler = &task_no_data_intr;
371 /* submit command request */
372 ide_raw_taskfile(drive, &args, NULL);
373 /* if OK, compute maximum address value */
374 if ((tf->status & 0x01) == 0) {
378 high = (tf->hob_lbah << 16) | (tf->hob_lbam << 8) |
381 high = tf->device & 0xf;
382 low = (tf->lbah << 16) | (tf->lbam << 8) | tf->lbal;
383 addr_set = ((__u64)high << 24) | low;
389 static unsigned long long sectors_to_MB(unsigned long long n)
391 n <<= 9; /* make it bytes */
392 do_div(n, 1000000); /* make it MB */
397 * Bits 10 of command_set_1 and cfs_enable_1 must be equal,
398 * so on non-buggy drives we need test only one.
399 * However, we should also check whether these fields are valid.
401 static inline int idedisk_supports_hpa(const struct hd_driveid *id)
403 return (id->command_set_1 & 0x0400) && (id->cfs_enable_1 & 0x0400);
409 static inline int idedisk_supports_lba48(const struct hd_driveid *id)
411 return (id->command_set_2 & 0x0400) && (id->cfs_enable_2 & 0x0400)
412 && id->lba_capacity_2;
416 * Some disks report total number of sectors instead of
417 * maximum sector address. We list them here.
419 static const struct drive_list_entry hpa_list[] = {
420 { "ST340823A", NULL },
421 { "ST320413A", NULL },
425 static void idedisk_check_hpa(ide_drive_t *drive)
427 unsigned long long capacity, set_max;
428 int lba48 = idedisk_supports_lba48(drive->id);
430 capacity = drive->capacity64;
432 set_max = idedisk_read_native_max_address(drive, lba48);
434 if (ide_in_drive_list(drive->id, hpa_list)) {
436 * Since we are inclusive wrt to firmware revisions do this
437 * extra check and apply the workaround only when needed.
439 if (set_max == capacity + 1)
443 if (set_max <= capacity)
446 printk(KERN_INFO "%s: Host Protected Area detected.\n"
447 "\tcurrent capacity is %llu sectors (%llu MB)\n"
448 "\tnative capacity is %llu sectors (%llu MB)\n",
450 capacity, sectors_to_MB(capacity),
451 set_max, sectors_to_MB(set_max));
453 set_max = idedisk_set_max_address(drive, set_max, lba48);
456 drive->capacity64 = set_max;
457 printk(KERN_INFO "%s: Host Protected Area disabled.\n",
463 * Compute drive->capacity, the full capacity of the drive
464 * Called with drive->id != NULL.
466 * To compute capacity, this uses either of
468 * 1. CHS value set by user (whatever user sets will be trusted)
469 * 2. LBA value from target drive (require new ATA feature)
470 * 3. LBA value from system BIOS (new one is OK, old one may break)
471 * 4. CHS value from system BIOS (traditional style)
473 * in above order (i.e., if value of higher priority is available,
474 * reset will be ignored).
476 static void init_idedisk_capacity (ide_drive_t *drive)
478 struct hd_driveid *id = drive->id;
480 * If this drive supports the Host Protected Area feature set,
481 * then we may need to change our opinion about the drive's capacity.
483 int hpa = idedisk_supports_hpa(id);
485 if (idedisk_supports_lba48(id)) {
486 /* drive speaks 48-bit LBA */
487 drive->select.b.lba = 1;
488 drive->capacity64 = id->lba_capacity_2;
490 idedisk_check_hpa(drive);
491 } else if ((id->capability & 2) && lba_capacity_is_ok(id)) {
492 /* drive speaks 28-bit LBA */
493 drive->select.b.lba = 1;
494 drive->capacity64 = id->lba_capacity;
496 idedisk_check_hpa(drive);
498 /* drive speaks boring old 28-bit CHS */
499 drive->capacity64 = drive->cyl * drive->head * drive->sect;
503 static sector_t idedisk_capacity (ide_drive_t *drive)
505 return drive->capacity64 - drive->sect0;
508 #ifdef CONFIG_IDE_PROC_FS
509 static int smart_enable(ide_drive_t *drive)
512 struct ide_taskfile *tf = &args.tf;
514 memset(&args, 0, sizeof(ide_task_t));
515 tf->feature = SMART_ENABLE;
516 tf->lbam = SMART_LCYL_PASS;
517 tf->lbah = SMART_HCYL_PASS;
518 tf->command = WIN_SMART;
519 args.command_type = IDE_DRIVE_TASK_NO_DATA;
520 args.handler = &task_no_data_intr;
521 return ide_raw_taskfile(drive, &args, NULL);
524 static int get_smart_data(ide_drive_t *drive, u8 *buf, u8 sub_cmd)
527 struct ide_taskfile *tf = &args.tf;
529 memset(&args, 0, sizeof(ide_task_t));
530 tf->feature = sub_cmd;
532 tf->lbam = SMART_LCYL_PASS;
533 tf->lbah = SMART_HCYL_PASS;
534 tf->command = WIN_SMART;
535 args.command_type = IDE_DRIVE_TASK_IN;
536 args.data_phase = TASKFILE_IN;
537 args.handler = &task_in_intr;
538 (void) smart_enable(drive);
539 return ide_raw_taskfile(drive, &args, buf);
542 static int proc_idedisk_read_cache
543 (char *page, char **start, off_t off, int count, int *eof, void *data)
545 ide_drive_t *drive = (ide_drive_t *) data;
550 len = sprintf(out,"%i\n", drive->id->buf_size / 2);
552 len = sprintf(out,"(none)\n");
553 PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
556 static int proc_idedisk_read_capacity
557 (char *page, char **start, off_t off, int count, int *eof, void *data)
559 ide_drive_t*drive = (ide_drive_t *)data;
562 len = sprintf(page,"%llu\n", (long long)idedisk_capacity(drive));
563 PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
566 static int proc_idedisk_read_smart_thresholds
567 (char *page, char **start, off_t off, int count, int *eof, void *data)
569 ide_drive_t *drive = (ide_drive_t *)data;
572 if (get_smart_data(drive, page, SMART_READ_THRESHOLDS) == 0) {
573 unsigned short *val = (unsigned short *) page;
574 char *out = ((char *)val) + (SECTOR_WORDS * 4);
577 out += sprintf(out, "%04x%c", le16_to_cpu(*val), (++i & 7) ? ' ' : '\n');
579 } while (i < (SECTOR_WORDS * 2));
582 PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
585 static int proc_idedisk_read_smart_values
586 (char *page, char **start, off_t off, int count, int *eof, void *data)
588 ide_drive_t *drive = (ide_drive_t *)data;
591 if (get_smart_data(drive, page, SMART_READ_VALUES) == 0) {
592 unsigned short *val = (unsigned short *) page;
593 char *out = ((char *)val) + (SECTOR_WORDS * 4);
596 out += sprintf(out, "%04x%c", le16_to_cpu(*val), (++i & 7) ? ' ' : '\n');
598 } while (i < (SECTOR_WORDS * 2));
601 PROC_IDE_READ_RETURN(page,start,off,count,eof,len);
604 static ide_proc_entry_t idedisk_proc[] = {
605 { "cache", S_IFREG|S_IRUGO, proc_idedisk_read_cache, NULL },
606 { "capacity", S_IFREG|S_IRUGO, proc_idedisk_read_capacity, NULL },
607 { "geometry", S_IFREG|S_IRUGO, proc_ide_read_geometry, NULL },
608 { "smart_values", S_IFREG|S_IRUSR, proc_idedisk_read_smart_values, NULL },
609 { "smart_thresholds", S_IFREG|S_IRUSR, proc_idedisk_read_smart_thresholds, NULL },
610 { NULL, 0, NULL, NULL }
612 #endif /* CONFIG_IDE_PROC_FS */
614 static void idedisk_prepare_flush(struct request_queue *q, struct request *rq)
616 ide_drive_t *drive = q->queuedata;
618 memset(rq->cmd, 0, sizeof(rq->cmd));
620 if (ide_id_has_flush_cache_ext(drive->id) &&
621 (drive->capacity64 >= (1UL << 28)))
622 rq->cmd[0] = WIN_FLUSH_CACHE_EXT;
624 rq->cmd[0] = WIN_FLUSH_CACHE;
627 rq->cmd_type = REQ_TYPE_ATA_TASK;
628 rq->cmd_flags |= REQ_SOFTBARRIER;
629 rq->buffer = rq->cmd;
633 * This is tightly woven into the driver->do_special can not touch.
634 * DON'T do it again until a total personality rewrite is committed.
636 static int set_multcount(ide_drive_t *drive, int arg)
640 if (arg < 0 || arg > drive->id->max_multsect)
643 if (drive->special.b.set_multmode)
645 ide_init_drive_cmd (&rq);
646 rq.cmd_type = REQ_TYPE_ATA_CMD;
647 drive->mult_req = arg;
648 drive->special.b.set_multmode = 1;
649 (void) ide_do_drive_cmd (drive, &rq, ide_wait);
650 return (drive->mult_count == arg) ? 0 : -EIO;
653 static int set_nowerr(ide_drive_t *drive, int arg)
655 if (arg < 0 || arg > 1)
658 if (ide_spin_wait_hwgroup(drive))
661 drive->bad_wstat = arg ? BAD_R_STAT : BAD_W_STAT;
662 spin_unlock_irq(&ide_lock);
666 static void update_ordered(ide_drive_t *drive)
668 struct hd_driveid *id = drive->id;
669 unsigned ordered = QUEUE_ORDERED_NONE;
670 prepare_flush_fn *prep_fn = NULL;
673 unsigned long long capacity;
676 * We must avoid issuing commands a drive does not
677 * understand or we may crash it. We check flush cache
678 * is supported. We also check we have the LBA48 flush
679 * cache if the drive capacity is too large. By this
680 * time we have trimmed the drive capacity if LBA48 is
681 * not available so we don't need to recheck that.
683 capacity = idedisk_capacity(drive);
684 barrier = ide_id_has_flush_cache(id) && !drive->noflush &&
685 (drive->addressing == 0 || capacity <= (1ULL << 28) ||
686 ide_id_has_flush_cache_ext(id));
688 printk(KERN_INFO "%s: cache flushes %ssupported\n",
689 drive->name, barrier ? "" : "not ");
692 ordered = QUEUE_ORDERED_DRAIN_FLUSH;
693 prep_fn = idedisk_prepare_flush;
696 ordered = QUEUE_ORDERED_DRAIN;
698 blk_queue_ordered(drive->queue, ordered, prep_fn);
701 static int write_cache(ide_drive_t *drive, int arg)
706 if (arg < 0 || arg > 1)
709 if (ide_id_has_flush_cache(drive->id)) {
710 memset(&args, 0, sizeof(ide_task_t));
711 args.tf.feature = arg ?
712 SETFEATURES_EN_WCACHE : SETFEATURES_DIS_WCACHE;
713 args.tf.command = WIN_SETFEATURES;
714 args.command_type = IDE_DRIVE_TASK_NO_DATA;
715 args.handler = &task_no_data_intr;
716 err = ide_raw_taskfile(drive, &args, NULL);
721 update_ordered(drive);
726 static int do_idedisk_flushcache (ide_drive_t *drive)
730 memset(&args, 0, sizeof(ide_task_t));
731 if (ide_id_has_flush_cache_ext(drive->id))
732 args.tf.command = WIN_FLUSH_CACHE_EXT;
734 args.tf.command = WIN_FLUSH_CACHE;
735 args.command_type = IDE_DRIVE_TASK_NO_DATA;
736 args.handler = &task_no_data_intr;
737 return ide_raw_taskfile(drive, &args, NULL);
740 static int set_acoustic (ide_drive_t *drive, int arg)
744 if (arg < 0 || arg > 254)
747 memset(&args, 0, sizeof(ide_task_t));
748 args.tf.feature = arg ? SETFEATURES_EN_AAM : SETFEATURES_DIS_AAM;
750 args.tf.command = WIN_SETFEATURES;
751 args.command_type = IDE_DRIVE_TASK_NO_DATA;
752 args.handler = &task_no_data_intr;
753 ide_raw_taskfile(drive, &args, NULL);
754 drive->acoustic = arg;
762 * 2: 48-bit capable doing 28-bit
764 static int set_lba_addressing(ide_drive_t *drive, int arg)
766 if (arg < 0 || arg > 2)
769 drive->addressing = 0;
771 if (drive->hwif->host_flags & IDE_HFLAG_NO_LBA48)
774 if (!idedisk_supports_lba48(drive->id))
776 drive->addressing = arg;
780 #ifdef CONFIG_IDE_PROC_FS
781 static void idedisk_add_settings(ide_drive_t *drive)
783 struct hd_driveid *id = drive->id;
785 ide_add_setting(drive, "bios_cyl", SETTING_RW, TYPE_INT, 0, 65535, 1, 1, &drive->bios_cyl, NULL);
786 ide_add_setting(drive, "bios_head", SETTING_RW, TYPE_BYTE, 0, 255, 1, 1, &drive->bios_head, NULL);
787 ide_add_setting(drive, "bios_sect", SETTING_RW, TYPE_BYTE, 0, 63, 1, 1, &drive->bios_sect, NULL);
788 ide_add_setting(drive, "address", SETTING_RW, TYPE_BYTE, 0, 2, 1, 1, &drive->addressing, set_lba_addressing);
789 ide_add_setting(drive, "bswap", SETTING_READ, TYPE_BYTE, 0, 1, 1, 1, &drive->bswap, NULL);
790 ide_add_setting(drive, "multcount", SETTING_RW, TYPE_BYTE, 0, id->max_multsect, 1, 1, &drive->mult_count, set_multcount);
791 ide_add_setting(drive, "nowerr", SETTING_RW, TYPE_BYTE, 0, 1, 1, 1, &drive->nowerr, set_nowerr);
792 ide_add_setting(drive, "lun", SETTING_RW, TYPE_INT, 0, 7, 1, 1, &drive->lun, NULL);
793 ide_add_setting(drive, "wcache", SETTING_RW, TYPE_BYTE, 0, 1, 1, 1, &drive->wcache, write_cache);
794 ide_add_setting(drive, "acoustic", SETTING_RW, TYPE_BYTE, 0, 254, 1, 1, &drive->acoustic, set_acoustic);
795 ide_add_setting(drive, "failures", SETTING_RW, TYPE_INT, 0, 65535, 1, 1, &drive->failures, NULL);
796 ide_add_setting(drive, "max_failures", SETTING_RW, TYPE_INT, 0, 65535, 1, 1, &drive->max_failures, NULL);
799 static inline void idedisk_add_settings(ide_drive_t *drive) { ; }
802 static void idedisk_setup (ide_drive_t *drive)
804 ide_hwif_t *hwif = drive->hwif;
805 struct hd_driveid *id = drive->id;
806 unsigned long long capacity;
808 idedisk_add_settings(drive);
810 if (drive->id_read == 0)
813 if (drive->removable) {
815 * Removable disks (eg. SYQUEST); ignore 'WD' drives
817 if (id->model[0] != 'W' || id->model[1] != 'D') {
818 drive->doorlocking = 1;
822 (void)set_lba_addressing(drive, 1);
824 if (drive->addressing == 1) {
827 if (max_s > hwif->rqsize)
828 max_s = hwif->rqsize;
830 blk_queue_max_sectors(drive->queue, max_s);
833 printk(KERN_INFO "%s: max request size: %dKiB\n", drive->name, drive->queue->max_sectors / 2);
835 /* calculate drive capacity, and select LBA if possible */
836 init_idedisk_capacity (drive);
838 /* limit drive capacity to 137GB if LBA48 cannot be used */
839 if (drive->addressing == 0 && drive->capacity64 > 1ULL << 28) {
840 printk(KERN_WARNING "%s: cannot use LBA48 - full capacity "
841 "%llu sectors (%llu MB)\n",
842 drive->name, (unsigned long long)drive->capacity64,
843 sectors_to_MB(drive->capacity64));
844 drive->capacity64 = 1ULL << 28;
847 if ((hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA) && drive->addressing) {
848 if (drive->capacity64 > 1ULL << 28) {
849 printk(KERN_INFO "%s: cannot use LBA48 DMA - PIO mode will"
850 " be used for accessing sectors > %u\n",
851 drive->name, 1 << 28);
853 drive->addressing = 0;
857 * if possible, give fdisk access to more of the drive,
858 * by correcting bios_cyls:
860 capacity = idedisk_capacity (drive);
861 if (!drive->forced_geom) {
863 if (idedisk_supports_lba48(drive->id)) {
865 drive->bios_sect = 63;
866 drive->bios_head = 255;
869 if (drive->bios_sect && drive->bios_head) {
870 unsigned int cap0 = capacity; /* truncate to 32 bits */
871 unsigned int cylsz, cyl;
873 if (cap0 != capacity)
874 drive->bios_cyl = 65535;
876 cylsz = drive->bios_sect * drive->bios_head;
880 if (cyl > drive->bios_cyl)
881 drive->bios_cyl = cyl;
885 printk(KERN_INFO "%s: %llu sectors (%llu MB)",
886 drive->name, capacity, sectors_to_MB(capacity));
888 /* Only print cache size when it was specified */
890 printk (" w/%dKiB Cache", id->buf_size/2);
892 printk(KERN_CONT ", CHS=%d/%d/%d\n",
893 drive->bios_cyl, drive->bios_head, drive->bios_sect);
895 /* write cache enabled? */
896 if ((id->csfo & 1) || (id->cfs_enable_1 & (1 << 5)))
899 write_cache(drive, 1);
902 static void ide_cacheflush_p(ide_drive_t *drive)
904 if (!drive->wcache || !ide_id_has_flush_cache(drive->id))
907 if (do_idedisk_flushcache(drive))
908 printk(KERN_INFO "%s: wcache flush failed!\n", drive->name);
911 static void ide_disk_remove(ide_drive_t *drive)
913 struct ide_disk_obj *idkp = drive->driver_data;
914 struct gendisk *g = idkp->disk;
916 ide_proc_unregister_driver(drive, idkp->driver);
920 ide_cacheflush_p(drive);
925 static void ide_disk_release(struct kref *kref)
927 struct ide_disk_obj *idkp = to_ide_disk(kref);
928 ide_drive_t *drive = idkp->drive;
929 struct gendisk *g = idkp->disk;
931 drive->driver_data = NULL;
932 g->private_data = NULL;
937 static int ide_disk_probe(ide_drive_t *drive);
940 * On HPA drives the capacity needs to be
941 * reinitilized on resume otherwise the disk
942 * can not be used and a hard reset is required
944 static void ide_disk_resume(ide_drive_t *drive)
946 if (idedisk_supports_hpa(drive->id))
947 init_idedisk_capacity(drive);
950 static void ide_device_shutdown(ide_drive_t *drive)
953 /* On Alpha, halt(8) doesn't actually turn the machine off,
954 it puts you into the sort of firmware monitor. Typically,
955 it's used to boot another kernel image, so it's not much
956 different from reboot(8). Therefore, we don't need to
957 spin down the disk in this case, especially since Alpha
958 firmware doesn't handle disks in standby mode properly.
959 On the other hand, it's reasonably safe to turn the power
960 off when the shutdown process reaches the firmware prompt,
961 as the firmware initialization takes rather long time -
962 at least 10 seconds, which should be sufficient for
963 the disk to expire its write cache. */
964 if (system_state != SYSTEM_POWER_OFF) {
966 if (system_state == SYSTEM_RESTART) {
968 ide_cacheflush_p(drive);
972 printk("Shutdown: %s\n", drive->name);
973 drive->gendev.bus->suspend(&drive->gendev, PMSG_SUSPEND);
976 static ide_driver_t idedisk_driver = {
978 .owner = THIS_MODULE,
980 .bus = &ide_bus_type,
982 .probe = ide_disk_probe,
983 .remove = ide_disk_remove,
984 .resume = ide_disk_resume,
985 .shutdown = ide_device_shutdown,
986 .version = IDEDISK_VERSION,
988 .supports_dsc_overlap = 0,
989 .do_request = ide_do_rw_disk,
990 .end_request = ide_end_request,
991 .error = __ide_error,
992 .abort = __ide_abort,
993 #ifdef CONFIG_IDE_PROC_FS
994 .proc = idedisk_proc,
998 static int idedisk_open(struct inode *inode, struct file *filp)
1000 struct gendisk *disk = inode->i_bdev->bd_disk;
1001 struct ide_disk_obj *idkp;
1004 if (!(idkp = ide_disk_get(disk)))
1007 drive = idkp->drive;
1011 if (drive->removable && idkp->openers == 1) {
1013 memset(&args, 0, sizeof(ide_task_t));
1014 args.tf.command = WIN_DOORLOCK;
1015 args.command_type = IDE_DRIVE_TASK_NO_DATA;
1016 args.handler = &task_no_data_intr;
1017 check_disk_change(inode->i_bdev);
1019 * Ignore the return code from door_lock,
1020 * since the open() has already succeeded,
1021 * and the door_lock is irrelevant at this point.
1023 if (drive->doorlocking && ide_raw_taskfile(drive, &args, NULL))
1024 drive->doorlocking = 0;
1029 static int idedisk_release(struct inode *inode, struct file *filp)
1031 struct gendisk *disk = inode->i_bdev->bd_disk;
1032 struct ide_disk_obj *idkp = ide_disk_g(disk);
1033 ide_drive_t *drive = idkp->drive;
1035 if (idkp->openers == 1)
1036 ide_cacheflush_p(drive);
1038 if (drive->removable && idkp->openers == 1) {
1040 memset(&args, 0, sizeof(ide_task_t));
1041 args.tf.command = WIN_DOORUNLOCK;
1042 args.command_type = IDE_DRIVE_TASK_NO_DATA;
1043 args.handler = &task_no_data_intr;
1044 if (drive->doorlocking && ide_raw_taskfile(drive, &args, NULL))
1045 drive->doorlocking = 0;
1055 static int idedisk_getgeo(struct block_device *bdev, struct hd_geometry *geo)
1057 struct ide_disk_obj *idkp = ide_disk_g(bdev->bd_disk);
1058 ide_drive_t *drive = idkp->drive;
1060 geo->heads = drive->bios_head;
1061 geo->sectors = drive->bios_sect;
1062 geo->cylinders = (u16)drive->bios_cyl; /* truncate */
1066 static int idedisk_ioctl(struct inode *inode, struct file *file,
1067 unsigned int cmd, unsigned long arg)
1069 unsigned long flags;
1070 struct block_device *bdev = inode->i_bdev;
1071 struct ide_disk_obj *idkp = ide_disk_g(bdev->bd_disk);
1072 ide_drive_t *drive = idkp->drive;
1073 int err, (*setfunc)(ide_drive_t *, int);
1077 case HDIO_GET_ADDRESS: val = &drive->addressing; goto read_val;
1078 case HDIO_GET_MULTCOUNT: val = &drive->mult_count; goto read_val;
1079 case HDIO_GET_NOWERR: val = &drive->nowerr; goto read_val;
1080 case HDIO_GET_WCACHE: val = &drive->wcache; goto read_val;
1081 case HDIO_GET_ACOUSTIC: val = &drive->acoustic; goto read_val;
1082 case HDIO_SET_ADDRESS: setfunc = set_lba_addressing; goto set_val;
1083 case HDIO_SET_MULTCOUNT: setfunc = set_multcount; goto set_val;
1084 case HDIO_SET_NOWERR: setfunc = set_nowerr; goto set_val;
1085 case HDIO_SET_WCACHE: setfunc = write_cache; goto set_val;
1086 case HDIO_SET_ACOUSTIC: setfunc = set_acoustic; goto set_val;
1089 return generic_ide_ioctl(drive, file, bdev, cmd, arg);
1092 mutex_lock(&ide_setting_mtx);
1093 spin_lock_irqsave(&ide_lock, flags);
1095 spin_unlock_irqrestore(&ide_lock, flags);
1096 mutex_unlock(&ide_setting_mtx);
1097 return err >= 0 ? put_user(err, (long __user *)arg) : err;
1100 if (bdev != bdev->bd_contains)
1103 if (!capable(CAP_SYS_ADMIN))
1106 mutex_lock(&ide_setting_mtx);
1107 err = setfunc(drive, arg);
1108 mutex_unlock(&ide_setting_mtx);
1114 static int idedisk_media_changed(struct gendisk *disk)
1116 struct ide_disk_obj *idkp = ide_disk_g(disk);
1117 ide_drive_t *drive = idkp->drive;
1119 /* do not scan partitions twice if this is a removable device */
1120 if (drive->attach) {
1124 /* if removable, always assume it was changed */
1125 return drive->removable;
1128 static int idedisk_revalidate_disk(struct gendisk *disk)
1130 struct ide_disk_obj *idkp = ide_disk_g(disk);
1131 set_capacity(disk, idedisk_capacity(idkp->drive));
1135 static struct block_device_operations idedisk_ops = {
1136 .owner = THIS_MODULE,
1137 .open = idedisk_open,
1138 .release = idedisk_release,
1139 .ioctl = idedisk_ioctl,
1140 .getgeo = idedisk_getgeo,
1141 .media_changed = idedisk_media_changed,
1142 .revalidate_disk= idedisk_revalidate_disk
1145 MODULE_DESCRIPTION("ATA DISK Driver");
1147 static int ide_disk_probe(ide_drive_t *drive)
1149 struct ide_disk_obj *idkp;
1152 /* strstr("foo", "") is non-NULL */
1153 if (!strstr("ide-disk", drive->driver_req))
1155 if (!drive->present)
1157 if (drive->media != ide_disk)
1160 idkp = kzalloc(sizeof(*idkp), GFP_KERNEL);
1164 g = alloc_disk_node(1 << PARTN_BITS,
1165 hwif_to_node(drive->hwif));
1169 ide_init_disk(g, drive);
1171 ide_proc_register_driver(drive, &idedisk_driver);
1173 kref_init(&idkp->kref);
1175 idkp->drive = drive;
1176 idkp->driver = &idedisk_driver;
1179 g->private_data = &idkp->driver;
1181 drive->driver_data = idkp;
1183 idedisk_setup(drive);
1184 if ((!drive->head || drive->head > 16) && !drive->select.b.lba) {
1185 printk(KERN_ERR "%s: INVALID GEOMETRY: %d PHYSICAL HEADS?\n",
1186 drive->name, drive->head);
1191 g->minors = 1 << PARTN_BITS;
1192 g->driverfs_dev = &drive->gendev;
1193 g->flags = drive->removable ? GENHD_FL_REMOVABLE : 0;
1194 set_capacity(g, idedisk_capacity(drive));
1195 g->fops = &idedisk_ops;
1205 static void __exit idedisk_exit (void)
1207 driver_unregister(&idedisk_driver.gen_driver);
1210 static int __init idedisk_init(void)
1212 return driver_register(&idedisk_driver.gen_driver);
1215 MODULE_ALIAS("ide:*m-disk*");
1216 module_init(idedisk_init);
1217 module_exit(idedisk_exit);
1218 MODULE_LICENSE("GPL");