linux/drivers/ide/ide-disk.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 *  Copyright (C) 1994-1998        Linus Torvalds & authors (see below)
   4 *  Copyright (C) 1998-2002        Linux ATA Development
   5 *                                    Andre Hedrick <andre@linux-ide.org>
   6 *  Copyright (C) 2003             Red Hat
   7 *  Copyright (C) 2003-2005, 2007  Bartlomiej Zolnierkiewicz
   8 */
   9
  10/*
  11 *  Mostly written by Mark Lord <mlord@pobox.com>
  12 *                and Gadi Oxman <gadio@netvision.net.il>
  13 *                and Andre Hedrick <andre@linux-ide.org>
  14 *
  15 * This is the IDE/ATA disk driver, as evolved from hd.c and ide.c.
  16 */
  17
  18#include <linux/types.h>
  19#include <linux/string.h>
  20#include <linux/kernel.h>
  21#include <linux/timer.h>
  22#include <linux/mm.h>
  23#include <linux/interrupt.h>
  24#include <linux/major.h>
  25#include <linux/errno.h>
  26#include <linux/genhd.h>
  27#include <linux/slab.h>
  28#include <linux/delay.h>
  29#include <linux/mutex.h>
  30#include <linux/leds.h>
  31#include <linux/ide.h>
  32
  33#include <asm/byteorder.h>
  34#include <asm/irq.h>
  35#include <linux/uaccess.h>
  36#include <asm/io.h>
  37#include <asm/div64.h>
  38
  39#include "ide-disk.h"
  40
  41static const u8 ide_rw_cmds[] = {
  42        ATA_CMD_READ_MULTI,
  43        ATA_CMD_WRITE_MULTI,
  44        ATA_CMD_READ_MULTI_EXT,
  45        ATA_CMD_WRITE_MULTI_EXT,
  46        ATA_CMD_PIO_READ,
  47        ATA_CMD_PIO_WRITE,
  48        ATA_CMD_PIO_READ_EXT,
  49        ATA_CMD_PIO_WRITE_EXT,
  50        ATA_CMD_READ,
  51        ATA_CMD_WRITE,
  52        ATA_CMD_READ_EXT,
  53        ATA_CMD_WRITE_EXT,
  54};
  55
  56static void ide_tf_set_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 dma)
  57{
  58        u8 index, lba48, write;
  59
  60        lba48 = (cmd->tf_flags & IDE_TFLAG_LBA48) ? 2 : 0;
  61        write = (cmd->tf_flags & IDE_TFLAG_WRITE) ? 1 : 0;
  62
  63        if (dma) {
  64                cmd->protocol = ATA_PROT_DMA;
  65                index = 8;
  66        } else {
  67                cmd->protocol = ATA_PROT_PIO;
  68                if (drive->mult_count) {
  69                        cmd->tf_flags |= IDE_TFLAG_MULTI_PIO;
  70                        index = 0;
  71                } else
  72                        index = 4;
  73        }
  74
  75        cmd->tf.command = ide_rw_cmds[index + lba48 + write];
  76}
  77
  78/*
  79 * __ide_do_rw_disk() issues READ and WRITE commands to a disk,
  80 * using LBA if supported, or CHS otherwise, to address sectors.
  81 */
  82static ide_startstop_t __ide_do_rw_disk(ide_drive_t *drive, struct request *rq,
  83                                        sector_t block)
  84{
  85        ide_hwif_t *hwif        = drive->hwif;
  86        u16 nsectors            = (u16)blk_rq_sectors(rq);
  87        u8 lba48                = !!(drive->dev_flags & IDE_DFLAG_LBA48);
  88        u8 dma                  = !!(drive->dev_flags & IDE_DFLAG_USING_DMA);
  89        struct ide_cmd          cmd;
  90        struct ide_taskfile     *tf = &cmd.tf;
  91        ide_startstop_t         rc;
  92
  93        if ((hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA) && lba48 && dma) {
  94                if (block + blk_rq_sectors(rq) > 1ULL << 28)
  95                        dma = 0;
  96                else
  97                        lba48 = 0;
  98        }
  99
 100        memset(&cmd, 0, sizeof(cmd));
 101        cmd.valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE;
 102        cmd.valid.in.tf  = IDE_VALID_IN_TF  | IDE_VALID_DEVICE;
 103
 104        if (drive->dev_flags & IDE_DFLAG_LBA) {
 105                if (lba48) {
 106                        pr_debug("%s: LBA=0x%012llx\n", drive->name,
 107                                        (unsigned long long)block);
 108
 109                        tf->nsect  = nsectors & 0xff;
 110                        tf->lbal   = (u8) block;
 111                        tf->lbam   = (u8)(block >>  8);
 112                        tf->lbah   = (u8)(block >> 16);
 113                        tf->device = ATA_LBA;
 114
 115                        tf = &cmd.hob;
 116                        tf->nsect = (nsectors >> 8) & 0xff;
 117                        tf->lbal  = (u8)(block >> 24);
 118                        if (sizeof(block) != 4) {
 119                                tf->lbam = (u8)((u64)block >> 32);
 120                                tf->lbah = (u8)((u64)block >> 40);
 121                        }
 122
 123                        cmd.valid.out.hob = IDE_VALID_OUT_HOB;
 124                        cmd.valid.in.hob  = IDE_VALID_IN_HOB;
 125                        cmd.tf_flags |= IDE_TFLAG_LBA48;
 126                } else {
 127                        tf->nsect  = nsectors & 0xff;
 128                        tf->lbal   = block;
 129                        tf->lbam   = block >>= 8;
 130                        tf->lbah   = block >>= 8;
 131                        tf->device = ((block >> 8) & 0xf) | ATA_LBA;
 132                }
 133        } else {
 134                unsigned int sect, head, cyl, track;
 135
 136                track = (int)block / drive->sect;
 137                sect  = (int)block % drive->sect + 1;
 138                head  = track % drive->head;
 139                cyl   = track / drive->head;
 140
 141                pr_debug("%s: CHS=%u/%u/%u\n", drive->name, cyl, head, sect);
 142
 143                tf->nsect  = nsectors & 0xff;
 144                tf->lbal   = sect;
 145                tf->lbam   = cyl;
 146                tf->lbah   = cyl >> 8;
 147                tf->device = head;
 148        }
 149
 150        cmd.tf_flags |= IDE_TFLAG_FS;
 151
 152        if (rq_data_dir(rq))
 153                cmd.tf_flags |= IDE_TFLAG_WRITE;
 154
 155        ide_tf_set_cmd(drive, &cmd, dma);
 156        cmd.rq = rq;
 157
 158        if (dma == 0) {
 159                ide_init_sg_cmd(&cmd, nsectors << 9);
 160                ide_map_sg(drive, &cmd);
 161        }
 162
 163        rc = do_rw_taskfile(drive, &cmd);
 164
 165        if (rc == ide_stopped && dma) {
 166                /* fallback to PIO */
 167                cmd.tf_flags |= IDE_TFLAG_DMA_PIO_FALLBACK;
 168                ide_tf_set_cmd(drive, &cmd, 0);
 169                ide_init_sg_cmd(&cmd, nsectors << 9);
 170                rc = do_rw_taskfile(drive, &cmd);
 171        }
 172
 173        return rc;
 174}
 175
 176/*
 177 * 268435455  == 137439 MB or 28bit limit
 178 * 320173056  == 163929 MB or 48bit addressing
 179 * 1073741822 == 549756 MB or 48bit addressing fake drive
 180 */
 181
 182static ide_startstop_t ide_do_rw_disk(ide_drive_t *drive, struct request *rq,
 183                                      sector_t block)
 184{
 185        ide_hwif_t *hwif = drive->hwif;
 186
 187        BUG_ON(drive->dev_flags & IDE_DFLAG_BLOCKED);
 188        BUG_ON(blk_rq_is_passthrough(rq));
 189
 190        ledtrig_disk_activity(rq_data_dir(rq) == WRITE);
 191
 192        pr_debug("%s: %sing: block=%llu, sectors=%u\n",
 193                 drive->name, rq_data_dir(rq) == READ ? "read" : "writ",
 194                 (unsigned long long)block, blk_rq_sectors(rq));
 195
 196        if (hwif->rw_disk)
 197                hwif->rw_disk(drive, rq);
 198
 199        return __ide_do_rw_disk(drive, rq, block);
 200}
 201
 202/*
 203 * Queries for true maximum capacity of the drive.
 204 * Returns maximum LBA address (> 0) of the drive, 0 if failed.
 205 */
 206static u64 idedisk_read_native_max_address(ide_drive_t *drive, int lba48)
 207{
 208        struct ide_cmd cmd;
 209        struct ide_taskfile *tf = &cmd.tf;
 210        u64 addr = 0;
 211
 212        memset(&cmd, 0, sizeof(cmd));
 213        if (lba48)
 214                tf->command = ATA_CMD_READ_NATIVE_MAX_EXT;
 215        else
 216                tf->command = ATA_CMD_READ_NATIVE_MAX;
 217        tf->device  = ATA_LBA;
 218
 219        cmd.valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE;
 220        cmd.valid.in.tf  = IDE_VALID_IN_TF  | IDE_VALID_DEVICE;
 221        if (lba48) {
 222                cmd.valid.out.hob = IDE_VALID_OUT_HOB;
 223                cmd.valid.in.hob  = IDE_VALID_IN_HOB;
 224                cmd.tf_flags = IDE_TFLAG_LBA48;
 225        }
 226
 227        ide_no_data_taskfile(drive, &cmd);
 228
 229        /* if OK, compute maximum address value */
 230        if (!(tf->status & ATA_ERR))
 231                addr = ide_get_lba_addr(&cmd, lba48) + 1;
 232
 233        return addr;
 234}
 235
 236/*
 237 * Sets maximum virtual LBA address of the drive.
 238 * Returns new maximum virtual LBA address (> 0) or 0 on failure.
 239 */
 240static u64 idedisk_set_max_address(ide_drive_t *drive, u64 addr_req, int lba48)
 241{
 242        struct ide_cmd cmd;
 243        struct ide_taskfile *tf = &cmd.tf;
 244        u64 addr_set = 0;
 245
 246        addr_req--;
 247
 248        memset(&cmd, 0, sizeof(cmd));
 249        tf->lbal     = (addr_req >>  0) & 0xff;
 250        tf->lbam     = (addr_req >>= 8) & 0xff;
 251        tf->lbah     = (addr_req >>= 8) & 0xff;
 252        if (lba48) {
 253                cmd.hob.lbal = (addr_req >>= 8) & 0xff;
 254                cmd.hob.lbam = (addr_req >>= 8) & 0xff;
 255                cmd.hob.lbah = (addr_req >>= 8) & 0xff;
 256                tf->command  = ATA_CMD_SET_MAX_EXT;
 257        } else {
 258                tf->device   = (addr_req >>= 8) & 0x0f;
 259                tf->command  = ATA_CMD_SET_MAX;
 260        }
 261        tf->device |= ATA_LBA;
 262
 263        cmd.valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE;
 264        cmd.valid.in.tf  = IDE_VALID_IN_TF  | IDE_VALID_DEVICE;
 265        if (lba48) {
 266                cmd.valid.out.hob = IDE_VALID_OUT_HOB;
 267                cmd.valid.in.hob  = IDE_VALID_IN_HOB;
 268                cmd.tf_flags = IDE_TFLAG_LBA48;
 269        }
 270
 271        ide_no_data_taskfile(drive, &cmd);
 272
 273        /* if OK, compute maximum address value */
 274        if (!(tf->status & ATA_ERR))
 275                addr_set = ide_get_lba_addr(&cmd, lba48) + 1;
 276
 277        return addr_set;
 278}
 279
 280static unsigned long long sectors_to_MB(unsigned long long n)
 281{
 282        n <<= 9;                /* make it bytes */
 283        do_div(n, 1000000);     /* make it MB */
 284        return n;
 285}
 286
 287/*
 288 * Some disks report total number of sectors instead of
 289 * maximum sector address.  We list them here.
 290 */
 291static const struct drive_list_entry hpa_list[] = {
 292        { "ST340823A",  NULL },
 293        { "ST320413A",  NULL },
 294        { "ST310211A",  NULL },
 295        { NULL,         NULL }
 296};
 297
 298static u64 ide_disk_hpa_get_native_capacity(ide_drive_t *drive, int lba48)
 299{
 300        u64 capacity, set_max;
 301
 302        capacity = drive->capacity64;
 303        set_max  = idedisk_read_native_max_address(drive, lba48);
 304
 305        if (ide_in_drive_list(drive->id, hpa_list)) {
 306                /*
 307                 * Since we are inclusive wrt to firmware revisions do this
 308                 * extra check and apply the workaround only when needed.
 309                 */
 310                if (set_max == capacity + 1)
 311                        set_max--;
 312        }
 313
 314        return set_max;
 315}
 316
 317static u64 ide_disk_hpa_set_capacity(ide_drive_t *drive, u64 set_max, int lba48)
 318{
 319        set_max = idedisk_set_max_address(drive, set_max, lba48);
 320        if (set_max)
 321                drive->capacity64 = set_max;
 322
 323        return set_max;
 324}
 325
 326static void idedisk_check_hpa(ide_drive_t *drive)
 327{
 328        u64 capacity, set_max;
 329        int lba48 = ata_id_lba48_enabled(drive->id);
 330
 331        capacity = drive->capacity64;
 332        set_max  = ide_disk_hpa_get_native_capacity(drive, lba48);
 333
 334        if (set_max <= capacity)
 335                return;
 336
 337        drive->probed_capacity = set_max;
 338
 339        printk(KERN_INFO "%s: Host Protected Area detected.\n"
 340                         "\tcurrent capacity is %llu sectors (%llu MB)\n"
 341                         "\tnative  capacity is %llu sectors (%llu MB)\n",
 342                         drive->name,
 343                         capacity, sectors_to_MB(capacity),
 344                         set_max, sectors_to_MB(set_max));
 345
 346        if ((drive->dev_flags & IDE_DFLAG_NOHPA) == 0)
 347                return;
 348
 349        set_max = ide_disk_hpa_set_capacity(drive, set_max, lba48);
 350        if (set_max)
 351                printk(KERN_INFO "%s: Host Protected Area disabled.\n",
 352                                 drive->name);
 353}
 354
 355static int ide_disk_get_capacity(ide_drive_t *drive)
 356{
 357        u16 *id = drive->id;
 358        int lba;
 359
 360        if (ata_id_lba48_enabled(id)) {
 361                /* drive speaks 48-bit LBA */
 362                lba = 1;
 363                drive->capacity64 = ata_id_u64(id, ATA_ID_LBA_CAPACITY_2);
 364        } else if (ata_id_has_lba(id) && ata_id_is_lba_capacity_ok(id)) {
 365                /* drive speaks 28-bit LBA */
 366                lba = 1;
 367                drive->capacity64 = ata_id_u32(id, ATA_ID_LBA_CAPACITY);
 368        } else {
 369                /* drive speaks boring old 28-bit CHS */
 370                lba = 0;
 371                drive->capacity64 = drive->cyl * drive->head * drive->sect;
 372        }
 373
 374        drive->probed_capacity = drive->capacity64;
 375
 376        if (lba) {
 377                drive->dev_flags |= IDE_DFLAG_LBA;
 378
 379                /*
 380                * If this device supports the Host Protected Area feature set,
 381                * then we may need to change our opinion about its capacity.
 382                */
 383                if (ata_id_hpa_enabled(id))
 384                        idedisk_check_hpa(drive);
 385        }
 386
 387        /* limit drive capacity to 137GB if LBA48 cannot be used */
 388        if ((drive->dev_flags & IDE_DFLAG_LBA48) == 0 &&
 389            drive->capacity64 > 1ULL << 28) {
 390                printk(KERN_WARNING "%s: cannot use LBA48 - full capacity "
 391                       "%llu sectors (%llu MB)\n",
 392                       drive->name, (unsigned long long)drive->capacity64,
 393                       sectors_to_MB(drive->capacity64));
 394                drive->probed_capacity = drive->capacity64 = 1ULL << 28;
 395        }
 396
 397        if ((drive->hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA) &&
 398            (drive->dev_flags & IDE_DFLAG_LBA48)) {
 399                if (drive->capacity64 > 1ULL << 28) {
 400                        printk(KERN_INFO "%s: cannot use LBA48 DMA - PIO mode"
 401                                         " will be used for accessing sectors "
 402                                         "> %u\n", drive->name, 1 << 28);
 403                } else
 404                        drive->dev_flags &= ~IDE_DFLAG_LBA48;
 405        }
 406
 407        return 0;
 408}
 409
 410static void ide_disk_unlock_native_capacity(ide_drive_t *drive)
 411{
 412        u16 *id = drive->id;
 413        int lba48 = ata_id_lba48_enabled(id);
 414
 415        if ((drive->dev_flags & IDE_DFLAG_LBA) == 0 ||
 416            ata_id_hpa_enabled(id) == 0)
 417                return;
 418
 419        /*
 420         * according to the spec the SET MAX ADDRESS command shall be
 421         * immediately preceded by a READ NATIVE MAX ADDRESS command
 422         */
 423        if (!ide_disk_hpa_get_native_capacity(drive, lba48))
 424                return;
 425
 426        if (ide_disk_hpa_set_capacity(drive, drive->probed_capacity, lba48))
 427                drive->dev_flags |= IDE_DFLAG_NOHPA; /* disable HPA on resume */
 428}
 429
 430static int idedisk_prep_fn(struct request_queue *q, struct request *rq)
 431{
 432        ide_drive_t *drive = q->queuedata;
 433        struct ide_cmd *cmd;
 434
 435        if (req_op(rq) != REQ_OP_FLUSH)
 436                return BLKPREP_OK;
 437
 438        if (rq->special) {
 439                cmd = rq->special;
 440                memset(cmd, 0, sizeof(*cmd));
 441        } else {
 442                cmd = kzalloc(sizeof(*cmd), GFP_ATOMIC);
 443        }
 444
 445        /* FIXME: map struct ide_taskfile on rq->cmd[] */
 446        BUG_ON(cmd == NULL);
 447
 448        if (ata_id_flush_ext_enabled(drive->id) &&
 449            (drive->capacity64 >= (1UL << 28)))
 450                cmd->tf.command = ATA_CMD_FLUSH_EXT;
 451        else
 452                cmd->tf.command = ATA_CMD_FLUSH;
 453        cmd->valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE;
 454        cmd->tf_flags = IDE_TFLAG_DYN;
 455        cmd->protocol = ATA_PROT_NODATA;
 456        rq->cmd_flags &= ~REQ_OP_MASK;
 457        rq->cmd_flags |= REQ_OP_DRV_OUT;
 458        ide_req(rq)->type = ATA_PRIV_TASKFILE;
 459        rq->special = cmd;
 460        cmd->rq = rq;
 461
 462        return BLKPREP_OK;
 463}
 464
 465ide_devset_get(multcount, mult_count);
 466
 467/*
 468 * This is tightly woven into the driver->do_special can not touch.
 469 * DON'T do it again until a total personality rewrite is committed.
 470 */
 471static int set_multcount(ide_drive_t *drive, int arg)
 472{
 473        struct request *rq;
 474
 475        if (arg < 0 || arg > (drive->id[ATA_ID_MAX_MULTSECT] & 0xff))
 476                return -EINVAL;
 477
 478        if (drive->special_flags & IDE_SFLAG_SET_MULTMODE)
 479                return -EBUSY;
 480
 481        rq = blk_get_request(drive->queue, REQ_OP_DRV_IN, __GFP_RECLAIM);
 482        ide_req(rq)->type = ATA_PRIV_TASKFILE;
 483
 484        drive->mult_req = arg;
 485        drive->special_flags |= IDE_SFLAG_SET_MULTMODE;
 486        blk_execute_rq(drive->queue, NULL, rq, 0);
 487        blk_put_request(rq);
 488
 489        return (drive->mult_count == arg) ? 0 : -EIO;
 490}
 491
 492ide_devset_get_flag(nowerr, IDE_DFLAG_NOWERR);
 493
 494static int set_nowerr(ide_drive_t *drive, int arg)
 495{
 496        if (arg < 0 || arg > 1)
 497                return -EINVAL;
 498
 499        if (arg)
 500                drive->dev_flags |= IDE_DFLAG_NOWERR;
 501        else
 502                drive->dev_flags &= ~IDE_DFLAG_NOWERR;
 503
 504        drive->bad_wstat = arg ? BAD_R_STAT : BAD_W_STAT;
 505
 506        return 0;
 507}
 508
 509static int ide_do_setfeature(ide_drive_t *drive, u8 feature, u8 nsect)
 510{
 511        struct ide_cmd cmd;
 512
 513        memset(&cmd, 0, sizeof(cmd));
 514        cmd.tf.feature = feature;
 515        cmd.tf.nsect   = nsect;
 516        cmd.tf.command = ATA_CMD_SET_FEATURES;
 517        cmd.valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE;
 518        cmd.valid.in.tf  = IDE_VALID_IN_TF  | IDE_VALID_DEVICE;
 519
 520        return ide_no_data_taskfile(drive, &cmd);
 521}
 522
 523static void update_flush(ide_drive_t *drive)
 524{
 525        u16 *id = drive->id;
 526        bool wc = false;
 527
 528        if (drive->dev_flags & IDE_DFLAG_WCACHE) {
 529                unsigned long long capacity;
 530                int barrier;
 531                /*
 532                 * We must avoid issuing commands a drive does not
 533                 * understand or we may crash it. We check flush cache
 534                 * is supported. We also check we have the LBA48 flush
 535                 * cache if the drive capacity is too large. By this
 536                 * time we have trimmed the drive capacity if LBA48 is
 537                 * not available so we don't need to recheck that.
 538                 */
 539                capacity = ide_gd_capacity(drive);
 540                barrier = ata_id_flush_enabled(id) &&
 541                        (drive->dev_flags & IDE_DFLAG_NOFLUSH) == 0 &&
 542                        ((drive->dev_flags & IDE_DFLAG_LBA48) == 0 ||
 543                         capacity <= (1ULL << 28) ||
 544                         ata_id_flush_ext_enabled(id));
 545
 546                printk(KERN_INFO "%s: cache flushes %ssupported\n",
 547                       drive->name, barrier ? "" : "not ");
 548
 549                if (barrier) {
 550                        wc = true;
 551                        blk_queue_prep_rq(drive->queue, idedisk_prep_fn);
 552                }
 553        }
 554
 555        blk_queue_write_cache(drive->queue, wc, false);
 556}
 557
 558ide_devset_get_flag(wcache, IDE_DFLAG_WCACHE);
 559
 560static int set_wcache(ide_drive_t *drive, int arg)
 561{
 562        int err = 1;
 563
 564        if (arg < 0 || arg > 1)
 565                return -EINVAL;
 566
 567        if (ata_id_flush_enabled(drive->id)) {
 568                err = ide_do_setfeature(drive,
 569                        arg ? SETFEATURES_WC_ON : SETFEATURES_WC_OFF, 0);
 570                if (err == 0) {
 571                        if (arg)
 572                                drive->dev_flags |= IDE_DFLAG_WCACHE;
 573                        else
 574                                drive->dev_flags &= ~IDE_DFLAG_WCACHE;
 575                }
 576        }
 577
 578        update_flush(drive);
 579
 580        return err;
 581}
 582
 583static int do_idedisk_flushcache(ide_drive_t *drive)
 584{
 585        struct ide_cmd cmd;
 586
 587        memset(&cmd, 0, sizeof(cmd));
 588        if (ata_id_flush_ext_enabled(drive->id))
 589                cmd.tf.command = ATA_CMD_FLUSH_EXT;
 590        else
 591                cmd.tf.command = ATA_CMD_FLUSH;
 592        cmd.valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE;
 593        cmd.valid.in.tf  = IDE_VALID_IN_TF  | IDE_VALID_DEVICE;
 594
 595        return ide_no_data_taskfile(drive, &cmd);
 596}
 597
 598ide_devset_get(acoustic, acoustic);
 599
 600static int set_acoustic(ide_drive_t *drive, int arg)
 601{
 602        if (arg < 0 || arg > 254)
 603                return -EINVAL;
 604
 605        ide_do_setfeature(drive,
 606                arg ? SETFEATURES_AAM_ON : SETFEATURES_AAM_OFF, arg);
 607
 608        drive->acoustic = arg;
 609
 610        return 0;
 611}
 612
 613ide_devset_get_flag(addressing, IDE_DFLAG_LBA48);
 614
 615/*
 616 * drive->addressing:
 617 *      0: 28-bit
 618 *      1: 48-bit
 619 *      2: 48-bit capable doing 28-bit
 620 */
 621static int set_addressing(ide_drive_t *drive, int arg)
 622{
 623        if (arg < 0 || arg > 2)
 624                return -EINVAL;
 625
 626        if (arg && ((drive->hwif->host_flags & IDE_HFLAG_NO_LBA48) ||
 627            ata_id_lba48_enabled(drive->id) == 0))
 628                return -EIO;
 629
 630        if (arg == 2)
 631                arg = 0;
 632
 633        if (arg)
 634                drive->dev_flags |= IDE_DFLAG_LBA48;
 635        else
 636                drive->dev_flags &= ~IDE_DFLAG_LBA48;
 637
 638        return 0;
 639}
 640
 641ide_ext_devset_rw(acoustic, acoustic);
 642ide_ext_devset_rw(address, addressing);
 643ide_ext_devset_rw(multcount, multcount);
 644ide_ext_devset_rw(wcache, wcache);
 645
 646ide_ext_devset_rw_sync(nowerr, nowerr);
 647
 648static int ide_disk_check(ide_drive_t *drive, const char *s)
 649{
 650        return 1;
 651}
 652
 653static void ide_disk_setup(ide_drive_t *drive)
 654{
 655        struct ide_disk_obj *idkp = drive->driver_data;
 656        struct request_queue *q = drive->queue;
 657        ide_hwif_t *hwif = drive->hwif;
 658        u16 *id = drive->id;
 659        char *m = (char *)&id[ATA_ID_PROD];
 660        unsigned long long capacity;
 661
 662        ide_proc_register_driver(drive, idkp->driver);
 663
 664        if ((drive->dev_flags & IDE_DFLAG_ID_READ) == 0)
 665                return;
 666
 667        if (drive->dev_flags & IDE_DFLAG_REMOVABLE) {
 668                /*
 669                 * Removable disks (eg. SYQUEST); ignore 'WD' drives
 670                 */
 671                if (m[0] != 'W' || m[1] != 'D')
 672                        drive->dev_flags |= IDE_DFLAG_DOORLOCKING;
 673        }
 674
 675        (void)set_addressing(drive, 1);
 676
 677        if (drive->dev_flags & IDE_DFLAG_LBA48) {
 678                int max_s = 2048;
 679
 680                if (max_s > hwif->rqsize)
 681                        max_s = hwif->rqsize;
 682
 683                blk_queue_max_hw_sectors(q, max_s);
 684        }
 685
 686        printk(KERN_INFO "%s: max request size: %dKiB\n", drive->name,
 687               queue_max_sectors(q) / 2);
 688
 689        if (ata_id_is_ssd(id)) {
 690                blk_queue_flag_set(QUEUE_FLAG_NONROT, q);
 691                blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, q);
 692        }
 693
 694        /* calculate drive capacity, and select LBA if possible */
 695        ide_disk_get_capacity(drive);
 696
 697        /*
 698         * if possible, give fdisk access to more of the drive,
 699         * by correcting bios_cyls:
 700         */
 701        capacity = ide_gd_capacity(drive);
 702
 703        if ((drive->dev_flags & IDE_DFLAG_FORCED_GEOM) == 0) {
 704                if (ata_id_lba48_enabled(drive->id)) {
 705                        /* compatibility */
 706                        drive->bios_sect = 63;
 707                        drive->bios_head = 255;
 708                }
 709
 710                if (drive->bios_sect && drive->bios_head) {
 711                        unsigned int cap0 = capacity; /* truncate to 32 bits */
 712                        unsigned int cylsz, cyl;
 713
 714                        if (cap0 != capacity)
 715                                drive->bios_cyl = 65535;
 716                        else {
 717                                cylsz = drive->bios_sect * drive->bios_head;
 718                                cyl = cap0 / cylsz;
 719                                if (cyl > 65535)
 720                                        cyl = 65535;
 721                                if (cyl > drive->bios_cyl)
 722                                        drive->bios_cyl = cyl;
 723                        }
 724                }
 725        }
 726        printk(KERN_INFO "%s: %llu sectors (%llu MB)",
 727                         drive->name, capacity, sectors_to_MB(capacity));
 728
 729        /* Only print cache size when it was specified */
 730        if (id[ATA_ID_BUF_SIZE])
 731                printk(KERN_CONT " w/%dKiB Cache", id[ATA_ID_BUF_SIZE] / 2);
 732
 733        printk(KERN_CONT ", CHS=%d/%d/%d\n",
 734                         drive->bios_cyl, drive->bios_head, drive->bios_sect);
 735
 736        /* write cache enabled? */
 737        if ((id[ATA_ID_CSFO] & 1) || ata_id_wcache_enabled(id))
 738                drive->dev_flags |= IDE_DFLAG_WCACHE;
 739
 740        set_wcache(drive, 1);
 741
 742        if ((drive->dev_flags & IDE_DFLAG_LBA) == 0 &&
 743            (drive->head == 0 || drive->head > 16)) {
 744                printk(KERN_ERR "%s: invalid geometry: %d physical heads?\n",
 745                        drive->name, drive->head);
 746                drive->dev_flags &= ~IDE_DFLAG_ATTACH;
 747        } else
 748                drive->dev_flags |= IDE_DFLAG_ATTACH;
 749}
 750
 751static void ide_disk_flush(ide_drive_t *drive)
 752{
 753        if (ata_id_flush_enabled(drive->id) == 0 ||
 754            (drive->dev_flags & IDE_DFLAG_WCACHE) == 0)
 755                return;
 756
 757        if (do_idedisk_flushcache(drive))
 758                printk(KERN_INFO "%s: wcache flush failed!\n", drive->name);
 759}
 760
 761static int ide_disk_init_media(ide_drive_t *drive, struct gendisk *disk)
 762{
 763        return 0;
 764}
 765
 766static int ide_disk_set_doorlock(ide_drive_t *drive, struct gendisk *disk,
 767                                 int on)
 768{
 769        struct ide_cmd cmd;
 770        int ret;
 771
 772        if ((drive->dev_flags & IDE_DFLAG_DOORLOCKING) == 0)
 773                return 0;
 774
 775        memset(&cmd, 0, sizeof(cmd));
 776        cmd.tf.command = on ? ATA_CMD_MEDIA_LOCK : ATA_CMD_MEDIA_UNLOCK;
 777        cmd.valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE;
 778        cmd.valid.in.tf  = IDE_VALID_IN_TF  | IDE_VALID_DEVICE;
 779
 780        ret = ide_no_data_taskfile(drive, &cmd);
 781
 782        if (ret)
 783                drive->dev_flags &= ~IDE_DFLAG_DOORLOCKING;
 784
 785        return ret;
 786}
 787
 788const struct ide_disk_ops ide_ata_disk_ops = {
 789        .check                  = ide_disk_check,
 790        .unlock_native_capacity = ide_disk_unlock_native_capacity,
 791        .get_capacity           = ide_disk_get_capacity,
 792        .setup                  = ide_disk_setup,
 793        .flush                  = ide_disk_flush,
 794        .init_media             = ide_disk_init_media,
 795        .set_doorlock           = ide_disk_set_doorlock,
 796        .do_request             = ide_do_rw_disk,
 797        .ioctl                  = ide_disk_ioctl,
 798};
 799