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