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