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