ide: move IDE{FLOPPY,TAPE}_WAIT_CMD defines to <linux/ide.h>
[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);
143 unsigned int dma = drive->using_dma;
790d1239 144 u16 nsectors = (u16)rq->nr_sectors;
1da177e4 145 u8 lba48 = (drive->addressing == 1) ? 1 : 0;
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
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
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
455 if (drive->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
8185d5aa
BZ
571ide_devset_get(nowerr, nowerr);
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
1da177e4
LT
578 if (ide_spin_wait_hwgroup(drive))
579 return -EBUSY;
580 drive->nowerr = arg;
581 drive->bad_wstat = arg ? BAD_R_STAT : BAD_W_STAT;
582 spin_unlock_irq(&ide_lock);
583 return 0;
584}
585
3e087b57
TH
586static void update_ordered(ide_drive_t *drive)
587{
4dde4492 588 u16 *id = drive->id;
3e087b57
TH
589 unsigned ordered = QUEUE_ORDERED_NONE;
590 prepare_flush_fn *prep_fn = NULL;
3e087b57
TH
591
592 if (drive->wcache) {
593 unsigned long long capacity;
594 int barrier;
595 /*
596 * We must avoid issuing commands a drive does not
597 * understand or we may crash it. We check flush cache
598 * is supported. We also check we have the LBA48 flush
599 * cache if the drive capacity is too large. By this
600 * time we have trimmed the drive capacity if LBA48 is
601 * not available so we don't need to recheck that.
602 */
603 capacity = idedisk_capacity(drive);
4b58f17d 604 barrier = ata_id_flush_enabled(id) && !drive->noflush &&
3e087b57 605 (drive->addressing == 0 || capacity <= (1ULL << 28) ||
ff2779b5 606 ata_id_flush_ext_enabled(id));
3e087b57
TH
607
608 printk(KERN_INFO "%s: cache flushes %ssupported\n",
f7ad836c 609 drive->name, barrier ? "" : "not ");
3e087b57
TH
610
611 if (barrier) {
612 ordered = QUEUE_ORDERED_DRAIN_FLUSH;
613 prep_fn = idedisk_prepare_flush;
3e087b57
TH
614 }
615 } else
616 ordered = QUEUE_ORDERED_DRAIN;
617
618 blk_queue_ordered(drive->queue, ordered, prep_fn);
3e087b57
TH
619}
620
8185d5aa
BZ
621ide_devset_get(wcache, wcache);
622
623static int set_wcache(ide_drive_t *drive, int arg)
1da177e4
LT
624{
625 ide_task_t args;
3e087b57 626 int err = 1;
1da177e4 627
1497943e
BZ
628 if (arg < 0 || arg > 1)
629 return -EINVAL;
630
4b58f17d 631 if (ata_id_flush_enabled(drive->id)) {
3e087b57 632 memset(&args, 0, sizeof(ide_task_t));
650d841d 633 args.tf.feature = arg ?
aaaade3f
BZ
634 SETFEATURES_WC_ON : SETFEATURES_WC_OFF;
635 args.tf.command = ATA_CMD_SET_FEATURES;
657cc1a8 636 args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
9a3c49be 637 err = ide_no_data_taskfile(drive, &args);
3e087b57
TH
638 if (err == 0)
639 drive->wcache = arg;
640 }
1da177e4 641
3e087b57 642 update_ordered(drive);
1da177e4 643
3e087b57 644 return err;
1da177e4
LT
645}
646
98416549 647static int do_idedisk_flushcache(ide_drive_t *drive)
1da177e4
LT
648{
649 ide_task_t args;
650
651 memset(&args, 0, sizeof(ide_task_t));
ff2779b5 652 if (ata_id_flush_ext_enabled(drive->id))
aaaade3f 653 args.tf.command = ATA_CMD_FLUSH_EXT;
1da177e4 654 else
aaaade3f 655 args.tf.command = ATA_CMD_FLUSH;
657cc1a8 656 args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
9a3c49be 657 return ide_no_data_taskfile(drive, &args);
1da177e4
LT
658}
659
8185d5aa
BZ
660ide_devset_get(acoustic, acoustic);
661
98416549 662static int set_acoustic(ide_drive_t *drive, int arg)
1da177e4
LT
663{
664 ide_task_t args;
665
1497943e
BZ
666 if (arg < 0 || arg > 254)
667 return -EINVAL;
668
1da177e4 669 memset(&args, 0, sizeof(ide_task_t));
aaaade3f 670 args.tf.feature = arg ? SETFEATURES_AAM_ON : SETFEATURES_AAM_OFF;
650d841d 671 args.tf.nsect = arg;
aaaade3f 672 args.tf.command = ATA_CMD_SET_FEATURES;
657cc1a8 673 args.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
9a3c49be 674 ide_no_data_taskfile(drive, &args);
1da177e4
LT
675 drive->acoustic = arg;
676 return 0;
677}
678
aa768773 679ide_devset_get(addressing, addressing);
8185d5aa 680
1da177e4
LT
681/*
682 * drive->addressing:
683 * 0: 28-bit
684 * 1: 48-bit
685 * 2: 48-bit capable doing 28-bit
686 */
aa768773 687static int set_addressing(ide_drive_t *drive, int arg)
1da177e4 688{
1497943e
BZ
689 if (arg < 0 || arg > 2)
690 return -EINVAL;
691
1da177e4
LT
692 drive->addressing = 0;
693
238e4f14 694 if (drive->hwif->host_flags & IDE_HFLAG_NO_LBA48)
1da177e4
LT
695 return 0;
696
942dcd85 697 if (ata_id_lba48_enabled(drive->id) == 0)
98416549 698 return -EIO;
942dcd85 699
1da177e4 700 drive->addressing = arg;
942dcd85 701
1da177e4
LT
702 return 0;
703}
704
7662d046 705#ifdef CONFIG_IDE_PROC_FS
8185d5aa 706ide_devset_rw_nolock(acoustic, 0, 254, acoustic);
aa768773 707ide_devset_rw_nolock(address, 0, 2, addressing);
8185d5aa
BZ
708ide_devset_rw_nolock(multcount, 0, 16, multcount);
709ide_devset_rw_nolock(nowerr, 0, 1, nowerr);
710ide_devset_rw_nolock(wcache, 0, 1, wcache);
711
712ide_devset_rw(bios_cyl, 0, 65535, bios_cyl);
713ide_devset_rw(bios_head, 0, 255, bios_head);
714ide_devset_rw(bios_sect, 0, 63, bios_sect);
715ide_devset_rw(failures, 0, 65535, failures);
716ide_devset_rw(lun, 0, 7, lun);
717ide_devset_rw(max_failures, 0, 65535, max_failures);
718
719static const struct ide_devset *idedisk_settings[] = {
720 &ide_devset_acoustic,
721 &ide_devset_address,
722 &ide_devset_bios_cyl,
723 &ide_devset_bios_head,
724 &ide_devset_bios_sect,
725 &ide_devset_failures,
726 &ide_devset_lun,
727 &ide_devset_max_failures,
728 &ide_devset_multcount,
729 &ide_devset_nowerr,
730 &ide_devset_wcache,
731 NULL
732};
7662d046 733#endif
1da177e4 734
98416549 735static void idedisk_setup(ide_drive_t *drive)
1da177e4 736{
1e874f44 737 struct ide_disk_obj *idkp = drive->driver_data;
238e4f14 738 ide_hwif_t *hwif = drive->hwif;
4dde4492
BZ
739 u16 *id = drive->id;
740 char *m = (char *)&id[ATA_ID_PROD];
1da177e4 741 unsigned long long capacity;
1da177e4 742
1e874f44 743 ide_proc_register_driver(drive, idkp->driver);
1da177e4
LT
744
745 if (drive->id_read == 0)
746 return;
747
98109337 748 if (drive->removable) {
1da177e4 749 /*
98416549 750 * Removable disks (eg. SYQUEST); ignore 'WD' drives
1da177e4 751 */
4dde4492 752 if (m[0] != 'W' || m[1] != 'D')
1da177e4 753 drive->doorlocking = 1;
1da177e4
LT
754 }
755
aa768773 756 (void)set_addressing(drive, 1);
1da177e4
LT
757
758 if (drive->addressing == 1) {
1da177e4
LT
759 int max_s = 2048;
760
761 if (max_s > hwif->rqsize)
762 max_s = hwif->rqsize;
763
764 blk_queue_max_sectors(drive->queue, max_s);
765 }
766
98416549
BZ
767 printk(KERN_INFO "%s: max request size: %dKiB\n", drive->name,
768 drive->queue->max_sectors / 2);
1da177e4
LT
769
770 /* calculate drive capacity, and select LBA if possible */
98416549 771 init_idedisk_capacity(drive);
1da177e4
LT
772
773 /* limit drive capacity to 137GB if LBA48 cannot be used */
774 if (drive->addressing == 0 && drive->capacity64 > 1ULL << 28) {
775 printk(KERN_WARNING "%s: cannot use LBA48 - full capacity "
776 "%llu sectors (%llu MB)\n",
777 drive->name, (unsigned long long)drive->capacity64,
778 sectors_to_MB(drive->capacity64));
779 drive->capacity64 = 1ULL << 28;
780 }
781
238e4f14 782 if ((hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA) && drive->addressing) {
1da177e4 783 if (drive->capacity64 > 1ULL << 28) {
98416549
BZ
784 printk(KERN_INFO "%s: cannot use LBA48 DMA - PIO mode"
785 " will be used for accessing sectors "
786 "> %u\n", drive->name, 1 << 28);
1da177e4
LT
787 } else
788 drive->addressing = 0;
789 }
790
791 /*
792 * if possible, give fdisk access to more of the drive,
793 * by correcting bios_cyls:
794 */
98416549
BZ
795 capacity = idedisk_capacity(drive);
796
1da177e4 797 if (!drive->forced_geom) {
942dcd85 798 if (ata_id_lba48_enabled(drive->id)) {
1da177e4
LT
799 /* compatibility */
800 drive->bios_sect = 63;
801 drive->bios_head = 255;
802 }
803
804 if (drive->bios_sect && drive->bios_head) {
805 unsigned int cap0 = capacity; /* truncate to 32 bits */
806 unsigned int cylsz, cyl;
807
808 if (cap0 != capacity)
809 drive->bios_cyl = 65535;
810 else {
811 cylsz = drive->bios_sect * drive->bios_head;
812 cyl = cap0 / cylsz;
813 if (cyl > 65535)
814 cyl = 65535;
815 if (cyl > drive->bios_cyl)
816 drive->bios_cyl = cyl;
817 }
818 }
819 }
820 printk(KERN_INFO "%s: %llu sectors (%llu MB)",
821 drive->name, capacity, sectors_to_MB(capacity));
822
823 /* Only print cache size when it was specified */
4dde4492
BZ
824 if (id[ATA_ID_BUF_SIZE])
825 printk(KERN_CONT " w/%dKiB Cache", id[ATA_ID_BUF_SIZE] / 2);
1da177e4 826
3ab7efe8
BZ
827 printk(KERN_CONT ", CHS=%d/%d/%d\n",
828 drive->bios_cyl, drive->bios_head, drive->bios_sect);
1da177e4 829
1da177e4 830 /* write cache enabled? */
8a089c66 831 if ((id[ATA_ID_CSFO] & 1) || ata_id_wcache_enabled(id))
1da177e4
LT
832 drive->wcache = 1;
833
8185d5aa 834 set_wcache(drive, 1);
1da177e4
LT
835}
836
837static void ide_cacheflush_p(ide_drive_t *drive)
838{
4b58f17d 839 if (!drive->wcache || ata_id_flush_enabled(drive->id) == 0)
1da177e4
LT
840 return;
841
842 if (do_idedisk_flushcache(drive))
843 printk(KERN_INFO "%s: wcache flush failed!\n", drive->name);
844}
845
4031bbe4 846static void ide_disk_remove(ide_drive_t *drive)
1da177e4
LT
847{
848 struct ide_disk_obj *idkp = drive->driver_data;
849 struct gendisk *g = idkp->disk;
850
7662d046 851 ide_proc_unregister_driver(drive, idkp->driver);
8604affd 852
1da177e4
LT
853 del_gendisk(g);
854
d36fef6f
BZ
855 ide_cacheflush_p(drive);
856
1da177e4 857 ide_disk_put(idkp);
1da177e4
LT
858}
859
860static void ide_disk_release(struct kref *kref)
861{
862 struct ide_disk_obj *idkp = to_ide_disk(kref);
863 ide_drive_t *drive = idkp->drive;
864 struct gendisk *g = idkp->disk;
865
866 drive->driver_data = NULL;
1da177e4
LT
867 g->private_data = NULL;
868 put_disk(g);
869 kfree(idkp);
870}
871
4031bbe4 872static int ide_disk_probe(ide_drive_t *drive);
1da177e4 873
0d2157f7
LT
874/*
875 * On HPA drives the capacity needs to be
876 * reinitilized on resume otherwise the disk
877 * can not be used and a hard reset is required
878 */
879static void ide_disk_resume(ide_drive_t *drive)
880{
f41891c1 881 if (ata_id_hpa_enabled(drive->id))
0d2157f7
LT
882 init_idedisk_capacity(drive);
883}
884
4031bbe4 885static void ide_device_shutdown(ide_drive_t *drive)
1da177e4 886{
1da177e4
LT
887#ifdef CONFIG_ALPHA
888 /* On Alpha, halt(8) doesn't actually turn the machine off,
889 it puts you into the sort of firmware monitor. Typically,
890 it's used to boot another kernel image, so it's not much
891 different from reboot(8). Therefore, we don't need to
892 spin down the disk in this case, especially since Alpha
893 firmware doesn't handle disks in standby mode properly.
894 On the other hand, it's reasonably safe to turn the power
895 off when the shutdown process reaches the firmware prompt,
896 as the firmware initialization takes rather long time -
897 at least 10 seconds, which should be sufficient for
898 the disk to expire its write cache. */
899 if (system_state != SYSTEM_POWER_OFF) {
900#else
901 if (system_state == SYSTEM_RESTART) {
902#endif
903 ide_cacheflush_p(drive);
904 return;
905 }
906
d12faa27
BZ
907 printk(KERN_INFO "Shutdown: %s\n", drive->name);
908
4031bbe4 909 drive->gendev.bus->suspend(&drive->gendev, PMSG_SUSPEND);
1da177e4
LT
910}
911
1da177e4 912static ide_driver_t idedisk_driver = {
1da177e4 913 .gen_driver = {
4ef3b8f4 914 .owner = THIS_MODULE,
8604affd
BZ
915 .name = "ide-disk",
916 .bus = &ide_bus_type,
1da177e4 917 },
4031bbe4
RK
918 .probe = ide_disk_probe,
919 .remove = ide_disk_remove,
0d2157f7 920 .resume = ide_disk_resume,
4031bbe4 921 .shutdown = ide_device_shutdown,
1da177e4
LT
922 .version = IDEDISK_VERSION,
923 .media = ide_disk,
1da177e4
LT
924 .do_request = ide_do_rw_disk,
925 .end_request = ide_end_request,
926 .error = __ide_error,
7662d046 927#ifdef CONFIG_IDE_PROC_FS
1da177e4 928 .proc = idedisk_proc,
8185d5aa 929 .settings = idedisk_settings,
7662d046 930#endif
1da177e4
LT
931};
932
29ec683f
BZ
933static int idedisk_set_doorlock(ide_drive_t *drive, int on)
934{
935 ide_task_t task;
936
937 memset(&task, 0, sizeof(task));
aaaade3f 938 task.tf.command = on ? ATA_CMD_MEDIA_LOCK : ATA_CMD_MEDIA_UNLOCK;
657cc1a8 939 task.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
29ec683f
BZ
940
941 return ide_no_data_taskfile(drive, &task);
942}
943
1da177e4
LT
944static int idedisk_open(struct inode *inode, struct file *filp)
945{
946 struct gendisk *disk = inode->i_bdev->bd_disk;
947 struct ide_disk_obj *idkp;
948 ide_drive_t *drive;
949
98416549
BZ
950 idkp = ide_disk_get(disk);
951 if (idkp == NULL)
1da177e4
LT
952 return -ENXIO;
953
954 drive = idkp->drive;
955
c94964a4
BZ
956 idkp->openers++;
957
958 if (drive->removable && idkp->openers == 1) {
1da177e4
LT
959 check_disk_change(inode->i_bdev);
960 /*
961 * Ignore the return code from door_lock,
962 * since the open() has already succeeded,
963 * and the door_lock is irrelevant at this point.
964 */
29ec683f 965 if (drive->doorlocking && idedisk_set_doorlock(drive, 1))
1da177e4
LT
966 drive->doorlocking = 0;
967 }
968 return 0;
969}
970
971static int idedisk_release(struct inode *inode, struct file *filp)
972{
973 struct gendisk *disk = inode->i_bdev->bd_disk;
974 struct ide_disk_obj *idkp = ide_disk_g(disk);
975 ide_drive_t *drive = idkp->drive;
976
c94964a4 977 if (idkp->openers == 1)
1da177e4 978 ide_cacheflush_p(drive);
c94964a4
BZ
979
980 if (drive->removable && idkp->openers == 1) {
29ec683f 981 if (drive->doorlocking && idedisk_set_doorlock(drive, 0))
1da177e4
LT
982 drive->doorlocking = 0;
983 }
c94964a4
BZ
984
985 idkp->openers--;
1da177e4
LT
986
987 ide_disk_put(idkp);
988
989 return 0;
990}
991
a885c8c4
CH
992static int idedisk_getgeo(struct block_device *bdev, struct hd_geometry *geo)
993{
994 struct ide_disk_obj *idkp = ide_disk_g(bdev->bd_disk);
995 ide_drive_t *drive = idkp->drive;
996
997 geo->heads = drive->bios_head;
998 geo->sectors = drive->bios_sect;
999 geo->cylinders = (u16)drive->bios_cyl; /* truncate */
1000 return 0;
1001}
1002
aa768773
BZ
1003static const struct ide_ioctl_devset ide_disk_ioctl_settings[] = {
1004{ HDIO_GET_ADDRESS, HDIO_SET_ADDRESS, get_addressing, set_addressing },
1005{ HDIO_GET_MULTCOUNT, HDIO_SET_MULTCOUNT, get_multcount, set_multcount },
1006{ HDIO_GET_NOWERR, HDIO_SET_NOWERR, get_nowerr, set_nowerr },
1007{ HDIO_GET_WCACHE, HDIO_SET_WCACHE, get_wcache, set_wcache },
1008{ HDIO_GET_ACOUSTIC, HDIO_SET_ACOUSTIC, get_acoustic, set_acoustic },
1009{ 0 }
1010};
1011
1da177e4
LT
1012static int idedisk_ioctl(struct inode *inode, struct file *file,
1013 unsigned int cmd, unsigned long arg)
1014{
1015 struct block_device *bdev = inode->i_bdev;
1016 struct ide_disk_obj *idkp = ide_disk_g(bdev->bd_disk);
1497943e 1017 ide_drive_t *drive = idkp->drive;
aa768773 1018 int err;
1497943e 1019
aa768773
BZ
1020 err = ide_setting_ioctl(drive, bdev, cmd, arg, ide_disk_ioctl_settings);
1021 if (err != -EOPNOTSUPP)
1022 return err;
1497943e 1023
aa768773 1024 return generic_ide_ioctl(drive, file, bdev, cmd, arg);
1da177e4
LT
1025}
1026
1027static int idedisk_media_changed(struct gendisk *disk)
1028{
1029 struct ide_disk_obj *idkp = ide_disk_g(disk);
1030 ide_drive_t *drive = idkp->drive;
1031
1032 /* do not scan partitions twice if this is a removable device */
1033 if (drive->attach) {
1034 drive->attach = 0;
1035 return 0;
1036 }
1037 /* if removable, always assume it was changed */
1038 return drive->removable;
1039}
1040
1041static int idedisk_revalidate_disk(struct gendisk *disk)
1042{
1043 struct ide_disk_obj *idkp = ide_disk_g(disk);
1044 set_capacity(disk, idedisk_capacity(idkp->drive));
1045 return 0;
1046}
1047
1048static struct block_device_operations idedisk_ops = {
98416549
BZ
1049 .owner = THIS_MODULE,
1050 .open = idedisk_open,
1051 .release = idedisk_release,
1052 .ioctl = idedisk_ioctl,
1053 .getgeo = idedisk_getgeo,
1054 .media_changed = idedisk_media_changed,
1055 .revalidate_disk = idedisk_revalidate_disk
1da177e4
LT
1056};
1057
1058MODULE_DESCRIPTION("ATA DISK Driver");
1059
4031bbe4 1060static int ide_disk_probe(ide_drive_t *drive)
1da177e4
LT
1061{
1062 struct ide_disk_obj *idkp;
1063 struct gendisk *g;
1064
1065 /* strstr("foo", "") is non-NULL */
1066 if (!strstr("ide-disk", drive->driver_req))
1067 goto failed;
2a924662 1068
1da177e4
LT
1069 if (drive->media != ide_disk)
1070 goto failed;
1071
f5e3c2fa 1072 idkp = kzalloc(sizeof(*idkp), GFP_KERNEL);
1da177e4
LT
1073 if (!idkp)
1074 goto failed;
1075
689d6fac 1076 g = alloc_disk_node(IDE_DISK_MINORS, hwif_to_node(drive->hwif));
1da177e4
LT
1077 if (!g)
1078 goto out_free_idkp;
1079
1080 ide_init_disk(g, drive);
1081
1da177e4
LT
1082 kref_init(&idkp->kref);
1083
1084 idkp->drive = drive;
1085 idkp->driver = &idedisk_driver;
1086 idkp->disk = g;
1087
1088 g->private_data = &idkp->driver;
1089
1090 drive->driver_data = idkp;
1091
1da177e4
LT
1092 idedisk_setup(drive);
1093 if ((!drive->head || drive->head > 16) && !drive->select.b.lba) {
1094 printk(KERN_ERR "%s: INVALID GEOMETRY: %d PHYSICAL HEADS?\n",
1095 drive->name, drive->head);
1096 drive->attach = 0;
1097 } else
1098 drive->attach = 1;
8604affd 1099
f615b48c 1100 g->minors = IDE_DISK_MINORS;
1da177e4 1101 g->driverfs_dev = &drive->gendev;
689d6fac
TH
1102 g->flags |= GENHD_FL_EXT_DEVT;
1103 if (drive->removable)
1104 g->flags |= GENHD_FL_REMOVABLE;
1da177e4
LT
1105 set_capacity(g, idedisk_capacity(drive));
1106 g->fops = &idedisk_ops;
1107 add_disk(g);
1108 return 0;
1109
1da177e4
LT
1110out_free_idkp:
1111 kfree(idkp);
1112failed:
8604affd 1113 return -ENODEV;
1da177e4
LT
1114}
1115
98416549 1116static void __exit idedisk_exit(void)
1da177e4 1117{
8604affd 1118 driver_unregister(&idedisk_driver.gen_driver);
1da177e4
LT
1119}
1120
17514e8a 1121static int __init idedisk_init(void)
1da177e4 1122{
8604affd 1123 return driver_register(&idedisk_driver.gen_driver);
1da177e4
LT
1124}
1125
263756ec 1126MODULE_ALIAS("ide:*m-disk*");
1da177e4
LT
1127module_init(idedisk_init);
1128module_exit(idedisk_exit);
1129MODULE_LICENSE("GPL");
This page took 0.581656 seconds and 5 git commands to generate.