aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/ide-disk.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ide/ide-disk.c')
-rw-r--r--drivers/ide/ide-disk.c572
1 files changed, 180 insertions, 392 deletions
diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c
index 07ef88bd109b..3853bde8eedc 100644
--- a/drivers/ide/ide-disk.c
+++ b/drivers/ide/ide-disk.c
@@ -30,10 +30,8 @@
30#include <linux/delay.h> 30#include <linux/delay.h>
31#include <linux/mutex.h> 31#include <linux/mutex.h>
32#include <linux/leds.h> 32#include <linux/leds.h>
33
34#define _IDE_DISK
35
36#include <linux/ide.h> 33#include <linux/ide.h>
34#include <linux/hdreg.h>
37 35
38#include <asm/byteorder.h> 36#include <asm/byteorder.h>
39#include <asm/irq.h> 37#include <asm/irq.h>
@@ -41,21 +39,18 @@
41#include <asm/io.h> 39#include <asm/io.h>
42#include <asm/div64.h> 40#include <asm/div64.h>
43 41
44struct ide_disk_obj { 42#if !defined(CONFIG_DEBUG_BLOCK_EXT_DEVT)
45 ide_drive_t *drive; 43#define IDE_DISK_MINORS (1 << PARTN_BITS)
46 ide_driver_t *driver; 44#else
47 struct gendisk *disk; 45#define IDE_DISK_MINORS 0
48 struct kref kref; 46#endif
49 unsigned int openers; /* protected by BKL for now */ 47
50}; 48#include "ide-disk.h"
51 49
52static DEFINE_MUTEX(idedisk_ref_mutex); 50static DEFINE_MUTEX(idedisk_ref_mutex);
53 51
54#define to_ide_disk(obj) container_of(obj, struct ide_disk_obj, kref) 52#define to_ide_disk(obj) container_of(obj, struct ide_disk_obj, kref)
55 53
56#define ide_disk_g(disk) \
57 container_of((disk)->private_data, struct ide_disk_obj, driver)
58
59static void ide_disk_release(struct kref *); 54static void ide_disk_release(struct kref *);
60 55
61static struct ide_disk_obj *ide_disk_get(struct gendisk *disk) 56static struct ide_disk_obj *ide_disk_get(struct gendisk *disk)
@@ -84,68 +79,19 @@ static void ide_disk_put(struct ide_disk_obj *idkp)
84 mutex_unlock(&idedisk_ref_mutex); 79 mutex_unlock(&idedisk_ref_mutex);
85} 80}
86 81
87/*
88 * lba_capacity_is_ok() performs a sanity check on the claimed "lba_capacity"
89 * value for this drive (from its reported identification information).
90 *
91 * Returns: 1 if lba_capacity looks sensible
92 * 0 otherwise
93 *
94 * It is called only once for each drive.
95 */
96static int lba_capacity_is_ok(struct hd_driveid *id)
97{
98 unsigned long lba_sects, chs_sects, head, tail;
99
100 /* No non-LBA info .. so valid! */
101 if (id->cyls == 0)
102 return 1;
103
104 /*
105 * The ATA spec tells large drives to return
106 * C/H/S = 16383/16/63 independent of their size.
107 * Some drives can be jumpered to use 15 heads instead of 16.
108 * Some drives can be jumpered to use 4092 cyls instead of 16383.
109 */
110 if ((id->cyls == 16383
111 || (id->cyls == 4092 && id->cur_cyls == 16383)) &&
112 id->sectors == 63 &&
113 (id->heads == 15 || id->heads == 16) &&
114 (id->lba_capacity >= 16383*63*id->heads))
115 return 1;
116
117 lba_sects = id->lba_capacity;
118 chs_sects = id->cyls * id->heads * id->sectors;
119
120 /* perform a rough sanity check on lba_sects: within 10% is OK */
121 if ((lba_sects - chs_sects) < chs_sects/10)
122 return 1;
123
124 /* some drives have the word order reversed */
125 head = ((lba_sects >> 16) & 0xffff);
126 tail = (lba_sects & 0xffff);
127 lba_sects = (head | (tail << 16));
128 if ((lba_sects - chs_sects) < chs_sects/10) {
129 id->lba_capacity = lba_sects;
130 return 1; /* lba_capacity is (now) good */
131 }
132
133 return 0; /* lba_capacity value may be bad */
134}
135
136static const u8 ide_rw_cmds[] = { 82static const u8 ide_rw_cmds[] = {
137 WIN_MULTREAD, 83 ATA_CMD_READ_MULTI,
138 WIN_MULTWRITE, 84 ATA_CMD_WRITE_MULTI,
139 WIN_MULTREAD_EXT, 85 ATA_CMD_READ_MULTI_EXT,
140 WIN_MULTWRITE_EXT, 86 ATA_CMD_WRITE_MULTI_EXT,
141 WIN_READ, 87 ATA_CMD_PIO_READ,
142 WIN_WRITE, 88 ATA_CMD_PIO_WRITE,
143 WIN_READ_EXT, 89 ATA_CMD_PIO_READ_EXT,
144 WIN_WRITE_EXT, 90 ATA_CMD_PIO_WRITE_EXT,
145 WIN_READDMA, 91 ATA_CMD_READ,
146 WIN_WRITEDMA, 92 ATA_CMD_WRITE,
147 WIN_READDMA_EXT, 93 ATA_CMD_READ_EXT,
148 WIN_WRITEDMA_EXT, 94 ATA_CMD_WRITE_EXT,
149}; 95};
150 96
151static const u8 ide_data_phases[] = { 97static const u8 ide_data_phases[] = {
@@ -185,9 +131,9 @@ static ide_startstop_t __ide_do_rw_disk(ide_drive_t *drive, struct request *rq,
185 sector_t block) 131 sector_t block)
186{ 132{
187 ide_hwif_t *hwif = HWIF(drive); 133 ide_hwif_t *hwif = HWIF(drive);
188 unsigned int dma = drive->using_dma;
189 u16 nsectors = (u16)rq->nr_sectors; 134 u16 nsectors = (u16)rq->nr_sectors;
190 u8 lba48 = (drive->addressing == 1) ? 1 : 0; 135 u8 lba48 = !!(drive->dev_flags & IDE_DFLAG_LBA48);
136 u8 dma = !!(drive->dev_flags & IDE_DFLAG_USING_DMA);
191 ide_task_t task; 137 ide_task_t task;
192 struct ide_taskfile *tf = &task.tf; 138 struct ide_taskfile *tf = &task.tf;
193 ide_startstop_t rc; 139 ide_startstop_t rc;
@@ -207,7 +153,7 @@ static ide_startstop_t __ide_do_rw_disk(ide_drive_t *drive, struct request *rq,
207 memset(&task, 0, sizeof(task)); 153 memset(&task, 0, sizeof(task));
208 task.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE; 154 task.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
209 155
210 if (drive->select.b.lba) { 156 if (drive->dev_flags & IDE_DFLAG_LBA) {
211 if (lba48) { 157 if (lba48) {
212 pr_debug("%s: LBA=0x%012llx\n", drive->name, 158 pr_debug("%s: LBA=0x%012llx\n", drive->name,
213 (unsigned long long)block); 159 (unsigned long long)block);
@@ -232,6 +178,8 @@ static ide_startstop_t __ide_do_rw_disk(ide_drive_t *drive, struct request *rq,
232 tf->lbah = block >>= 8; 178 tf->lbah = block >>= 8;
233 tf->device = (block >> 8) & 0xf; 179 tf->device = (block >> 8) & 0xf;
234 } 180 }
181
182 tf->device |= ATA_LBA;
235 } else { 183 } else {
236 unsigned int sect, head, cyl, track; 184 unsigned int sect, head, cyl, track;
237 185
@@ -282,7 +230,7 @@ static ide_startstop_t ide_do_rw_disk(ide_drive_t *drive, struct request *rq,
282{ 230{
283 ide_hwif_t *hwif = HWIF(drive); 231 ide_hwif_t *hwif = HWIF(drive);
284 232
285 BUG_ON(drive->blocked); 233 BUG_ON(drive->dev_flags & IDE_DFLAG_BLOCKED);
286 234
287 if (!blk_fs_request(rq)) { 235 if (!blk_fs_request(rq)) {
288 blk_dump_rq_flags(rq, "ide_do_rw_disk - bad command"); 236 blk_dump_rq_flags(rq, "ide_do_rw_disk - bad command");
@@ -316,9 +264,9 @@ static u64 idedisk_read_native_max_address(ide_drive_t *drive, int lba48)
316 /* Create IDE/ATA command request structure */ 264 /* Create IDE/ATA command request structure */
317 memset(&args, 0, sizeof(ide_task_t)); 265 memset(&args, 0, sizeof(ide_task_t));
318 if (lba48) 266 if (lba48)
319 tf->command = WIN_READ_NATIVE_MAX_EXT; 267 tf->command = ATA_CMD_READ_NATIVE_MAX_EXT;
320 else 268 else
321 tf->command = WIN_READ_NATIVE_MAX; 269 tf->command = ATA_CMD_READ_NATIVE_MAX;
322 tf->device = ATA_LBA; 270 tf->device = ATA_LBA;
323 args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE; 271 args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
324 if (lba48) 272 if (lba48)
@@ -353,10 +301,10 @@ static u64 idedisk_set_max_address(ide_drive_t *drive, u64 addr_req, int lba48)
353 tf->hob_lbal = (addr_req >>= 8) & 0xff; 301 tf->hob_lbal = (addr_req >>= 8) & 0xff;
354 tf->hob_lbam = (addr_req >>= 8) & 0xff; 302 tf->hob_lbam = (addr_req >>= 8) & 0xff;
355 tf->hob_lbah = (addr_req >>= 8) & 0xff; 303 tf->hob_lbah = (addr_req >>= 8) & 0xff;
356 tf->command = WIN_SET_MAX_EXT; 304 tf->command = ATA_CMD_SET_MAX_EXT;
357 } else { 305 } else {
358 tf->device = (addr_req >>= 8) & 0x0f; 306 tf->device = (addr_req >>= 8) & 0x0f;
359 tf->command = WIN_SET_MAX; 307 tf->command = ATA_CMD_SET_MAX;
360 } 308 }
361 tf->device |= ATA_LBA; 309 tf->device |= ATA_LBA;
362 args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE; 310 args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
@@ -379,25 +327,6 @@ static unsigned long long sectors_to_MB(unsigned long long n)
379} 327}
380 328
381/* 329/*
382 * Bits 10 of command_set_1 and cfs_enable_1 must be equal,
383 * so on non-buggy drives we need test only one.
384 * However, we should also check whether these fields are valid.
385 */
386static inline int idedisk_supports_hpa(const struct hd_driveid *id)
387{
388 return (id->command_set_1 & 0x0400) && (id->cfs_enable_1 & 0x0400);
389}
390
391/*
392 * The same here.
393 */
394static inline int idedisk_supports_lba48(const struct hd_driveid *id)
395{
396 return (id->command_set_2 & 0x0400) && (id->cfs_enable_2 & 0x0400)
397 && id->lba_capacity_2;
398}
399
400/*
401 * Some disks report total number of sectors instead of 330 * Some disks report total number of sectors instead of
402 * maximum sector address. We list them here. 331 * maximum sector address. We list them here.
403 */ 332 */
@@ -411,7 +340,7 @@ static const struct drive_list_entry hpa_list[] = {
411static void idedisk_check_hpa(ide_drive_t *drive) 340static void idedisk_check_hpa(ide_drive_t *drive)
412{ 341{
413 unsigned long long capacity, set_max; 342 unsigned long long capacity, set_max;
414 int lba48 = idedisk_supports_lba48(drive->id); 343 int lba48 = ata_id_lba48_enabled(drive->id);
415 344
416 capacity = drive->capacity64; 345 capacity = drive->capacity64;
417 346
@@ -447,139 +376,40 @@ static void idedisk_check_hpa(ide_drive_t *drive)
447 376
448static void init_idedisk_capacity(ide_drive_t *drive) 377static void init_idedisk_capacity(ide_drive_t *drive)
449{ 378{
450 struct hd_driveid *id = drive->id; 379 u16 *id = drive->id;
451 /* 380 int lba;
452 * If this drive supports the Host Protected Area feature set,
453 * then we may need to change our opinion about the drive's capacity.
454 */
455 int hpa = idedisk_supports_hpa(id);
456 381
457 if (idedisk_supports_lba48(id)) { 382 if (ata_id_lba48_enabled(id)) {
458 /* drive speaks 48-bit LBA */ 383 /* drive speaks 48-bit LBA */
459 drive->select.b.lba = 1; 384 lba = 1;
460 drive->capacity64 = id->lba_capacity_2; 385 drive->capacity64 = ata_id_u64(id, ATA_ID_LBA_CAPACITY_2);
461 if (hpa) 386 } else if (ata_id_has_lba(id) && ata_id_is_lba_capacity_ok(id)) {
462 idedisk_check_hpa(drive);
463 } else if ((id->capability & 2) && lba_capacity_is_ok(id)) {
464 /* drive speaks 28-bit LBA */ 387 /* drive speaks 28-bit LBA */
465 drive->select.b.lba = 1; 388 lba = 1;
466 drive->capacity64 = id->lba_capacity; 389 drive->capacity64 = ata_id_u32(id, ATA_ID_LBA_CAPACITY);
467 if (hpa)
468 idedisk_check_hpa(drive);
469 } else { 390 } else {
470 /* drive speaks boring old 28-bit CHS */ 391 /* drive speaks boring old 28-bit CHS */
392 lba = 0;
471 drive->capacity64 = drive->cyl * drive->head * drive->sect; 393 drive->capacity64 = drive->cyl * drive->head * drive->sect;
472 } 394 }
473}
474
475static sector_t idedisk_capacity(ide_drive_t *drive)
476{
477 return drive->capacity64 - drive->sect0;
478}
479
480#ifdef CONFIG_IDE_PROC_FS
481static int smart_enable(ide_drive_t *drive)
482{
483 ide_task_t args;
484 struct ide_taskfile *tf = &args.tf;
485
486 memset(&args, 0, sizeof(ide_task_t));
487 tf->feature = SMART_ENABLE;
488 tf->lbam = SMART_LCYL_PASS;
489 tf->lbah = SMART_HCYL_PASS;
490 tf->command = WIN_SMART;
491 args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
492 return ide_no_data_taskfile(drive, &args);
493}
494 395
495static int get_smart_data(ide_drive_t *drive, u8 *buf, u8 sub_cmd) 396 if (lba) {
496{ 397 drive->dev_flags |= IDE_DFLAG_LBA;
497 ide_task_t args;
498 struct ide_taskfile *tf = &args.tf;
499
500 memset(&args, 0, sizeof(ide_task_t));
501 tf->feature = sub_cmd;
502 tf->nsect = 0x01;
503 tf->lbam = SMART_LCYL_PASS;
504 tf->lbah = SMART_HCYL_PASS;
505 tf->command = WIN_SMART;
506 args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
507 args.data_phase = TASKFILE_IN;
508 (void) smart_enable(drive);
509 return ide_raw_taskfile(drive, &args, buf, 1);
510}
511
512static int proc_idedisk_read_cache
513 (char *page, char **start, off_t off, int count, int *eof, void *data)
514{
515 ide_drive_t *drive = (ide_drive_t *) data;
516 char *out = page;
517 int len;
518 398
519 if (drive->id_read) 399 /*
520 len = sprintf(out, "%i\n", drive->id->buf_size / 2); 400 * If this device supports the Host Protected Area feature set,
521 else 401 * then we may need to change our opinion about its capacity.
522 len = sprintf(out, "(none)\n"); 402 */
523 403 if (ata_id_hpa_enabled(id))
524 PROC_IDE_READ_RETURN(page, start, off, count, eof, len); 404 idedisk_check_hpa(drive);
525}
526
527static int proc_idedisk_read_capacity
528 (char *page, char **start, off_t off, int count, int *eof, void *data)
529{
530 ide_drive_t*drive = (ide_drive_t *)data;
531 int len;
532
533 len = sprintf(page, "%llu\n", (long long)idedisk_capacity(drive));
534
535 PROC_IDE_READ_RETURN(page, start, off, count, eof, len);
536}
537
538static int proc_idedisk_read_smart(char *page, char **start, off_t off,
539 int count, int *eof, void *data, u8 sub_cmd)
540{
541 ide_drive_t *drive = (ide_drive_t *)data;
542 int len = 0, i = 0;
543
544 if (get_smart_data(drive, page, sub_cmd) == 0) {
545 unsigned short *val = (unsigned short *) page;
546 char *out = ((char *)val) + (SECTOR_WORDS * 4);
547 page = out;
548 do {
549 out += sprintf(out, "%04x%c", le16_to_cpu(*val),
550 (++i & 7) ? ' ' : '\n');
551 val += 1;
552 } while (i < (SECTOR_WORDS * 2));
553 len = out - page;
554 } 405 }
555
556 PROC_IDE_READ_RETURN(page, start, off, count, eof, len);
557}
558
559static int proc_idedisk_read_sv
560 (char *page, char **start, off_t off, int count, int *eof, void *data)
561{
562 return proc_idedisk_read_smart(page, start, off, count, eof, data,
563 SMART_READ_VALUES);
564} 406}
565 407
566static int proc_idedisk_read_st 408sector_t ide_disk_capacity(ide_drive_t *drive)
567 (char *page, char **start, off_t off, int count, int *eof, void *data)
568{ 409{
569 return proc_idedisk_read_smart(page, start, off, count, eof, data, 410 return drive->capacity64;
570 SMART_READ_THRESHOLDS);
571} 411}
572 412
573static ide_proc_entry_t idedisk_proc[] = {
574 { "cache", S_IFREG|S_IRUGO, proc_idedisk_read_cache, NULL },
575 { "capacity", S_IFREG|S_IRUGO, proc_idedisk_read_capacity, NULL },
576 { "geometry", S_IFREG|S_IRUGO, proc_ide_read_geometry, NULL },
577 { "smart_values", S_IFREG|S_IRUSR, proc_idedisk_read_sv, NULL },
578 { "smart_thresholds", S_IFREG|S_IRUSR, proc_idedisk_read_st, NULL },
579 { NULL, 0, NULL, NULL }
580};
581#endif /* CONFIG_IDE_PROC_FS */
582
583static void idedisk_prepare_flush(struct request_queue *q, struct request *rq) 413static void idedisk_prepare_flush(struct request_queue *q, struct request *rq)
584{ 414{
585 ide_drive_t *drive = q->queuedata; 415 ide_drive_t *drive = q->queuedata;
@@ -589,11 +419,11 @@ static void idedisk_prepare_flush(struct request_queue *q, struct request *rq)
589 BUG_ON(task == NULL); 419 BUG_ON(task == NULL);
590 420
591 memset(task, 0, sizeof(*task)); 421 memset(task, 0, sizeof(*task));
592 if (ide_id_has_flush_cache_ext(drive->id) && 422 if (ata_id_flush_ext_enabled(drive->id) &&
593 (drive->capacity64 >= (1UL << 28))) 423 (drive->capacity64 >= (1UL << 28)))
594 task->tf.command = WIN_FLUSH_CACHE_EXT; 424 task->tf.command = ATA_CMD_FLUSH_EXT;
595 else 425 else
596 task->tf.command = WIN_FLUSH_CACHE; 426 task->tf.command = ATA_CMD_FLUSH;
597 task->tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE | 427 task->tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE |
598 IDE_TFLAG_DYN; 428 IDE_TFLAG_DYN;
599 task->data_phase = TASKFILE_NO_DATA; 429 task->data_phase = TASKFILE_NO_DATA;
@@ -603,6 +433,8 @@ static void idedisk_prepare_flush(struct request_queue *q, struct request *rq)
603 rq->special = task; 433 rq->special = task;
604} 434}
605 435
436ide_devset_get(multcount, mult_count);
437
606/* 438/*
607 * This is tightly woven into the driver->do_special can not touch. 439 * This is tightly woven into the driver->do_special can not touch.
608 * DON'T do it again until a total personality rewrite is committed. 440 * DON'T do it again until a total personality rewrite is committed.
@@ -612,7 +444,7 @@ static int set_multcount(ide_drive_t *drive, int arg)
612 struct request *rq; 444 struct request *rq;
613 int error; 445 int error;
614 446
615 if (arg < 0 || arg > drive->id->max_multsect) 447 if (arg < 0 || arg > (drive->id[ATA_ID_MAX_MULTSECT] & 0xff))
616 return -EINVAL; 448 return -EINVAL;
617 449
618 if (drive->special.b.set_multmode) 450 if (drive->special.b.set_multmode)
@@ -629,26 +461,43 @@ static int set_multcount(ide_drive_t *drive, int arg)
629 return (drive->mult_count == arg) ? 0 : -EIO; 461 return (drive->mult_count == arg) ? 0 : -EIO;
630} 462}
631 463
464ide_devset_get_flag(nowerr, IDE_DFLAG_NOWERR);
465
632static int set_nowerr(ide_drive_t *drive, int arg) 466static int set_nowerr(ide_drive_t *drive, int arg)
633{ 467{
634 if (arg < 0 || arg > 1) 468 if (arg < 0 || arg > 1)
635 return -EINVAL; 469 return -EINVAL;
636 470
637 if (ide_spin_wait_hwgroup(drive)) 471 if (arg)
638 return -EBUSY; 472 drive->dev_flags |= IDE_DFLAG_NOWERR;
639 drive->nowerr = arg; 473 else
474 drive->dev_flags &= ~IDE_DFLAG_NOWERR;
475
640 drive->bad_wstat = arg ? BAD_R_STAT : BAD_W_STAT; 476 drive->bad_wstat = arg ? BAD_R_STAT : BAD_W_STAT;
641 spin_unlock_irq(&ide_lock); 477
642 return 0; 478 return 0;
643} 479}
644 480
481static int ide_do_setfeature(ide_drive_t *drive, u8 feature, u8 nsect)
482{
483 ide_task_t task;
484
485 memset(&task, 0, sizeof(task));
486 task.tf.feature = feature;
487 task.tf.nsect = nsect;
488 task.tf.command = ATA_CMD_SET_FEATURES;
489 task.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
490
491 return ide_no_data_taskfile(drive, &task);
492}
493
645static void update_ordered(ide_drive_t *drive) 494static void update_ordered(ide_drive_t *drive)
646{ 495{
647 struct hd_driveid *id = drive->id; 496 u16 *id = drive->id;
648 unsigned ordered = QUEUE_ORDERED_NONE; 497 unsigned ordered = QUEUE_ORDERED_NONE;
649 prepare_flush_fn *prep_fn = NULL; 498 prepare_flush_fn *prep_fn = NULL;
650 499
651 if (drive->wcache) { 500 if (drive->dev_flags & IDE_DFLAG_WCACHE) {
652 unsigned long long capacity; 501 unsigned long long capacity;
653 int barrier; 502 int barrier;
654 /* 503 /*
@@ -659,10 +508,12 @@ static void update_ordered(ide_drive_t *drive)
659 * time we have trimmed the drive capacity if LBA48 is 508 * time we have trimmed the drive capacity if LBA48 is
660 * not available so we don't need to recheck that. 509 * not available so we don't need to recheck that.
661 */ 510 */
662 capacity = idedisk_capacity(drive); 511 capacity = ide_disk_capacity(drive);
663 barrier = ide_id_has_flush_cache(id) && !drive->noflush && 512 barrier = ata_id_flush_enabled(id) &&
664 (drive->addressing == 0 || capacity <= (1ULL << 28) || 513 (drive->dev_flags & IDE_DFLAG_NOFLUSH) == 0 &&
665 ide_id_has_flush_cache_ext(id)); 514 ((drive->dev_flags & IDE_DFLAG_LBA48) == 0 ||
515 capacity <= (1ULL << 28) ||
516 ata_id_flush_ext_enabled(id));
666 517
667 printk(KERN_INFO "%s: cache flushes %ssupported\n", 518 printk(KERN_INFO "%s: cache flushes %ssupported\n",
668 drive->name, barrier ? "" : "not "); 519 drive->name, barrier ? "" : "not ");
@@ -677,23 +528,24 @@ static void update_ordered(ide_drive_t *drive)
677 blk_queue_ordered(drive->queue, ordered, prep_fn); 528 blk_queue_ordered(drive->queue, ordered, prep_fn);
678} 529}
679 530
680static int write_cache(ide_drive_t *drive, int arg) 531ide_devset_get_flag(wcache, IDE_DFLAG_WCACHE);
532
533static int set_wcache(ide_drive_t *drive, int arg)
681{ 534{
682 ide_task_t args;
683 int err = 1; 535 int err = 1;
684 536
685 if (arg < 0 || arg > 1) 537 if (arg < 0 || arg > 1)
686 return -EINVAL; 538 return -EINVAL;
687 539
688 if (ide_id_has_flush_cache(drive->id)) { 540 if (ata_id_flush_enabled(drive->id)) {
689 memset(&args, 0, sizeof(ide_task_t)); 541 err = ide_do_setfeature(drive,
690 args.tf.feature = arg ? 542 arg ? SETFEATURES_WC_ON : SETFEATURES_WC_OFF, 0);
691 SETFEATURES_EN_WCACHE : SETFEATURES_DIS_WCACHE; 543 if (err == 0) {
692 args.tf.command = WIN_SETFEATURES; 544 if (arg)
693 args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE; 545 drive->dev_flags |= IDE_DFLAG_WCACHE;
694 err = ide_no_data_taskfile(drive, &args); 546 else
695 if (err == 0) 547 drive->dev_flags &= ~IDE_DFLAG_WCACHE;
696 drive->wcache = arg; 548 }
697 } 549 }
698 550
699 update_ordered(drive); 551 update_ordered(drive);
@@ -706,108 +558,88 @@ static int do_idedisk_flushcache(ide_drive_t *drive)
706 ide_task_t args; 558 ide_task_t args;
707 559
708 memset(&args, 0, sizeof(ide_task_t)); 560 memset(&args, 0, sizeof(ide_task_t));
709 if (ide_id_has_flush_cache_ext(drive->id)) 561 if (ata_id_flush_ext_enabled(drive->id))
710 args.tf.command = WIN_FLUSH_CACHE_EXT; 562 args.tf.command = ATA_CMD_FLUSH_EXT;
711 else 563 else
712 args.tf.command = WIN_FLUSH_CACHE; 564 args.tf.command = ATA_CMD_FLUSH;
713 args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE; 565 args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
714 return ide_no_data_taskfile(drive, &args); 566 return ide_no_data_taskfile(drive, &args);
715} 567}
716 568
569ide_devset_get(acoustic, acoustic);
570
717static int set_acoustic(ide_drive_t *drive, int arg) 571static int set_acoustic(ide_drive_t *drive, int arg)
718{ 572{
719 ide_task_t args;
720
721 if (arg < 0 || arg > 254) 573 if (arg < 0 || arg > 254)
722 return -EINVAL; 574 return -EINVAL;
723 575
724 memset(&args, 0, sizeof(ide_task_t)); 576 ide_do_setfeature(drive,
725 args.tf.feature = arg ? SETFEATURES_EN_AAM : SETFEATURES_DIS_AAM; 577 arg ? SETFEATURES_AAM_ON : SETFEATURES_AAM_OFF, arg);
726 args.tf.nsect = arg; 578
727 args.tf.command = WIN_SETFEATURES;
728 args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
729 ide_no_data_taskfile(drive, &args);
730 drive->acoustic = arg; 579 drive->acoustic = arg;
580
731 return 0; 581 return 0;
732} 582}
733 583
584ide_devset_get_flag(addressing, IDE_DFLAG_LBA48);
585
734/* 586/*
735 * drive->addressing: 587 * drive->addressing:
736 * 0: 28-bit 588 * 0: 28-bit
737 * 1: 48-bit 589 * 1: 48-bit
738 * 2: 48-bit capable doing 28-bit 590 * 2: 48-bit capable doing 28-bit
739 */ 591 */
740static int set_lba_addressing(ide_drive_t *drive, int arg) 592static int set_addressing(ide_drive_t *drive, int arg)
741{ 593{
742 if (arg < 0 || arg > 2) 594 if (arg < 0 || arg > 2)
743 return -EINVAL; 595 return -EINVAL;
744 596
745 drive->addressing = 0; 597 if (arg && ((drive->hwif->host_flags & IDE_HFLAG_NO_LBA48) ||
598 ata_id_lba48_enabled(drive->id) == 0))
599 return -EIO;
746 600
747 if (drive->hwif->host_flags & IDE_HFLAG_NO_LBA48) 601 if (arg == 2)
748 return 0; 602 arg = 0;
603
604 if (arg)
605 drive->dev_flags |= IDE_DFLAG_LBA48;
606 else
607 drive->dev_flags &= ~IDE_DFLAG_LBA48;
749 608
750 if (!idedisk_supports_lba48(drive->id))
751 return -EIO;
752 drive->addressing = arg;
753 return 0; 609 return 0;
754} 610}
755 611
756#ifdef CONFIG_IDE_PROC_FS 612ide_ext_devset_rw(acoustic, acoustic);
757static void idedisk_add_settings(ide_drive_t *drive) 613ide_ext_devset_rw(address, addressing);
758{ 614ide_ext_devset_rw(multcount, multcount);
759 struct hd_driveid *id = drive->id; 615ide_ext_devset_rw(wcache, wcache);
760 616
761 ide_add_setting(drive, "bios_cyl", SETTING_RW, TYPE_INT, 0, 65535, 1, 1, 617ide_ext_devset_rw_sync(nowerr, nowerr);
762 &drive->bios_cyl, NULL);
763 ide_add_setting(drive, "bios_head", SETTING_RW, TYPE_BYTE, 0, 255, 1, 1,
764 &drive->bios_head, NULL);
765 ide_add_setting(drive, "bios_sect", SETTING_RW, TYPE_BYTE, 0, 63, 1, 1,
766 &drive->bios_sect, NULL);
767 ide_add_setting(drive, "address", SETTING_RW, TYPE_BYTE, 0, 2, 1, 1,
768 &drive->addressing, set_lba_addressing);
769 ide_add_setting(drive, "multcount", SETTING_RW, TYPE_BYTE, 0,
770 id->max_multsect, 1, 1, &drive->mult_count,
771 set_multcount);
772 ide_add_setting(drive, "nowerr", SETTING_RW, TYPE_BYTE, 0, 1, 1, 1,
773 &drive->nowerr, set_nowerr);
774 ide_add_setting(drive, "lun", SETTING_RW, TYPE_INT, 0, 7, 1, 1,
775 &drive->lun, NULL);
776 ide_add_setting(drive, "wcache", SETTING_RW, TYPE_BYTE, 0, 1, 1, 1,
777 &drive->wcache, write_cache);
778 ide_add_setting(drive, "acoustic", SETTING_RW, TYPE_BYTE, 0, 254, 1, 1,
779 &drive->acoustic, set_acoustic);
780 ide_add_setting(drive, "failures", SETTING_RW, TYPE_INT, 0, 65535, 1, 1,
781 &drive->failures, NULL);
782 ide_add_setting(drive, "max_failures", SETTING_RW, TYPE_INT, 0, 65535,
783 1, 1, &drive->max_failures, NULL);
784}
785#else
786static inline void idedisk_add_settings(ide_drive_t *drive) { ; }
787#endif
788 618
789static void idedisk_setup(ide_drive_t *drive) 619static void idedisk_setup(ide_drive_t *drive)
790{ 620{
621 struct ide_disk_obj *idkp = drive->driver_data;
791 ide_hwif_t *hwif = drive->hwif; 622 ide_hwif_t *hwif = drive->hwif;
792 struct hd_driveid *id = drive->id; 623 u16 *id = drive->id;
624 char *m = (char *)&id[ATA_ID_PROD];
793 unsigned long long capacity; 625 unsigned long long capacity;
794 626
795 idedisk_add_settings(drive); 627 ide_proc_register_driver(drive, idkp->driver);
796 628
797 if (drive->id_read == 0) 629 if ((drive->dev_flags & IDE_DFLAG_ID_READ) == 0)
798 return; 630 return;
799 631
800 if (drive->removable) { 632 if (drive->dev_flags & IDE_DFLAG_REMOVABLE) {
801 /* 633 /*
802 * Removable disks (eg. SYQUEST); ignore 'WD' drives 634 * Removable disks (eg. SYQUEST); ignore 'WD' drives
803 */ 635 */
804 if (id->model[0] != 'W' || id->model[1] != 'D') 636 if (m[0] != 'W' || m[1] != 'D')
805 drive->doorlocking = 1; 637 drive->dev_flags |= IDE_DFLAG_DOORLOCKING;
806 } 638 }
807 639
808 (void)set_lba_addressing(drive, 1); 640 (void)set_addressing(drive, 1);
809 641
810 if (drive->addressing == 1) { 642 if (drive->dev_flags & IDE_DFLAG_LBA48) {
811 int max_s = 2048; 643 int max_s = 2048;
812 644
813 if (max_s > hwif->rqsize) 645 if (max_s > hwif->rqsize)
@@ -823,7 +655,8 @@ static void idedisk_setup(ide_drive_t *drive)
823 init_idedisk_capacity(drive); 655 init_idedisk_capacity(drive);
824 656
825 /* limit drive capacity to 137GB if LBA48 cannot be used */ 657 /* limit drive capacity to 137GB if LBA48 cannot be used */
826 if (drive->addressing == 0 && drive->capacity64 > 1ULL << 28) { 658 if ((drive->dev_flags & IDE_DFLAG_LBA48) == 0 &&
659 drive->capacity64 > 1ULL << 28) {
827 printk(KERN_WARNING "%s: cannot use LBA48 - full capacity " 660 printk(KERN_WARNING "%s: cannot use LBA48 - full capacity "
828 "%llu sectors (%llu MB)\n", 661 "%llu sectors (%llu MB)\n",
829 drive->name, (unsigned long long)drive->capacity64, 662 drive->name, (unsigned long long)drive->capacity64,
@@ -831,24 +664,24 @@ static void idedisk_setup(ide_drive_t *drive)
831 drive->capacity64 = 1ULL << 28; 664 drive->capacity64 = 1ULL << 28;
832 } 665 }
833 666
834 if ((hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA) && drive->addressing) { 667 if ((hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA) &&
668 (drive->dev_flags & IDE_DFLAG_LBA48)) {
835 if (drive->capacity64 > 1ULL << 28) { 669 if (drive->capacity64 > 1ULL << 28) {
836 printk(KERN_INFO "%s: cannot use LBA48 DMA - PIO mode" 670 printk(KERN_INFO "%s: cannot use LBA48 DMA - PIO mode"
837 " will be used for accessing sectors " 671 " will be used for accessing sectors "
838 "> %u\n", drive->name, 1 << 28); 672 "> %u\n", drive->name, 1 << 28);
839 } else 673 } else
840 drive->addressing = 0; 674 drive->dev_flags &= ~IDE_DFLAG_LBA48;
841 } 675 }
842 676
843 /* 677 /*
844 * if possible, give fdisk access to more of the drive, 678 * if possible, give fdisk access to more of the drive,
845 * by correcting bios_cyls: 679 * by correcting bios_cyls:
846 */ 680 */
847 capacity = idedisk_capacity(drive); 681 capacity = ide_disk_capacity(drive);
848
849 if (!drive->forced_geom) {
850 682
851 if (idedisk_supports_lba48(drive->id)) { 683 if ((drive->dev_flags & IDE_DFLAG_FORCED_GEOM) == 0) {
684 if (ata_id_lba48_enabled(drive->id)) {
852 /* compatibility */ 685 /* compatibility */
853 drive->bios_sect = 63; 686 drive->bios_sect = 63;
854 drive->bios_head = 255; 687 drive->bios_head = 255;
@@ -874,22 +707,23 @@ static void idedisk_setup(ide_drive_t *drive)
874 drive->name, capacity, sectors_to_MB(capacity)); 707 drive->name, capacity, sectors_to_MB(capacity));
875 708
876 /* Only print cache size when it was specified */ 709 /* Only print cache size when it was specified */
877 if (id->buf_size) 710 if (id[ATA_ID_BUF_SIZE])
878 printk(KERN_CONT " w/%dKiB Cache", id->buf_size / 2); 711 printk(KERN_CONT " w/%dKiB Cache", id[ATA_ID_BUF_SIZE] / 2);
879 712
880 printk(KERN_CONT ", CHS=%d/%d/%d\n", 713 printk(KERN_CONT ", CHS=%d/%d/%d\n",
881 drive->bios_cyl, drive->bios_head, drive->bios_sect); 714 drive->bios_cyl, drive->bios_head, drive->bios_sect);
882 715
883 /* write cache enabled? */ 716 /* write cache enabled? */
884 if ((id->csfo & 1) || (id->cfs_enable_1 & (1 << 5))) 717 if ((id[ATA_ID_CSFO] & 1) || ata_id_wcache_enabled(id))
885 drive->wcache = 1; 718 drive->dev_flags |= IDE_DFLAG_WCACHE;
886 719
887 write_cache(drive, 1); 720 set_wcache(drive, 1);
888} 721}
889 722
890static void ide_cacheflush_p(ide_drive_t *drive) 723static void ide_cacheflush_p(ide_drive_t *drive)
891{ 724{
892 if (!drive->wcache || !ide_id_has_flush_cache(drive->id)) 725 if (ata_id_flush_enabled(drive->id) == 0 ||
726 (drive->dev_flags & IDE_DFLAG_WCACHE) == 0)
893 return; 727 return;
894 728
895 if (do_idedisk_flushcache(drive)) 729 if (do_idedisk_flushcache(drive))
@@ -931,7 +765,7 @@ static int ide_disk_probe(ide_drive_t *drive);
931 */ 765 */
932static void ide_disk_resume(ide_drive_t *drive) 766static void ide_disk_resume(ide_drive_t *drive)
933{ 767{
934 if (idedisk_supports_hpa(drive->id)) 768 if (ata_id_hpa_enabled(drive->id))
935 init_idedisk_capacity(drive); 769 init_idedisk_capacity(drive);
936} 770}
937 771
@@ -973,13 +807,12 @@ static ide_driver_t idedisk_driver = {
973 .resume = ide_disk_resume, 807 .resume = ide_disk_resume,
974 .shutdown = ide_device_shutdown, 808 .shutdown = ide_device_shutdown,
975 .version = IDEDISK_VERSION, 809 .version = IDEDISK_VERSION,
976 .media = ide_disk,
977 .supports_dsc_overlap = 0,
978 .do_request = ide_do_rw_disk, 810 .do_request = ide_do_rw_disk,
979 .end_request = ide_end_request, 811 .end_request = ide_end_request,
980 .error = __ide_error, 812 .error = __ide_error,
981#ifdef CONFIG_IDE_PROC_FS 813#ifdef CONFIG_IDE_PROC_FS
982 .proc = idedisk_proc, 814 .proc = ide_disk_proc,
815 .settings = ide_disk_settings,
983#endif 816#endif
984}; 817};
985 818
@@ -988,7 +821,7 @@ static int idedisk_set_doorlock(ide_drive_t *drive, int on)
988 ide_task_t task; 821 ide_task_t task;
989 822
990 memset(&task, 0, sizeof(task)); 823 memset(&task, 0, sizeof(task));
991 task.tf.command = on ? WIN_DOORLOCK : WIN_DOORUNLOCK; 824 task.tf.command = on ? ATA_CMD_MEDIA_LOCK : ATA_CMD_MEDIA_UNLOCK;
992 task.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE; 825 task.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
993 826
994 return ide_no_data_taskfile(drive, &task); 827 return ide_no_data_taskfile(drive, &task);
@@ -1008,15 +841,16 @@ static int idedisk_open(struct inode *inode, struct file *filp)
1008 841
1009 idkp->openers++; 842 idkp->openers++;
1010 843
1011 if (drive->removable && idkp->openers == 1) { 844 if ((drive->dev_flags & IDE_DFLAG_REMOVABLE) && idkp->openers == 1) {
1012 check_disk_change(inode->i_bdev); 845 check_disk_change(inode->i_bdev);
1013 /* 846 /*
1014 * Ignore the return code from door_lock, 847 * Ignore the return code from door_lock,
1015 * since the open() has already succeeded, 848 * since the open() has already succeeded,
1016 * and the door_lock is irrelevant at this point. 849 * and the door_lock is irrelevant at this point.
1017 */ 850 */
1018 if (drive->doorlocking && idedisk_set_doorlock(drive, 1)) 851 if ((drive->dev_flags & IDE_DFLAG_DOORLOCKING) &&
1019 drive->doorlocking = 0; 852 idedisk_set_doorlock(drive, 1))
853 drive->dev_flags &= ~IDE_DFLAG_DOORLOCKING;
1020 } 854 }
1021 return 0; 855 return 0;
1022} 856}
@@ -1030,9 +864,10 @@ static int idedisk_release(struct inode *inode, struct file *filp)
1030 if (idkp->openers == 1) 864 if (idkp->openers == 1)
1031 ide_cacheflush_p(drive); 865 ide_cacheflush_p(drive);
1032 866
1033 if (drive->removable && idkp->openers == 1) { 867 if ((drive->dev_flags & IDE_DFLAG_REMOVABLE) && idkp->openers == 1) {
1034 if (drive->doorlocking && idedisk_set_doorlock(drive, 0)) 868 if ((drive->dev_flags & IDE_DFLAG_DOORLOCKING) &&
1035 drive->doorlocking = 0; 869 idedisk_set_doorlock(drive, 0))
870 drive->dev_flags &= ~IDE_DFLAG_DOORLOCKING;
1036 } 871 }
1037 872
1038 idkp->openers--; 873 idkp->openers--;
@@ -1053,72 +888,25 @@ static int idedisk_getgeo(struct block_device *bdev, struct hd_geometry *geo)
1053 return 0; 888 return 0;
1054} 889}
1055 890
1056static int idedisk_ioctl(struct inode *inode, struct file *file,
1057 unsigned int cmd, unsigned long arg)
1058{
1059 unsigned long flags;
1060 struct block_device *bdev = inode->i_bdev;
1061 struct ide_disk_obj *idkp = ide_disk_g(bdev->bd_disk);
1062 ide_drive_t *drive = idkp->drive;
1063 int err, (*setfunc)(ide_drive_t *, int);
1064 u8 *val;
1065
1066 switch (cmd) {
1067 case HDIO_GET_ADDRESS: val = &drive->addressing; goto read_val;
1068 case HDIO_GET_MULTCOUNT: val = &drive->mult_count; goto read_val;
1069 case HDIO_GET_NOWERR: val = &drive->nowerr; goto read_val;
1070 case HDIO_GET_WCACHE: val = &drive->wcache; goto read_val;
1071 case HDIO_GET_ACOUSTIC: val = &drive->acoustic; goto read_val;
1072 case HDIO_SET_ADDRESS: setfunc = set_lba_addressing; goto set_val;
1073 case HDIO_SET_MULTCOUNT: setfunc = set_multcount; goto set_val;
1074 case HDIO_SET_NOWERR: setfunc = set_nowerr; goto set_val;
1075 case HDIO_SET_WCACHE: setfunc = write_cache; goto set_val;
1076 case HDIO_SET_ACOUSTIC: setfunc = set_acoustic; goto set_val;
1077 }
1078
1079 return generic_ide_ioctl(drive, file, bdev, cmd, arg);
1080
1081read_val:
1082 mutex_lock(&ide_setting_mtx);
1083 spin_lock_irqsave(&ide_lock, flags);
1084 err = *val;
1085 spin_unlock_irqrestore(&ide_lock, flags);
1086 mutex_unlock(&ide_setting_mtx);
1087 return err >= 0 ? put_user(err, (long __user *)arg) : err;
1088
1089set_val:
1090 if (bdev != bdev->bd_contains)
1091 err = -EINVAL;
1092 else {
1093 if (!capable(CAP_SYS_ADMIN))
1094 err = -EACCES;
1095 else {
1096 mutex_lock(&ide_setting_mtx);
1097 err = setfunc(drive, arg);
1098 mutex_unlock(&ide_setting_mtx);
1099 }
1100 }
1101 return err;
1102}
1103
1104static int idedisk_media_changed(struct gendisk *disk) 891static int idedisk_media_changed(struct gendisk *disk)
1105{ 892{
1106 struct ide_disk_obj *idkp = ide_disk_g(disk); 893 struct ide_disk_obj *idkp = ide_disk_g(disk);
1107 ide_drive_t *drive = idkp->drive; 894 ide_drive_t *drive = idkp->drive;
1108 895
1109 /* do not scan partitions twice if this is a removable device */ 896 /* do not scan partitions twice if this is a removable device */
1110 if (drive->attach) { 897 if (drive->dev_flags & IDE_DFLAG_ATTACH) {
1111 drive->attach = 0; 898 drive->dev_flags &= ~IDE_DFLAG_ATTACH;
1112 return 0; 899 return 0;
1113 } 900 }
901
1114 /* if removable, always assume it was changed */ 902 /* if removable, always assume it was changed */
1115 return drive->removable; 903 return !!(drive->dev_flags & IDE_DFLAG_REMOVABLE);
1116} 904}
1117 905
1118static int idedisk_revalidate_disk(struct gendisk *disk) 906static int idedisk_revalidate_disk(struct gendisk *disk)
1119{ 907{
1120 struct ide_disk_obj *idkp = ide_disk_g(disk); 908 struct ide_disk_obj *idkp = ide_disk_g(disk);
1121 set_capacity(disk, idedisk_capacity(idkp->drive)); 909 set_capacity(disk, ide_disk_capacity(idkp->drive));
1122 return 0; 910 return 0;
1123} 911}
1124 912
@@ -1126,7 +914,7 @@ static struct block_device_operations idedisk_ops = {
1126 .owner = THIS_MODULE, 914 .owner = THIS_MODULE,
1127 .open = idedisk_open, 915 .open = idedisk_open,
1128 .release = idedisk_release, 916 .release = idedisk_release,
1129 .ioctl = idedisk_ioctl, 917 .ioctl = ide_disk_ioctl,
1130 .getgeo = idedisk_getgeo, 918 .getgeo = idedisk_getgeo,
1131 .media_changed = idedisk_media_changed, 919 .media_changed = idedisk_media_changed,
1132 .revalidate_disk = idedisk_revalidate_disk 920 .revalidate_disk = idedisk_revalidate_disk
@@ -1142,8 +930,7 @@ static int ide_disk_probe(ide_drive_t *drive)
1142 /* strstr("foo", "") is non-NULL */ 930 /* strstr("foo", "") is non-NULL */
1143 if (!strstr("ide-disk", drive->driver_req)) 931 if (!strstr("ide-disk", drive->driver_req))
1144 goto failed; 932 goto failed;
1145 if (!drive->present) 933
1146 goto failed;
1147 if (drive->media != ide_disk) 934 if (drive->media != ide_disk)
1148 goto failed; 935 goto failed;
1149 936
@@ -1151,15 +938,12 @@ static int ide_disk_probe(ide_drive_t *drive)
1151 if (!idkp) 938 if (!idkp)
1152 goto failed; 939 goto failed;
1153 940
1154 g = alloc_disk_node(1 << PARTN_BITS, 941 g = alloc_disk_node(IDE_DISK_MINORS, hwif_to_node(drive->hwif));
1155 hwif_to_node(drive->hwif));
1156 if (!g) 942 if (!g)
1157 goto out_free_idkp; 943 goto out_free_idkp;
1158 944
1159 ide_init_disk(g, drive); 945 ide_init_disk(g, drive);
1160 946
1161 ide_proc_register_driver(drive, &idedisk_driver);
1162
1163 kref_init(&idkp->kref); 947 kref_init(&idkp->kref);
1164 948
1165 idkp->drive = drive; 949 idkp->drive = drive;
@@ -1171,17 +955,20 @@ static int ide_disk_probe(ide_drive_t *drive)
1171 drive->driver_data = idkp; 955 drive->driver_data = idkp;
1172 956
1173 idedisk_setup(drive); 957 idedisk_setup(drive);
1174 if ((!drive->head || drive->head > 16) && !drive->select.b.lba) { 958 if ((drive->dev_flags & IDE_DFLAG_LBA) == 0 &&
959 (drive->head == 0 || drive->head > 16)) {
1175 printk(KERN_ERR "%s: INVALID GEOMETRY: %d PHYSICAL HEADS?\n", 960 printk(KERN_ERR "%s: INVALID GEOMETRY: %d PHYSICAL HEADS?\n",
1176 drive->name, drive->head); 961 drive->name, drive->head);
1177 drive->attach = 0; 962 drive->dev_flags &= ~IDE_DFLAG_ATTACH;
1178 } else 963 } else
1179 drive->attach = 1; 964 drive->dev_flags |= IDE_DFLAG_ATTACH;
1180 965
1181 g->minors = 1 << PARTN_BITS; 966 g->minors = IDE_DISK_MINORS;
1182 g->driverfs_dev = &drive->gendev; 967 g->driverfs_dev = &drive->gendev;
1183 g->flags = drive->removable ? GENHD_FL_REMOVABLE : 0; 968 g->flags |= GENHD_FL_EXT_DEVT;
1184 set_capacity(g, idedisk_capacity(drive)); 969 if (drive->dev_flags & IDE_DFLAG_REMOVABLE)
970 g->flags = GENHD_FL_REMOVABLE;
971 set_capacity(g, ide_disk_capacity(drive));
1185 g->fops = &idedisk_ops; 972 g->fops = &idedisk_ops;
1186 add_disk(g); 973 add_disk(g);
1187 return 0; 974 return 0;
@@ -1203,6 +990,7 @@ static int __init idedisk_init(void)
1203} 990}
1204 991
1205MODULE_ALIAS("ide:*m-disk*"); 992MODULE_ALIAS("ide:*m-disk*");
993MODULE_ALIAS("ide-disk");
1206module_init(idedisk_init); 994module_init(idedisk_init);
1207module_exit(idedisk_exit); 995module_exit(idedisk_exit);
1208MODULE_LICENSE("GPL"); 996MODULE_LICENSE("GPL");