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