ide-disk: set_addressing() fixes
[deliverable/linux.git] / drivers / ide / ide-disk.c
1 /*
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
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.
15 */
16
17 #define IDEDISK_VERSION "1.18"
18
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>
31 #include <linux/mutex.h>
32 #include <linux/leds.h>
33 #include <linux/ide.h>
34 #include <linux/hdreg.h>
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
42 #if !defined(CONFIG_DEBUG_BLOCK_EXT_DEVT)
43 #define IDE_DISK_MINORS (1 << PARTN_BITS)
44 #else
45 #define IDE_DISK_MINORS 0
46 #endif
47
48 struct ide_disk_obj {
49 ide_drive_t *drive;
50 ide_driver_t *driver;
51 struct gendisk *disk;
52 struct kref kref;
53 unsigned int openers; /* protected by BKL for now */
54 };
55
56 static DEFINE_MUTEX(idedisk_ref_mutex);
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
63 static void ide_disk_release(struct kref *);
64
65 static struct ide_disk_obj *ide_disk_get(struct gendisk *disk)
66 {
67 struct ide_disk_obj *idkp = NULL;
68
69 mutex_lock(&idedisk_ref_mutex);
70 idkp = ide_disk_g(disk);
71 if (idkp) {
72 if (ide_device_get(idkp->drive))
73 idkp = NULL;
74 else
75 kref_get(&idkp->kref);
76 }
77 mutex_unlock(&idedisk_ref_mutex);
78 return idkp;
79 }
80
81 static void ide_disk_put(struct ide_disk_obj *idkp)
82 {
83 ide_drive_t *drive = idkp->drive;
84
85 mutex_lock(&idedisk_ref_mutex);
86 kref_put(&idkp->kref, ide_disk_release);
87 ide_device_put(drive);
88 mutex_unlock(&idedisk_ref_mutex);
89 }
90
91 static const u8 ide_rw_cmds[] = {
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,
104 };
105
106 static 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
115 static 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)
123 index = 8;
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
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 */
139 static ide_startstop_t __ide_do_rw_disk(ide_drive_t *drive, struct request *rq,
140 sector_t block)
141 {
142 ide_hwif_t *hwif = HWIF(drive);
143 unsigned int dma = drive->using_dma;
144 u16 nsectors = (u16)rq->nr_sectors;
145 u8 lba48 = (drive->addressing == 1) ? 1 : 0;
146 ide_task_t task;
147 struct ide_taskfile *tf = &task.tf;
148 ide_startstop_t rc;
149
150 if ((hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA) && lba48 && dma) {
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
162 memset(&task, 0, sizeof(task));
163 task.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
164
165 if (drive->select.b.lba) {
166 if (lba48) {
167 pr_debug("%s: LBA=0x%012llx\n", drive->name,
168 (unsigned long long)block);
169
170 tf->hob_nsect = (nsectors >> 8) & 0xff;
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);
175 }
176
177 tf->nsect = nsectors & 0xff;
178 tf->lbal = (u8) block;
179 tf->lbam = (u8)(block >> 8);
180 tf->lbah = (u8)(block >> 16);
181
182 task.tf_flags |= (IDE_TFLAG_LBA48 | IDE_TFLAG_HOB);
183 } else {
184 tf->nsect = nsectors & 0xff;
185 tf->lbal = block;
186 tf->lbam = block >>= 8;
187 tf->lbah = block >>= 8;
188 tf->device = (block >> 8) & 0xf;
189 }
190 } else {
191 unsigned int sect, head, cyl, track;
192
193 track = (int)block / drive->sect;
194 sect = (int)block % drive->sect + 1;
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
200 tf->nsect = nsectors & 0xff;
201 tf->lbal = sect;
202 tf->lbam = cyl;
203 tf->lbah = cyl >> 8;
204 tf->device = head;
205 }
206
207 if (rq_data_dir(rq))
208 task.tf_flags |= IDE_TFLAG_WRITE;
209
210 ide_tf_set_cmd(drive, &task, dma);
211 if (!dma)
212 hwif->data_phase = task.data_phase;
213 task.rq = rq;
214
215 rc = do_rw_taskfile(drive, &task);
216
217 if (rc == ide_stopped && dma) {
218 /* fallback to PIO */
219 task.tf_flags |= IDE_TFLAG_DMA_PIO_FALLBACK;
220 ide_tf_set_cmd(drive, &task, 0);
221 hwif->data_phase = task.data_phase;
222 ide_init_sg_cmd(drive, rq);
223 rc = do_rw_taskfile(drive, &task);
224 }
225
226 return rc;
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
235 static ide_startstop_t ide_do_rw_disk(ide_drive_t *drive, struct request *rq,
236 sector_t block)
237 {
238 ide_hwif_t *hwif = HWIF(drive);
239
240 BUG_ON(drive->blocked);
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
248 ledtrig_ide_activity();
249
250 pr_debug("%s: %sing: block=%llu, sectors=%lu, buffer=0x%08lx\n",
251 drive->name, rq_data_dir(rq) == READ ? "read" : "writ",
252 (unsigned long long)block, rq->nr_sectors,
253 (unsigned long)rq->buffer);
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 */
265 static u64 idedisk_read_native_max_address(ide_drive_t *drive, int lba48)
266 {
267 ide_task_t args;
268 struct ide_taskfile *tf = &args.tf;
269 u64 addr = 0;
270
271 /* Create IDE/ATA command request structure */
272 memset(&args, 0, sizeof(ide_task_t));
273 if (lba48)
274 tf->command = ATA_CMD_READ_NATIVE_MAX_EXT;
275 else
276 tf->command = ATA_CMD_READ_NATIVE_MAX;
277 tf->device = ATA_LBA;
278 args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
279 if (lba48)
280 args.tf_flags |= (IDE_TFLAG_LBA48 | IDE_TFLAG_HOB);
281 /* submit command request */
282 ide_no_data_taskfile(drive, &args);
283
284 /* if OK, compute maximum address value */
285 if ((tf->status & 0x01) == 0)
286 addr = ide_get_lba_addr(tf, lba48) + 1;
287
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 */
295 static u64 idedisk_set_max_address(ide_drive_t *drive, u64 addr_req, int lba48)
296 {
297 ide_task_t args;
298 struct ide_taskfile *tf = &args.tf;
299 u64 addr_set = 0;
300
301 addr_req--;
302 /* Create IDE/ATA command request structure */
303 memset(&args, 0, sizeof(ide_task_t));
304 tf->lbal = (addr_req >> 0) & 0xff;
305 tf->lbam = (addr_req >>= 8) & 0xff;
306 tf->lbah = (addr_req >>= 8) & 0xff;
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;
311 tf->command = ATA_CMD_SET_MAX_EXT;
312 } else {
313 tf->device = (addr_req >>= 8) & 0x0f;
314 tf->command = ATA_CMD_SET_MAX;
315 }
316 tf->device |= ATA_LBA;
317 args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
318 if (lba48)
319 args.tf_flags |= (IDE_TFLAG_LBA48 | IDE_TFLAG_HOB);
320 /* submit command request */
321 ide_no_data_taskfile(drive, &args);
322 /* if OK, compute maximum address value */
323 if ((tf->status & 0x01) == 0)
324 addr_set = ide_get_lba_addr(tf, lba48) + 1;
325
326 return addr_set;
327 }
328
329 static 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
336 /*
337 * Some disks report total number of sectors instead of
338 * maximum sector address. We list them here.
339 */
340 static const struct drive_list_entry hpa_list[] = {
341 { "ST340823A", NULL },
342 { "ST320413A", NULL },
343 { "ST310211A", NULL },
344 { NULL, NULL }
345 };
346
347 static void idedisk_check_hpa(ide_drive_t *drive)
348 {
349 unsigned long long capacity, set_max;
350 int lba48 = ata_id_lba48_enabled(drive->id);
351
352 capacity = drive->capacity64;
353
354 set_max = idedisk_read_native_max_address(drive, lba48);
355
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
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
375 set_max = idedisk_set_max_address(drive, set_max, lba48);
376
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
384 static void init_idedisk_capacity(ide_drive_t *drive)
385 {
386 u16 *id = drive->id;
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 */
391 int hpa = ata_id_hpa_enabled(id);
392
393 if (ata_id_lba48_enabled(id)) {
394 /* drive speaks 48-bit LBA */
395 drive->select.b.lba = 1;
396 drive->capacity64 = ata_id_u64(id, ATA_ID_LBA_CAPACITY_2);
397 if (hpa)
398 idedisk_check_hpa(drive);
399 } else if (ata_id_has_lba(id) && ata_id_is_lba_capacity_ok(id)) {
400 /* drive speaks 28-bit LBA */
401 drive->select.b.lba = 1;
402 drive->capacity64 = ata_id_u32(id, ATA_ID_LBA_CAPACITY);
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
411 static sector_t idedisk_capacity(ide_drive_t *drive)
412 {
413 return drive->capacity64;
414 }
415
416 #ifdef CONFIG_IDE_PROC_FS
417 static int smart_enable(ide_drive_t *drive)
418 {
419 ide_task_t args;
420 struct ide_taskfile *tf = &args.tf;
421
422 memset(&args, 0, sizeof(ide_task_t));
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;
427 args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
428 return ide_no_data_taskfile(drive, &args);
429 }
430
431 static int get_smart_data(ide_drive_t *drive, u8 *buf, u8 sub_cmd)
432 {
433 ide_task_t args;
434 struct ide_taskfile *tf = &args.tf;
435
436 memset(&args, 0, sizeof(ide_task_t));
437 tf->feature = sub_cmd;
438 tf->nsect = 0x01;
439 tf->lbam = ATA_SMART_LBAM_PASS;
440 tf->lbah = ATA_SMART_LBAH_PASS;
441 tf->command = ATA_CMD_SMART;
442 args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
443 args.data_phase = TASKFILE_IN;
444 (void) smart_enable(drive);
445 return ide_raw_taskfile(drive, &args, buf, 1);
446 }
447
448 static 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
455 if (drive->id_read)
456 len = sprintf(out, "%i\n", drive->id[ATA_ID_BUF_SIZE] / 2);
457 else
458 len = sprintf(out, "(none)\n");
459
460 PROC_IDE_READ_RETURN(page, start, off, count, eof, len);
461 }
462
463 static 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
469 len = sprintf(page, "%llu\n", (long long)idedisk_capacity(drive));
470
471 PROC_IDE_READ_RETURN(page, start, off, count, eof, len);
472 }
473
474 static int proc_idedisk_read_smart(char *page, char **start, off_t off,
475 int count, int *eof, void *data, u8 sub_cmd)
476 {
477 ide_drive_t *drive = (ide_drive_t *)data;
478 int len = 0, i = 0;
479
480 if (get_smart_data(drive, page, sub_cmd) == 0) {
481 unsigned short *val = (unsigned short *) page;
482 char *out = (char *)val + SECTOR_SIZE;
483
484 page = out;
485 do {
486 out += sprintf(out, "%04x%c", le16_to_cpu(*val),
487 (++i & 7) ? ' ' : '\n');
488 val += 1;
489 } while (i < SECTOR_SIZE / 2);
490 len = out - page;
491 }
492
493 PROC_IDE_READ_RETURN(page, start, off, count, eof, len);
494 }
495
496 static int proc_idedisk_read_sv
497 (char *page, char **start, off_t off, int count, int *eof, void *data)
498 {
499 return proc_idedisk_read_smart(page, start, off, count, eof, data,
500 ATA_SMART_READ_VALUES);
501 }
502
503 static 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,
507 ATA_SMART_READ_THRESHOLDS);
508 }
509
510 static ide_proc_entry_t idedisk_proc[] = {
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 },
516 { NULL, 0, NULL, NULL }
517 };
518 #endif /* CONFIG_IDE_PROC_FS */
519
520 static void idedisk_prepare_flush(struct request_queue *q, struct request *rq)
521 {
522 ide_drive_t *drive = q->queuedata;
523 ide_task_t *task = kmalloc(sizeof(*task), GFP_ATOMIC);
524
525 /* FIXME: map struct ide_taskfile on rq->cmd[] */
526 BUG_ON(task == NULL);
527
528 memset(task, 0, sizeof(*task));
529 if (ata_id_flush_ext_enabled(drive->id) &&
530 (drive->capacity64 >= (1UL << 28)))
531 task->tf.command = ATA_CMD_FLUSH_EXT;
532 else
533 task->tf.command = ATA_CMD_FLUSH;
534 task->tf_flags = IDE_TFLAG_OUT_TF | IDE_TFLAG_OUT_DEVICE |
535 IDE_TFLAG_DYN;
536 task->data_phase = TASKFILE_NO_DATA;
537
538 rq->cmd_type = REQ_TYPE_ATA_TASKFILE;
539 rq->cmd_flags |= REQ_SOFTBARRIER;
540 rq->special = task;
541 }
542
543 ide_devset_get(multcount, mult_count);
544
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 */
549 static int set_multcount(ide_drive_t *drive, int arg)
550 {
551 struct request *rq;
552 int error;
553
554 if (arg < 0 || arg > (drive->id[ATA_ID_MAX_MULTSECT] & 0xff))
555 return -EINVAL;
556
557 if (drive->special.b.set_multmode)
558 return -EBUSY;
559
560 rq = blk_get_request(drive->queue, READ, __GFP_WAIT);
561 rq->cmd_type = REQ_TYPE_ATA_TASKFILE;
562
563 drive->mult_req = arg;
564 drive->special.b.set_multmode = 1;
565 error = blk_execute_rq(drive->queue, NULL, rq, 0);
566 blk_put_request(rq);
567
568 return (drive->mult_count == arg) ? 0 : -EIO;
569 }
570
571 ide_devset_get(nowerr, nowerr);
572
573 static int set_nowerr(ide_drive_t *drive, int arg)
574 {
575 if (arg < 0 || arg > 1)
576 return -EINVAL;
577
578 drive->nowerr = arg;
579 drive->bad_wstat = arg ? BAD_R_STAT : BAD_W_STAT;
580 return 0;
581 }
582
583 static void update_ordered(ide_drive_t *drive)
584 {
585 u16 *id = drive->id;
586 unsigned ordered = QUEUE_ORDERED_NONE;
587 prepare_flush_fn *prep_fn = NULL;
588
589 if (drive->wcache) {
590 unsigned long long capacity;
591 int barrier;
592 /*
593 * We must avoid issuing commands a drive does not
594 * understand or we may crash it. We check flush cache
595 * is supported. We also check we have the LBA48 flush
596 * cache if the drive capacity is too large. By this
597 * time we have trimmed the drive capacity if LBA48 is
598 * not available so we don't need to recheck that.
599 */
600 capacity = idedisk_capacity(drive);
601 barrier = ata_id_flush_enabled(id) && !drive->noflush &&
602 (drive->addressing == 0 || capacity <= (1ULL << 28) ||
603 ata_id_flush_ext_enabled(id));
604
605 printk(KERN_INFO "%s: cache flushes %ssupported\n",
606 drive->name, barrier ? "" : "not ");
607
608 if (barrier) {
609 ordered = QUEUE_ORDERED_DRAIN_FLUSH;
610 prep_fn = idedisk_prepare_flush;
611 }
612 } else
613 ordered = QUEUE_ORDERED_DRAIN;
614
615 blk_queue_ordered(drive->queue, ordered, prep_fn);
616 }
617
618 ide_devset_get(wcache, wcache);
619
620 static int set_wcache(ide_drive_t *drive, int arg)
621 {
622 ide_task_t args;
623 int err = 1;
624
625 if (arg < 0 || arg > 1)
626 return -EINVAL;
627
628 if (ata_id_flush_enabled(drive->id)) {
629 memset(&args, 0, sizeof(ide_task_t));
630 args.tf.feature = arg ?
631 SETFEATURES_WC_ON : SETFEATURES_WC_OFF;
632 args.tf.command = ATA_CMD_SET_FEATURES;
633 args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
634 err = ide_no_data_taskfile(drive, &args);
635 if (err == 0)
636 drive->wcache = arg;
637 }
638
639 update_ordered(drive);
640
641 return err;
642 }
643
644 static int do_idedisk_flushcache(ide_drive_t *drive)
645 {
646 ide_task_t args;
647
648 memset(&args, 0, sizeof(ide_task_t));
649 if (ata_id_flush_ext_enabled(drive->id))
650 args.tf.command = ATA_CMD_FLUSH_EXT;
651 else
652 args.tf.command = ATA_CMD_FLUSH;
653 args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
654 return ide_no_data_taskfile(drive, &args);
655 }
656
657 ide_devset_get(acoustic, acoustic);
658
659 static int set_acoustic(ide_drive_t *drive, int arg)
660 {
661 ide_task_t args;
662
663 if (arg < 0 || arg > 254)
664 return -EINVAL;
665
666 memset(&args, 0, sizeof(ide_task_t));
667 args.tf.feature = arg ? SETFEATURES_AAM_ON : SETFEATURES_AAM_OFF;
668 args.tf.nsect = arg;
669 args.tf.command = ATA_CMD_SET_FEATURES;
670 args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
671 ide_no_data_taskfile(drive, &args);
672 drive->acoustic = arg;
673 return 0;
674 }
675
676 ide_devset_get(addressing, addressing);
677
678 /*
679 * drive->addressing:
680 * 0: 28-bit
681 * 1: 48-bit
682 * 2: 48-bit capable doing 28-bit
683 */
684 static int set_addressing(ide_drive_t *drive, int arg)
685 {
686 if (arg < 0 || arg > 2)
687 return -EINVAL;
688
689 if (arg && ((drive->hwif->host_flags & IDE_HFLAG_NO_LBA48) ||
690 ata_id_lba48_enabled(drive->id) == 0))
691 return -EIO;
692
693 if (arg == 2)
694 arg = 0;
695
696 drive->addressing = arg;
697
698 return 0;
699 }
700
701 ide_devset_rw(acoustic, acoustic);
702 ide_devset_rw(address, addressing);
703 ide_devset_rw(multcount, multcount);
704 ide_devset_rw(wcache, wcache);
705
706 ide_devset_rw_sync(nowerr, nowerr);
707
708 #ifdef CONFIG_IDE_PROC_FS
709 ide_devset_rw_field(bios_cyl, bios_cyl);
710 ide_devset_rw_field(bios_head, bios_head);
711 ide_devset_rw_field(bios_sect, bios_sect);
712 ide_devset_rw_field(failures, failures);
713 ide_devset_rw_field(lun, lun);
714 ide_devset_rw_field(max_failures, max_failures);
715
716 static const struct ide_proc_devset idedisk_settings[] = {
717 IDE_PROC_DEVSET(acoustic, 0, 254),
718 IDE_PROC_DEVSET(address, 0, 2),
719 IDE_PROC_DEVSET(bios_cyl, 0, 65535),
720 IDE_PROC_DEVSET(bios_head, 0, 255),
721 IDE_PROC_DEVSET(bios_sect, 0, 63),
722 IDE_PROC_DEVSET(failures, 0, 65535),
723 IDE_PROC_DEVSET(lun, 0, 7),
724 IDE_PROC_DEVSET(max_failures, 0, 65535),
725 IDE_PROC_DEVSET(multcount, 0, 16),
726 IDE_PROC_DEVSET(nowerr, 0, 1),
727 IDE_PROC_DEVSET(wcache, 0, 1),
728 { 0 },
729 };
730 #endif
731
732 static void idedisk_setup(ide_drive_t *drive)
733 {
734 struct ide_disk_obj *idkp = drive->driver_data;
735 ide_hwif_t *hwif = drive->hwif;
736 u16 *id = drive->id;
737 char *m = (char *)&id[ATA_ID_PROD];
738 unsigned long long capacity;
739
740 ide_proc_register_driver(drive, idkp->driver);
741
742 if (drive->id_read == 0)
743 return;
744
745 if (drive->removable) {
746 /*
747 * Removable disks (eg. SYQUEST); ignore 'WD' drives
748 */
749 if (m[0] != 'W' || m[1] != 'D')
750 drive->doorlocking = 1;
751 }
752
753 (void)set_addressing(drive, 1);
754
755 if (drive->addressing == 1) {
756 int max_s = 2048;
757
758 if (max_s > hwif->rqsize)
759 max_s = hwif->rqsize;
760
761 blk_queue_max_sectors(drive->queue, max_s);
762 }
763
764 printk(KERN_INFO "%s: max request size: %dKiB\n", drive->name,
765 drive->queue->max_sectors / 2);
766
767 /* calculate drive capacity, and select LBA if possible */
768 init_idedisk_capacity(drive);
769
770 /* limit drive capacity to 137GB if LBA48 cannot be used */
771 if (drive->addressing == 0 && drive->capacity64 > 1ULL << 28) {
772 printk(KERN_WARNING "%s: cannot use LBA48 - full capacity "
773 "%llu sectors (%llu MB)\n",
774 drive->name, (unsigned long long)drive->capacity64,
775 sectors_to_MB(drive->capacity64));
776 drive->capacity64 = 1ULL << 28;
777 }
778
779 if ((hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA) && drive->addressing) {
780 if (drive->capacity64 > 1ULL << 28) {
781 printk(KERN_INFO "%s: cannot use LBA48 DMA - PIO mode"
782 " will be used for accessing sectors "
783 "> %u\n", drive->name, 1 << 28);
784 } else
785 drive->addressing = 0;
786 }
787
788 /*
789 * if possible, give fdisk access to more of the drive,
790 * by correcting bios_cyls:
791 */
792 capacity = idedisk_capacity(drive);
793
794 if (!drive->forced_geom) {
795 if (ata_id_lba48_enabled(drive->id)) {
796 /* compatibility */
797 drive->bios_sect = 63;
798 drive->bios_head = 255;
799 }
800
801 if (drive->bios_sect && drive->bios_head) {
802 unsigned int cap0 = capacity; /* truncate to 32 bits */
803 unsigned int cylsz, cyl;
804
805 if (cap0 != capacity)
806 drive->bios_cyl = 65535;
807 else {
808 cylsz = drive->bios_sect * drive->bios_head;
809 cyl = cap0 / cylsz;
810 if (cyl > 65535)
811 cyl = 65535;
812 if (cyl > drive->bios_cyl)
813 drive->bios_cyl = cyl;
814 }
815 }
816 }
817 printk(KERN_INFO "%s: %llu sectors (%llu MB)",
818 drive->name, capacity, sectors_to_MB(capacity));
819
820 /* Only print cache size when it was specified */
821 if (id[ATA_ID_BUF_SIZE])
822 printk(KERN_CONT " w/%dKiB Cache", id[ATA_ID_BUF_SIZE] / 2);
823
824 printk(KERN_CONT ", CHS=%d/%d/%d\n",
825 drive->bios_cyl, drive->bios_head, drive->bios_sect);
826
827 /* write cache enabled? */
828 if ((id[ATA_ID_CSFO] & 1) || ata_id_wcache_enabled(id))
829 drive->wcache = 1;
830
831 set_wcache(drive, 1);
832 }
833
834 static void ide_cacheflush_p(ide_drive_t *drive)
835 {
836 if (!drive->wcache || ata_id_flush_enabled(drive->id) == 0)
837 return;
838
839 if (do_idedisk_flushcache(drive))
840 printk(KERN_INFO "%s: wcache flush failed!\n", drive->name);
841 }
842
843 static void ide_disk_remove(ide_drive_t *drive)
844 {
845 struct ide_disk_obj *idkp = drive->driver_data;
846 struct gendisk *g = idkp->disk;
847
848 ide_proc_unregister_driver(drive, idkp->driver);
849
850 del_gendisk(g);
851
852 ide_cacheflush_p(drive);
853
854 ide_disk_put(idkp);
855 }
856
857 static void ide_disk_release(struct kref *kref)
858 {
859 struct ide_disk_obj *idkp = to_ide_disk(kref);
860 ide_drive_t *drive = idkp->drive;
861 struct gendisk *g = idkp->disk;
862
863 drive->driver_data = NULL;
864 g->private_data = NULL;
865 put_disk(g);
866 kfree(idkp);
867 }
868
869 static int ide_disk_probe(ide_drive_t *drive);
870
871 /*
872 * On HPA drives the capacity needs to be
873 * reinitilized on resume otherwise the disk
874 * can not be used and a hard reset is required
875 */
876 static void ide_disk_resume(ide_drive_t *drive)
877 {
878 if (ata_id_hpa_enabled(drive->id))
879 init_idedisk_capacity(drive);
880 }
881
882 static void ide_device_shutdown(ide_drive_t *drive)
883 {
884 #ifdef CONFIG_ALPHA
885 /* On Alpha, halt(8) doesn't actually turn the machine off,
886 it puts you into the sort of firmware monitor. Typically,
887 it's used to boot another kernel image, so it's not much
888 different from reboot(8). Therefore, we don't need to
889 spin down the disk in this case, especially since Alpha
890 firmware doesn't handle disks in standby mode properly.
891 On the other hand, it's reasonably safe to turn the power
892 off when the shutdown process reaches the firmware prompt,
893 as the firmware initialization takes rather long time -
894 at least 10 seconds, which should be sufficient for
895 the disk to expire its write cache. */
896 if (system_state != SYSTEM_POWER_OFF) {
897 #else
898 if (system_state == SYSTEM_RESTART) {
899 #endif
900 ide_cacheflush_p(drive);
901 return;
902 }
903
904 printk(KERN_INFO "Shutdown: %s\n", drive->name);
905
906 drive->gendev.bus->suspend(&drive->gendev, PMSG_SUSPEND);
907 }
908
909 static ide_driver_t idedisk_driver = {
910 .gen_driver = {
911 .owner = THIS_MODULE,
912 .name = "ide-disk",
913 .bus = &ide_bus_type,
914 },
915 .probe = ide_disk_probe,
916 .remove = ide_disk_remove,
917 .resume = ide_disk_resume,
918 .shutdown = ide_device_shutdown,
919 .version = IDEDISK_VERSION,
920 .media = ide_disk,
921 .do_request = ide_do_rw_disk,
922 .end_request = ide_end_request,
923 .error = __ide_error,
924 #ifdef CONFIG_IDE_PROC_FS
925 .proc = idedisk_proc,
926 .settings = idedisk_settings,
927 #endif
928 };
929
930 static int idedisk_set_doorlock(ide_drive_t *drive, int on)
931 {
932 ide_task_t task;
933
934 memset(&task, 0, sizeof(task));
935 task.tf.command = on ? ATA_CMD_MEDIA_LOCK : ATA_CMD_MEDIA_UNLOCK;
936 task.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
937
938 return ide_no_data_taskfile(drive, &task);
939 }
940
941 static int idedisk_open(struct inode *inode, struct file *filp)
942 {
943 struct gendisk *disk = inode->i_bdev->bd_disk;
944 struct ide_disk_obj *idkp;
945 ide_drive_t *drive;
946
947 idkp = ide_disk_get(disk);
948 if (idkp == NULL)
949 return -ENXIO;
950
951 drive = idkp->drive;
952
953 idkp->openers++;
954
955 if (drive->removable && idkp->openers == 1) {
956 check_disk_change(inode->i_bdev);
957 /*
958 * Ignore the return code from door_lock,
959 * since the open() has already succeeded,
960 * and the door_lock is irrelevant at this point.
961 */
962 if (drive->doorlocking && idedisk_set_doorlock(drive, 1))
963 drive->doorlocking = 0;
964 }
965 return 0;
966 }
967
968 static int idedisk_release(struct inode *inode, struct file *filp)
969 {
970 struct gendisk *disk = inode->i_bdev->bd_disk;
971 struct ide_disk_obj *idkp = ide_disk_g(disk);
972 ide_drive_t *drive = idkp->drive;
973
974 if (idkp->openers == 1)
975 ide_cacheflush_p(drive);
976
977 if (drive->removable && idkp->openers == 1) {
978 if (drive->doorlocking && idedisk_set_doorlock(drive, 0))
979 drive->doorlocking = 0;
980 }
981
982 idkp->openers--;
983
984 ide_disk_put(idkp);
985
986 return 0;
987 }
988
989 static int idedisk_getgeo(struct block_device *bdev, struct hd_geometry *geo)
990 {
991 struct ide_disk_obj *idkp = ide_disk_g(bdev->bd_disk);
992 ide_drive_t *drive = idkp->drive;
993
994 geo->heads = drive->bios_head;
995 geo->sectors = drive->bios_sect;
996 geo->cylinders = (u16)drive->bios_cyl; /* truncate */
997 return 0;
998 }
999
1000 static const struct ide_ioctl_devset ide_disk_ioctl_settings[] = {
1001 { HDIO_GET_ADDRESS, HDIO_SET_ADDRESS, &ide_devset_address },
1002 { HDIO_GET_MULTCOUNT, HDIO_SET_MULTCOUNT, &ide_devset_multcount },
1003 { HDIO_GET_NOWERR, HDIO_SET_NOWERR, &ide_devset_nowerr },
1004 { HDIO_GET_WCACHE, HDIO_SET_WCACHE, &ide_devset_wcache },
1005 { HDIO_GET_ACOUSTIC, HDIO_SET_ACOUSTIC, &ide_devset_acoustic },
1006 { 0 }
1007 };
1008
1009 static int idedisk_ioctl(struct inode *inode, struct file *file,
1010 unsigned int cmd, unsigned long arg)
1011 {
1012 struct block_device *bdev = inode->i_bdev;
1013 struct ide_disk_obj *idkp = ide_disk_g(bdev->bd_disk);
1014 ide_drive_t *drive = idkp->drive;
1015 int err;
1016
1017 err = ide_setting_ioctl(drive, bdev, cmd, arg, ide_disk_ioctl_settings);
1018 if (err != -EOPNOTSUPP)
1019 return err;
1020
1021 return generic_ide_ioctl(drive, file, bdev, cmd, arg);
1022 }
1023
1024 static int idedisk_media_changed(struct gendisk *disk)
1025 {
1026 struct ide_disk_obj *idkp = ide_disk_g(disk);
1027 ide_drive_t *drive = idkp->drive;
1028
1029 /* do not scan partitions twice if this is a removable device */
1030 if (drive->attach) {
1031 drive->attach = 0;
1032 return 0;
1033 }
1034 /* if removable, always assume it was changed */
1035 return drive->removable;
1036 }
1037
1038 static int idedisk_revalidate_disk(struct gendisk *disk)
1039 {
1040 struct ide_disk_obj *idkp = ide_disk_g(disk);
1041 set_capacity(disk, idedisk_capacity(idkp->drive));
1042 return 0;
1043 }
1044
1045 static struct block_device_operations idedisk_ops = {
1046 .owner = THIS_MODULE,
1047 .open = idedisk_open,
1048 .release = idedisk_release,
1049 .ioctl = idedisk_ioctl,
1050 .getgeo = idedisk_getgeo,
1051 .media_changed = idedisk_media_changed,
1052 .revalidate_disk = idedisk_revalidate_disk
1053 };
1054
1055 MODULE_DESCRIPTION("ATA DISK Driver");
1056
1057 static int ide_disk_probe(ide_drive_t *drive)
1058 {
1059 struct ide_disk_obj *idkp;
1060 struct gendisk *g;
1061
1062 /* strstr("foo", "") is non-NULL */
1063 if (!strstr("ide-disk", drive->driver_req))
1064 goto failed;
1065
1066 if (drive->media != ide_disk)
1067 goto failed;
1068
1069 idkp = kzalloc(sizeof(*idkp), GFP_KERNEL);
1070 if (!idkp)
1071 goto failed;
1072
1073 g = alloc_disk_node(IDE_DISK_MINORS, hwif_to_node(drive->hwif));
1074 if (!g)
1075 goto out_free_idkp;
1076
1077 ide_init_disk(g, drive);
1078
1079 kref_init(&idkp->kref);
1080
1081 idkp->drive = drive;
1082 idkp->driver = &idedisk_driver;
1083 idkp->disk = g;
1084
1085 g->private_data = &idkp->driver;
1086
1087 drive->driver_data = idkp;
1088
1089 idedisk_setup(drive);
1090 if ((!drive->head || drive->head > 16) && !drive->select.b.lba) {
1091 printk(KERN_ERR "%s: INVALID GEOMETRY: %d PHYSICAL HEADS?\n",
1092 drive->name, drive->head);
1093 drive->attach = 0;
1094 } else
1095 drive->attach = 1;
1096
1097 g->minors = IDE_DISK_MINORS;
1098 g->driverfs_dev = &drive->gendev;
1099 g->flags |= GENHD_FL_EXT_DEVT;
1100 if (drive->removable)
1101 g->flags |= GENHD_FL_REMOVABLE;
1102 set_capacity(g, idedisk_capacity(drive));
1103 g->fops = &idedisk_ops;
1104 add_disk(g);
1105 return 0;
1106
1107 out_free_idkp:
1108 kfree(idkp);
1109 failed:
1110 return -ENODEV;
1111 }
1112
1113 static void __exit idedisk_exit(void)
1114 {
1115 driver_unregister(&idedisk_driver.gen_driver);
1116 }
1117
1118 static int __init idedisk_init(void)
1119 {
1120 return driver_register(&idedisk_driver.gen_driver);
1121 }
1122
1123 MODULE_ALIAS("ide:*m-disk*");
1124 module_init(idedisk_init);
1125 module_exit(idedisk_exit);
1126 MODULE_LICENSE("GPL");
This page took 0.059095 seconds and 5 git commands to generate.