• Home
  • Raw
  • Download

Lines Matching full:drive

56 static void ide_tf_set_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 dma)  in ide_tf_set_cmd()  argument
68 if (drive->mult_count) { in ide_tf_set_cmd()
82 static ide_startstop_t __ide_do_rw_disk(ide_drive_t *drive, struct request *rq, in __ide_do_rw_disk() argument
85 ide_hwif_t *hwif = drive->hwif; in __ide_do_rw_disk()
87 u8 lba48 = !!(drive->dev_flags & IDE_DFLAG_LBA48); in __ide_do_rw_disk()
88 u8 dma = !!(drive->dev_flags & IDE_DFLAG_USING_DMA); in __ide_do_rw_disk()
104 if (drive->dev_flags & IDE_DFLAG_LBA) { in __ide_do_rw_disk()
106 pr_debug("%s: LBA=0x%012llx\n", drive->name, in __ide_do_rw_disk()
136 track = (int)block / drive->sect; in __ide_do_rw_disk()
137 sect = (int)block % drive->sect + 1; in __ide_do_rw_disk()
138 head = track % drive->head; in __ide_do_rw_disk()
139 cyl = track / drive->head; in __ide_do_rw_disk()
141 pr_debug("%s: CHS=%u/%u/%u\n", drive->name, cyl, head, sect); in __ide_do_rw_disk()
155 ide_tf_set_cmd(drive, &cmd, dma); in __ide_do_rw_disk()
160 ide_map_sg(drive, &cmd); in __ide_do_rw_disk()
163 rc = do_rw_taskfile(drive, &cmd); in __ide_do_rw_disk()
168 ide_tf_set_cmd(drive, &cmd, 0); in __ide_do_rw_disk()
170 rc = do_rw_taskfile(drive, &cmd); in __ide_do_rw_disk()
179 * 1073741822 == 549756 MB or 48bit addressing fake drive
182 static ide_startstop_t ide_do_rw_disk(ide_drive_t *drive, struct request *rq, in ide_do_rw_disk() argument
185 ide_hwif_t *hwif = drive->hwif; in ide_do_rw_disk()
187 BUG_ON(drive->dev_flags & IDE_DFLAG_BLOCKED); in ide_do_rw_disk()
193 drive->name, rq_data_dir(rq) == READ ? "read" : "writ", in ide_do_rw_disk()
197 hwif->rw_disk(drive, rq); in ide_do_rw_disk()
199 return __ide_do_rw_disk(drive, rq, block); in ide_do_rw_disk()
203 * Queries for true maximum capacity of the drive.
204 * Returns maximum LBA address (> 0) of the drive, 0 if failed.
206 static u64 idedisk_read_native_max_address(ide_drive_t *drive, int lba48) in idedisk_read_native_max_address() argument
227 ide_no_data_taskfile(drive, &cmd); in idedisk_read_native_max_address()
237 * Sets maximum virtual LBA address of the drive.
240 static u64 idedisk_set_max_address(ide_drive_t *drive, u64 addr_req, int lba48) in idedisk_set_max_address() argument
271 ide_no_data_taskfile(drive, &cmd); in idedisk_set_max_address()
298 static u64 ide_disk_hpa_get_native_capacity(ide_drive_t *drive, int lba48) in ide_disk_hpa_get_native_capacity() argument
302 capacity = drive->capacity64; in ide_disk_hpa_get_native_capacity()
303 set_max = idedisk_read_native_max_address(drive, lba48); in ide_disk_hpa_get_native_capacity()
305 if (ide_in_drive_list(drive->id, hpa_list)) { in ide_disk_hpa_get_native_capacity()
317 static u64 ide_disk_hpa_set_capacity(ide_drive_t *drive, u64 set_max, int lba48) in ide_disk_hpa_set_capacity() argument
319 set_max = idedisk_set_max_address(drive, set_max, lba48); in ide_disk_hpa_set_capacity()
321 drive->capacity64 = set_max; in ide_disk_hpa_set_capacity()
326 static void idedisk_check_hpa(ide_drive_t *drive) in idedisk_check_hpa() argument
329 int lba48 = ata_id_lba48_enabled(drive->id); in idedisk_check_hpa()
331 capacity = drive->capacity64; in idedisk_check_hpa()
332 set_max = ide_disk_hpa_get_native_capacity(drive, lba48); in idedisk_check_hpa()
337 drive->probed_capacity = set_max; in idedisk_check_hpa()
342 drive->name, in idedisk_check_hpa()
346 if ((drive->dev_flags & IDE_DFLAG_NOHPA) == 0) in idedisk_check_hpa()
349 set_max = ide_disk_hpa_set_capacity(drive, set_max, lba48); in idedisk_check_hpa()
352 drive->name); in idedisk_check_hpa()
355 static int ide_disk_get_capacity(ide_drive_t *drive) in ide_disk_get_capacity() argument
357 u16 *id = drive->id; in ide_disk_get_capacity()
361 /* drive speaks 48-bit LBA */ in ide_disk_get_capacity()
363 drive->capacity64 = ata_id_u64(id, ATA_ID_LBA_CAPACITY_2); in ide_disk_get_capacity()
365 /* drive speaks 28-bit LBA */ in ide_disk_get_capacity()
367 drive->capacity64 = ata_id_u32(id, ATA_ID_LBA_CAPACITY); in ide_disk_get_capacity()
369 /* drive speaks boring old 28-bit CHS */ in ide_disk_get_capacity()
371 drive->capacity64 = drive->cyl * drive->head * drive->sect; in ide_disk_get_capacity()
374 drive->probed_capacity = drive->capacity64; in ide_disk_get_capacity()
377 drive->dev_flags |= IDE_DFLAG_LBA; in ide_disk_get_capacity()
384 idedisk_check_hpa(drive); in ide_disk_get_capacity()
387 /* limit drive capacity to 137GB if LBA48 cannot be used */ in ide_disk_get_capacity()
388 if ((drive->dev_flags & IDE_DFLAG_LBA48) == 0 && in ide_disk_get_capacity()
389 drive->capacity64 > 1ULL << 28) { in ide_disk_get_capacity()
392 drive->name, (unsigned long long)drive->capacity64, in ide_disk_get_capacity()
393 sectors_to_MB(drive->capacity64)); in ide_disk_get_capacity()
394 drive->probed_capacity = drive->capacity64 = 1ULL << 28; in ide_disk_get_capacity()
397 if ((drive->hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA) && in ide_disk_get_capacity()
398 (drive->dev_flags & IDE_DFLAG_LBA48)) { in ide_disk_get_capacity()
399 if (drive->capacity64 > 1ULL << 28) { in ide_disk_get_capacity()
402 "> %u\n", drive->name, 1 << 28); in ide_disk_get_capacity()
404 drive->dev_flags &= ~IDE_DFLAG_LBA48; in ide_disk_get_capacity()
410 static void ide_disk_unlock_native_capacity(ide_drive_t *drive) in ide_disk_unlock_native_capacity() argument
412 u16 *id = drive->id; in ide_disk_unlock_native_capacity()
415 if ((drive->dev_flags & IDE_DFLAG_LBA) == 0 || in ide_disk_unlock_native_capacity()
423 if (!ide_disk_hpa_get_native_capacity(drive, lba48)) in ide_disk_unlock_native_capacity()
426 if (ide_disk_hpa_set_capacity(drive, drive->probed_capacity, lba48)) in ide_disk_unlock_native_capacity()
427 drive->dev_flags |= IDE_DFLAG_NOHPA; /* disable HPA on resume */ in ide_disk_unlock_native_capacity()
432 ide_drive_t *drive = q->queuedata; in idedisk_prep_fn() local
448 if (ata_id_flush_ext_enabled(drive->id) && in idedisk_prep_fn()
449 (drive->capacity64 >= (1UL << 28))) in idedisk_prep_fn()
471 static int set_multcount(ide_drive_t *drive, int arg) in set_multcount() argument
475 if (arg < 0 || arg > (drive->id[ATA_ID_MAX_MULTSECT] & 0xff)) in set_multcount()
478 if (drive->special_flags & IDE_SFLAG_SET_MULTMODE) in set_multcount()
481 rq = blk_get_request(drive->queue, REQ_OP_DRV_IN, 0); in set_multcount()
484 drive->mult_req = arg; in set_multcount()
485 drive->special_flags |= IDE_SFLAG_SET_MULTMODE; in set_multcount()
486 blk_execute_rq(drive->queue, NULL, rq, 0); in set_multcount()
489 return (drive->mult_count == arg) ? 0 : -EIO; in set_multcount()
494 static int set_nowerr(ide_drive_t *drive, int arg) in set_nowerr() argument
500 drive->dev_flags |= IDE_DFLAG_NOWERR; in set_nowerr()
502 drive->dev_flags &= ~IDE_DFLAG_NOWERR; in set_nowerr()
504 drive->bad_wstat = arg ? BAD_R_STAT : BAD_W_STAT; in set_nowerr()
509 static int ide_do_setfeature(ide_drive_t *drive, u8 feature, u8 nsect) in ide_do_setfeature() argument
520 return ide_no_data_taskfile(drive, &cmd); in ide_do_setfeature()
523 static void update_flush(ide_drive_t *drive) in update_flush() argument
525 u16 *id = drive->id; in update_flush()
528 if (drive->dev_flags & IDE_DFLAG_WCACHE) { in update_flush()
532 * We must avoid issuing commands a drive does not in update_flush()
535 * cache if the drive capacity is too large. By this in update_flush()
536 * time we have trimmed the drive capacity if LBA48 is in update_flush()
539 capacity = ide_gd_capacity(drive); in update_flush()
541 (drive->dev_flags & IDE_DFLAG_NOFLUSH) == 0 && in update_flush()
542 ((drive->dev_flags & IDE_DFLAG_LBA48) == 0 || in update_flush()
547 drive->name, barrier ? "" : "not "); in update_flush()
551 blk_queue_prep_rq(drive->queue, idedisk_prep_fn); in update_flush()
555 blk_queue_write_cache(drive->queue, wc, false); in update_flush()
560 static int set_wcache(ide_drive_t *drive, int arg) in set_wcache() argument
567 if (ata_id_flush_enabled(drive->id)) { in set_wcache()
568 err = ide_do_setfeature(drive, in set_wcache()
572 drive->dev_flags |= IDE_DFLAG_WCACHE; in set_wcache()
574 drive->dev_flags &= ~IDE_DFLAG_WCACHE; in set_wcache()
578 update_flush(drive); in set_wcache()
583 static int do_idedisk_flushcache(ide_drive_t *drive) in do_idedisk_flushcache() argument
588 if (ata_id_flush_ext_enabled(drive->id)) in do_idedisk_flushcache()
595 return ide_no_data_taskfile(drive, &cmd); in do_idedisk_flushcache()
600 static int set_acoustic(ide_drive_t *drive, int arg) in set_acoustic() argument
605 ide_do_setfeature(drive, in set_acoustic()
608 drive->acoustic = arg; in set_acoustic()
616 * drive->addressing:
621 static int set_addressing(ide_drive_t *drive, int arg) in set_addressing() argument
626 if (arg && ((drive->hwif->host_flags & IDE_HFLAG_NO_LBA48) || in set_addressing()
627 ata_id_lba48_enabled(drive->id) == 0)) in set_addressing()
634 drive->dev_flags |= IDE_DFLAG_LBA48; in set_addressing()
636 drive->dev_flags &= ~IDE_DFLAG_LBA48; in set_addressing()
648 static int ide_disk_check(ide_drive_t *drive, const char *s) in ide_disk_check() argument
653 static void ide_disk_setup(ide_drive_t *drive) in ide_disk_setup() argument
655 struct ide_disk_obj *idkp = drive->driver_data; in ide_disk_setup()
656 struct request_queue *q = drive->queue; in ide_disk_setup()
657 ide_hwif_t *hwif = drive->hwif; in ide_disk_setup()
658 u16 *id = drive->id; in ide_disk_setup()
662 ide_proc_register_driver(drive, idkp->driver); in ide_disk_setup()
664 if ((drive->dev_flags & IDE_DFLAG_ID_READ) == 0) in ide_disk_setup()
667 if (drive->dev_flags & IDE_DFLAG_REMOVABLE) { in ide_disk_setup()
672 drive->dev_flags |= IDE_DFLAG_DOORLOCKING; in ide_disk_setup()
675 (void)set_addressing(drive, 1); in ide_disk_setup()
677 if (drive->dev_flags & IDE_DFLAG_LBA48) { in ide_disk_setup()
686 printk(KERN_INFO "%s: max request size: %dKiB\n", drive->name, in ide_disk_setup()
694 /* calculate drive capacity, and select LBA if possible */ in ide_disk_setup()
695 ide_disk_get_capacity(drive); in ide_disk_setup()
698 * if possible, give fdisk access to more of the drive, in ide_disk_setup()
701 capacity = ide_gd_capacity(drive); in ide_disk_setup()
703 if ((drive->dev_flags & IDE_DFLAG_FORCED_GEOM) == 0) { in ide_disk_setup()
704 if (ata_id_lba48_enabled(drive->id)) { in ide_disk_setup()
706 drive->bios_sect = 63; in ide_disk_setup()
707 drive->bios_head = 255; in ide_disk_setup()
710 if (drive->bios_sect && drive->bios_head) { in ide_disk_setup()
715 drive->bios_cyl = 65535; in ide_disk_setup()
717 cylsz = drive->bios_sect * drive->bios_head; in ide_disk_setup()
721 if (cyl > drive->bios_cyl) in ide_disk_setup()
722 drive->bios_cyl = cyl; in ide_disk_setup()
727 drive->name, capacity, sectors_to_MB(capacity)); in ide_disk_setup()
734 drive->bios_cyl, drive->bios_head, drive->bios_sect); in ide_disk_setup()
738 drive->dev_flags |= IDE_DFLAG_WCACHE; in ide_disk_setup()
740 set_wcache(drive, 1); in ide_disk_setup()
742 if ((drive->dev_flags & IDE_DFLAG_LBA) == 0 && in ide_disk_setup()
743 (drive->head == 0 || drive->head > 16)) { in ide_disk_setup()
745 drive->name, drive->head); in ide_disk_setup()
746 drive->dev_flags &= ~IDE_DFLAG_ATTACH; in ide_disk_setup()
748 drive->dev_flags |= IDE_DFLAG_ATTACH; in ide_disk_setup()
751 static void ide_disk_flush(ide_drive_t *drive) in ide_disk_flush() argument
753 if (ata_id_flush_enabled(drive->id) == 0 || in ide_disk_flush()
754 (drive->dev_flags & IDE_DFLAG_WCACHE) == 0) in ide_disk_flush()
757 if (do_idedisk_flushcache(drive)) in ide_disk_flush()
758 printk(KERN_INFO "%s: wcache flush failed!\n", drive->name); in ide_disk_flush()
761 static int ide_disk_init_media(ide_drive_t *drive, struct gendisk *disk) in ide_disk_init_media() argument
766 static int ide_disk_set_doorlock(ide_drive_t *drive, struct gendisk *disk, in ide_disk_set_doorlock() argument
772 if ((drive->dev_flags & IDE_DFLAG_DOORLOCKING) == 0) in ide_disk_set_doorlock()
780 ret = ide_no_data_taskfile(drive, &cmd); in ide_disk_set_doorlock()
783 drive->dev_flags &= ~IDE_DFLAG_DOORLOCKING; in ide_disk_set_doorlock()