1 /* 2 * libata-acpi.c 3 * Provides ACPI support for PATA/SATA. 4 * 5 * Copyright (C) 2006 Intel Corp. 6 * Copyright (C) 2006 Randy Dunlap 7 */ 8 9 #include <linux/module.h> 10 #include <linux/ata.h> 11 #include <linux/delay.h> 12 #include <linux/device.h> 13 #include <linux/errno.h> 14 #include <linux/kernel.h> 15 #include <linux/acpi.h> 16 #include <linux/libata.h> 17 #include <linux/pci.h> 18 #include <linux/slab.h> 19 #include <scsi/scsi_device.h> 20 #include "libata.h" 21 22 #include <acpi/acpi_bus.h> 23 24 unsigned int ata_acpi_gtf_filter = ATA_ACPI_FILTER_DEFAULT; 25 module_param_named(acpi_gtf_filter, ata_acpi_gtf_filter, int, 0644); 26 MODULE_PARM_DESC(acpi_gtf_filter, "filter mask for ACPI _GTF commands, set to filter out (0x1=set xfermode, 0x2=lock/freeze lock, 0x4=DIPM, 0x8=FPDMA non-zero offset, 0x10=FPDMA DMA Setup FIS auto-activate)"); 27 28 #define NO_PORT_MULT 0xffff 29 #define SATA_ADR(root, pmp) (((root) << 16) | (pmp)) 30 31 #define REGS_PER_GTF 7 32 struct ata_acpi_gtf { 33 u8 tf[REGS_PER_GTF]; /* regs. 0x1f1 - 0x1f7 */ 34 } __packed; 35 36 /* 37 * Helper - belongs in the PCI layer somewhere eventually 38 */ 39 static int is_pci_dev(struct device *dev) 40 { 41 return (dev->bus == &pci_bus_type); 42 } 43 44 static void ata_acpi_clear_gtf(struct ata_device *dev) 45 { 46 kfree(dev->gtf_cache); 47 dev->gtf_cache = NULL; 48 } 49 50 /** 51 * ata_acpi_associate_sata_port - associate SATA port with ACPI objects 52 * @ap: target SATA port 53 * 54 * Look up ACPI objects associated with @ap and initialize acpi_handle 55 * fields of @ap, the port and devices accordingly. 56 * 57 * LOCKING: 58 * EH context. 59 * 60 * RETURNS: 61 * 0 on success, -errno on failure. 62 */ 63 void ata_acpi_associate_sata_port(struct ata_port *ap) 64 { 65 WARN_ON(!(ap->flags & ATA_FLAG_ACPI_SATA)); 66 67 if (!sata_pmp_attached(ap)) { 68 u64 adr = SATA_ADR(ap->port_no, NO_PORT_MULT); 69 70 ap->link.device->acpi_handle = 71 acpi_get_child(ap->host->acpi_handle, adr); 72 } else { 73 struct ata_link *link; 74 75 ap->link.device->acpi_handle = NULL; 76 77 ata_for_each_link(link, ap, EDGE) { 78 u64 adr = SATA_ADR(ap->port_no, link->pmp); 79 80 link->device->acpi_handle = 81 acpi_get_child(ap->host->acpi_handle, adr); 82 } 83 } 84 } 85 86 static void ata_acpi_associate_ide_port(struct ata_port *ap) 87 { 88 int max_devices, i; 89 90 ap->acpi_handle = acpi_get_child(ap->host->acpi_handle, ap->port_no); 91 if (!ap->acpi_handle) 92 return; 93 94 max_devices = 1; 95 if (ap->flags & ATA_FLAG_SLAVE_POSS) 96 max_devices++; 97 98 for (i = 0; i < max_devices; i++) { 99 struct ata_device *dev = &ap->link.device[i]; 100 101 dev->acpi_handle = acpi_get_child(ap->acpi_handle, i); 102 } 103 104 if (ata_acpi_gtm(ap, &ap->__acpi_init_gtm) == 0) 105 ap->pflags |= ATA_PFLAG_INIT_GTM_VALID; 106 } 107 108 /* @ap and @dev are the same as ata_acpi_handle_hotplug() */ 109 static void ata_acpi_detach_device(struct ata_port *ap, struct ata_device *dev) 110 { 111 if (dev) 112 dev->flags |= ATA_DFLAG_DETACH; 113 else { 114 struct ata_link *tlink; 115 struct ata_device *tdev; 116 117 ata_for_each_link(tlink, ap, EDGE) 118 ata_for_each_dev(tdev, tlink, ALL) 119 tdev->flags |= ATA_DFLAG_DETACH; 120 } 121 122 ata_port_schedule_eh(ap); 123 } 124 125 /** 126 * ata_acpi_handle_hotplug - ACPI event handler backend 127 * @ap: ATA port ACPI event occurred 128 * @dev: ATA device ACPI event occurred (can be NULL) 129 * @event: ACPI event which occurred 130 * 131 * All ACPI bay / device realted events end up in this function. If 132 * the event is port-wide @dev is NULL. If the event is specific to a 133 * device, @dev points to it. 134 * 135 * Hotplug (as opposed to unplug) notification is always handled as 136 * port-wide while unplug only kills the target device on device-wide 137 * event. 138 * 139 * LOCKING: 140 * ACPI notify handler context. May sleep. 141 */ 142 static void ata_acpi_handle_hotplug(struct ata_port *ap, struct ata_device *dev, 143 u32 event) 144 { 145 struct ata_eh_info *ehi = &ap->link.eh_info; 146 int wait = 0; 147 unsigned long flags; 148 acpi_handle handle; 149 150 if (dev) 151 handle = dev->acpi_handle; 152 else 153 handle = ap->acpi_handle; 154 155 spin_lock_irqsave(ap->lock, flags); 156 /* 157 * When dock driver calls into the routine, it will always use 158 * ACPI_NOTIFY_BUS_CHECK/ACPI_NOTIFY_DEVICE_CHECK for add and 159 * ACPI_NOTIFY_EJECT_REQUEST for remove 160 */ 161 switch (event) { 162 case ACPI_NOTIFY_BUS_CHECK: 163 case ACPI_NOTIFY_DEVICE_CHECK: 164 ata_ehi_push_desc(ehi, "ACPI event"); 165 166 ata_ehi_hotplugged(ehi); 167 ata_port_freeze(ap); 168 break; 169 case ACPI_NOTIFY_EJECT_REQUEST: 170 ata_ehi_push_desc(ehi, "ACPI event"); 171 172 ata_acpi_detach_device(ap, dev); 173 wait = 1; 174 break; 175 } 176 177 spin_unlock_irqrestore(ap->lock, flags); 178 179 if (wait) 180 ata_port_wait_eh(ap); 181 } 182 183 static void ata_acpi_dev_notify_dock(acpi_handle handle, u32 event, void *data) 184 { 185 struct ata_device *dev = data; 186 187 ata_acpi_handle_hotplug(dev->link->ap, dev, event); 188 } 189 190 static void ata_acpi_ap_notify_dock(acpi_handle handle, u32 event, void *data) 191 { 192 struct ata_port *ap = data; 193 194 ata_acpi_handle_hotplug(ap, NULL, event); 195 } 196 197 static void ata_acpi_uevent(struct ata_port *ap, struct ata_device *dev, 198 u32 event) 199 { 200 struct kobject *kobj = NULL; 201 char event_string[20]; 202 char *envp[] = { event_string, NULL }; 203 204 if (dev) { 205 if (dev->sdev) 206 kobj = &dev->sdev->sdev_gendev.kobj; 207 } else 208 kobj = &ap->dev->kobj; 209 210 if (kobj) { 211 snprintf(event_string, 20, "BAY_EVENT=%d", event); 212 kobject_uevent_env(kobj, KOBJ_CHANGE, envp); 213 } 214 } 215 216 static void ata_acpi_ap_uevent(acpi_handle handle, u32 event, void *data) 217 { 218 ata_acpi_uevent(data, NULL, event); 219 } 220 221 static void ata_acpi_dev_uevent(acpi_handle handle, u32 event, void *data) 222 { 223 struct ata_device *dev = data; 224 ata_acpi_uevent(dev->link->ap, dev, event); 225 } 226 227 static struct acpi_dock_ops ata_acpi_dev_dock_ops = { 228 .handler = ata_acpi_dev_notify_dock, 229 .uevent = ata_acpi_dev_uevent, 230 }; 231 232 static struct acpi_dock_ops ata_acpi_ap_dock_ops = { 233 .handler = ata_acpi_ap_notify_dock, 234 .uevent = ata_acpi_ap_uevent, 235 }; 236 237 /** 238 * ata_acpi_associate - associate ATA host with ACPI objects 239 * @host: target ATA host 240 * 241 * Look up ACPI objects associated with @host and initialize 242 * acpi_handle fields of @host, its ports and devices accordingly. 243 * 244 * LOCKING: 245 * EH context. 246 * 247 * RETURNS: 248 * 0 on success, -errno on failure. 249 */ 250 void ata_acpi_associate(struct ata_host *host) 251 { 252 int i, j; 253 254 if (!is_pci_dev(host->dev) || libata_noacpi) 255 return; 256 257 host->acpi_handle = DEVICE_ACPI_HANDLE(host->dev); 258 if (!host->acpi_handle) 259 return; 260 261 for (i = 0; i < host->n_ports; i++) { 262 struct ata_port *ap = host->ports[i]; 263 264 if (host->ports[0]->flags & ATA_FLAG_ACPI_SATA) 265 ata_acpi_associate_sata_port(ap); 266 else 267 ata_acpi_associate_ide_port(ap); 268 269 if (ap->acpi_handle) { 270 /* we might be on a docking station */ 271 register_hotplug_dock_device(ap->acpi_handle, 272 &ata_acpi_ap_dock_ops, ap); 273 } 274 275 for (j = 0; j < ata_link_max_devices(&ap->link); j++) { 276 struct ata_device *dev = &ap->link.device[j]; 277 278 if (dev->acpi_handle) { 279 /* we might be on a docking station */ 280 register_hotplug_dock_device(dev->acpi_handle, 281 &ata_acpi_dev_dock_ops, dev); 282 } 283 } 284 } 285 } 286 287 /** 288 * ata_acpi_dissociate - dissociate ATA host from ACPI objects 289 * @host: target ATA host 290 * 291 * This function is called during driver detach after the whole host 292 * is shut down. 293 * 294 * LOCKING: 295 * EH context. 296 */ 297 void ata_acpi_dissociate(struct ata_host *host) 298 { 299 int i; 300 301 /* Restore initial _GTM values so that driver which attaches 302 * afterward can use them too. 303 */ 304 for (i = 0; i < host->n_ports; i++) { 305 struct ata_port *ap = host->ports[i]; 306 const struct ata_acpi_gtm *gtm = ata_acpi_init_gtm(ap); 307 308 if (ap->acpi_handle && gtm) 309 ata_acpi_stm(ap, gtm); 310 } 311 } 312 313 /** 314 * ata_acpi_gtm - execute _GTM 315 * @ap: target ATA port 316 * @gtm: out parameter for _GTM result 317 * 318 * Evaluate _GTM and store the result in @gtm. 319 * 320 * LOCKING: 321 * EH context. 322 * 323 * RETURNS: 324 * 0 on success, -ENOENT if _GTM doesn't exist, -errno on failure. 325 */ 326 int ata_acpi_gtm(struct ata_port *ap, struct ata_acpi_gtm *gtm) 327 { 328 struct acpi_buffer output = { .length = ACPI_ALLOCATE_BUFFER }; 329 union acpi_object *out_obj; 330 acpi_status status; 331 int rc = 0; 332 333 status = acpi_evaluate_object(ap->acpi_handle, "_GTM", NULL, &output); 334 335 rc = -ENOENT; 336 if (status == AE_NOT_FOUND) 337 goto out_free; 338 339 rc = -EINVAL; 340 if (ACPI_FAILURE(status)) { 341 ata_port_printk(ap, KERN_ERR, 342 "ACPI get timing mode failed (AE 0x%x)\n", 343 status); 344 goto out_free; 345 } 346 347 out_obj = output.pointer; 348 if (out_obj->type != ACPI_TYPE_BUFFER) { 349 ata_port_printk(ap, KERN_WARNING, 350 "_GTM returned unexpected object type 0x%x\n", 351 out_obj->type); 352 353 goto out_free; 354 } 355 356 if (out_obj->buffer.length != sizeof(struct ata_acpi_gtm)) { 357 ata_port_printk(ap, KERN_ERR, 358 "_GTM returned invalid length %d\n", 359 out_obj->buffer.length); 360 goto out_free; 361 } 362 363 memcpy(gtm, out_obj->buffer.pointer, sizeof(struct ata_acpi_gtm)); 364 rc = 0; 365 out_free: 366 kfree(output.pointer); 367 return rc; 368 } 369 370 EXPORT_SYMBOL_GPL(ata_acpi_gtm); 371 372 /** 373 * ata_acpi_stm - execute _STM 374 * @ap: target ATA port 375 * @stm: timing parameter to _STM 376 * 377 * Evaluate _STM with timing parameter @stm. 378 * 379 * LOCKING: 380 * EH context. 381 * 382 * RETURNS: 383 * 0 on success, -ENOENT if _STM doesn't exist, -errno on failure. 384 */ 385 int ata_acpi_stm(struct ata_port *ap, const struct ata_acpi_gtm *stm) 386 { 387 acpi_status status; 388 struct ata_acpi_gtm stm_buf = *stm; 389 struct acpi_object_list input; 390 union acpi_object in_params[3]; 391 392 in_params[0].type = ACPI_TYPE_BUFFER; 393 in_params[0].buffer.length = sizeof(struct ata_acpi_gtm); 394 in_params[0].buffer.pointer = (u8 *)&stm_buf; 395 /* Buffers for id may need byteswapping ? */ 396 in_params[1].type = ACPI_TYPE_BUFFER; 397 in_params[1].buffer.length = 512; 398 in_params[1].buffer.pointer = (u8 *)ap->link.device[0].id; 399 in_params[2].type = ACPI_TYPE_BUFFER; 400 in_params[2].buffer.length = 512; 401 in_params[2].buffer.pointer = (u8 *)ap->link.device[1].id; 402 403 input.count = 3; 404 input.pointer = in_params; 405 406 status = acpi_evaluate_object(ap->acpi_handle, "_STM", &input, NULL); 407 408 if (status == AE_NOT_FOUND) 409 return -ENOENT; 410 if (ACPI_FAILURE(status)) { 411 ata_port_printk(ap, KERN_ERR, 412 "ACPI set timing mode failed (status=0x%x)\n", status); 413 return -EINVAL; 414 } 415 return 0; 416 } 417 418 EXPORT_SYMBOL_GPL(ata_acpi_stm); 419 420 /** 421 * ata_dev_get_GTF - get the drive bootup default taskfile settings 422 * @dev: target ATA device 423 * @gtf: output parameter for buffer containing _GTF taskfile arrays 424 * 425 * This applies to both PATA and SATA drives. 426 * 427 * The _GTF method has no input parameters. 428 * It returns a variable number of register set values (registers 429 * hex 1F1..1F7, taskfiles). 430 * The <variable number> is not known in advance, so have ACPI-CA 431 * allocate the buffer as needed and return it, then free it later. 432 * 433 * LOCKING: 434 * EH context. 435 * 436 * RETURNS: 437 * Number of taskfiles on success, 0 if _GTF doesn't exist. -EINVAL 438 * if _GTF is invalid. 439 */ 440 static int ata_dev_get_GTF(struct ata_device *dev, struct ata_acpi_gtf **gtf) 441 { 442 struct ata_port *ap = dev->link->ap; 443 acpi_status status; 444 struct acpi_buffer output; 445 union acpi_object *out_obj; 446 int rc = 0; 447 448 /* if _GTF is cached, use the cached value */ 449 if (dev->gtf_cache) { 450 out_obj = dev->gtf_cache; 451 goto done; 452 } 453 454 /* set up output buffer */ 455 output.length = ACPI_ALLOCATE_BUFFER; 456 output.pointer = NULL; /* ACPI-CA sets this; save/free it later */ 457 458 if (ata_msg_probe(ap)) 459 ata_dev_printk(dev, KERN_DEBUG, "%s: ENTER: port#: %d\n", 460 __func__, ap->port_no); 461 462 /* _GTF has no input parameters */ 463 status = acpi_evaluate_object(dev->acpi_handle, "_GTF", NULL, &output); 464 out_obj = dev->gtf_cache = output.pointer; 465 466 if (ACPI_FAILURE(status)) { 467 if (status != AE_NOT_FOUND) { 468 ata_dev_printk(dev, KERN_WARNING, 469 "_GTF evaluation failed (AE 0x%x)\n", 470 status); 471 rc = -EINVAL; 472 } 473 goto out_free; 474 } 475 476 if (!output.length || !output.pointer) { 477 if (ata_msg_probe(ap)) 478 ata_dev_printk(dev, KERN_DEBUG, "%s: Run _GTF: " 479 "length or ptr is NULL (0x%llx, 0x%p)\n", 480 __func__, 481 (unsigned long long)output.length, 482 output.pointer); 483 rc = -EINVAL; 484 goto out_free; 485 } 486 487 if (out_obj->type != ACPI_TYPE_BUFFER) { 488 ata_dev_printk(dev, KERN_WARNING, 489 "_GTF unexpected object type 0x%x\n", 490 out_obj->type); 491 rc = -EINVAL; 492 goto out_free; 493 } 494 495 if (out_obj->buffer.length % REGS_PER_GTF) { 496 ata_dev_printk(dev, KERN_WARNING, 497 "unexpected _GTF length (%d)\n", 498 out_obj->buffer.length); 499 rc = -EINVAL; 500 goto out_free; 501 } 502 503 done: 504 rc = out_obj->buffer.length / REGS_PER_GTF; 505 if (gtf) { 506 *gtf = (void *)out_obj->buffer.pointer; 507 if (ata_msg_probe(ap)) 508 ata_dev_printk(dev, KERN_DEBUG, 509 "%s: returning gtf=%p, gtf_count=%d\n", 510 __func__, *gtf, rc); 511 } 512 return rc; 513 514 out_free: 515 ata_acpi_clear_gtf(dev); 516 return rc; 517 } 518 519 /** 520 * ata_acpi_gtm_xfermode - determine xfermode from GTM parameter 521 * @dev: target device 522 * @gtm: GTM parameter to use 523 * 524 * Determine xfermask for @dev from @gtm. 525 * 526 * LOCKING: 527 * None. 528 * 529 * RETURNS: 530 * Determined xfermask. 531 */ 532 unsigned long ata_acpi_gtm_xfermask(struct ata_device *dev, 533 const struct ata_acpi_gtm *gtm) 534 { 535 unsigned long xfer_mask = 0; 536 unsigned int type; 537 int unit; 538 u8 mode; 539 540 /* we always use the 0 slot for crap hardware */ 541 unit = dev->devno; 542 if (!(gtm->flags & 0x10)) 543 unit = 0; 544 545 /* PIO */ 546 mode = ata_timing_cycle2mode(ATA_SHIFT_PIO, gtm->drive[unit].pio); 547 xfer_mask |= ata_xfer_mode2mask(mode); 548 549 /* See if we have MWDMA or UDMA data. We don't bother with 550 * MWDMA if UDMA is available as this means the BIOS set UDMA 551 * and our error changedown if it works is UDMA to PIO anyway. 552 */ 553 if (!(gtm->flags & (1 << (2 * unit)))) 554 type = ATA_SHIFT_MWDMA; 555 else 556 type = ATA_SHIFT_UDMA; 557 558 mode = ata_timing_cycle2mode(type, gtm->drive[unit].dma); 559 xfer_mask |= ata_xfer_mode2mask(mode); 560 561 return xfer_mask; 562 } 563 EXPORT_SYMBOL_GPL(ata_acpi_gtm_xfermask); 564 565 /** 566 * ata_acpi_cbl_80wire - Check for 80 wire cable 567 * @ap: Port to check 568 * @gtm: GTM data to use 569 * 570 * Return 1 if the @gtm indicates the BIOS selected an 80wire mode. 571 */ 572 int ata_acpi_cbl_80wire(struct ata_port *ap, const struct ata_acpi_gtm *gtm) 573 { 574 struct ata_device *dev; 575 576 ata_for_each_dev(dev, &ap->link, ENABLED) { 577 unsigned long xfer_mask, udma_mask; 578 579 xfer_mask = ata_acpi_gtm_xfermask(dev, gtm); 580 ata_unpack_xfermask(xfer_mask, NULL, NULL, &udma_mask); 581 582 if (udma_mask & ~ATA_UDMA_MASK_40C) 583 return 1; 584 } 585 586 return 0; 587 } 588 EXPORT_SYMBOL_GPL(ata_acpi_cbl_80wire); 589 590 static void ata_acpi_gtf_to_tf(struct ata_device *dev, 591 const struct ata_acpi_gtf *gtf, 592 struct ata_taskfile *tf) 593 { 594 ata_tf_init(dev, tf); 595 596 tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; 597 tf->protocol = ATA_PROT_NODATA; 598 tf->feature = gtf->tf[0]; /* 0x1f1 */ 599 tf->nsect = gtf->tf[1]; /* 0x1f2 */ 600 tf->lbal = gtf->tf[2]; /* 0x1f3 */ 601 tf->lbam = gtf->tf[3]; /* 0x1f4 */ 602 tf->lbah = gtf->tf[4]; /* 0x1f5 */ 603 tf->device = gtf->tf[5]; /* 0x1f6 */ 604 tf->command = gtf->tf[6]; /* 0x1f7 */ 605 } 606 607 static int ata_acpi_filter_tf(struct ata_device *dev, 608 const struct ata_taskfile *tf, 609 const struct ata_taskfile *ptf) 610 { 611 if (dev->gtf_filter & ATA_ACPI_FILTER_SETXFER) { 612 /* libata doesn't use ACPI to configure transfer mode. 613 * It will only confuse device configuration. Skip. 614 */ 615 if (tf->command == ATA_CMD_SET_FEATURES && 616 tf->feature == SETFEATURES_XFER) 617 return 1; 618 } 619 620 if (dev->gtf_filter & ATA_ACPI_FILTER_LOCK) { 621 /* BIOS writers, sorry but we don't wanna lock 622 * features unless the user explicitly said so. 623 */ 624 625 /* DEVICE CONFIGURATION FREEZE LOCK */ 626 if (tf->command == ATA_CMD_CONF_OVERLAY && 627 tf->feature == ATA_DCO_FREEZE_LOCK) 628 return 1; 629 630 /* SECURITY FREEZE LOCK */ 631 if (tf->command == ATA_CMD_SEC_FREEZE_LOCK) 632 return 1; 633 634 /* SET MAX LOCK and SET MAX FREEZE LOCK */ 635 if ((!ptf || ptf->command != ATA_CMD_READ_NATIVE_MAX) && 636 tf->command == ATA_CMD_SET_MAX && 637 (tf->feature == ATA_SET_MAX_LOCK || 638 tf->feature == ATA_SET_MAX_FREEZE_LOCK)) 639 return 1; 640 } 641 642 if (tf->command == ATA_CMD_SET_FEATURES && 643 tf->feature == SETFEATURES_SATA_ENABLE) { 644 /* inhibit enabling DIPM */ 645 if (dev->gtf_filter & ATA_ACPI_FILTER_DIPM && 646 tf->nsect == SATA_DIPM) 647 return 1; 648 649 /* inhibit FPDMA non-zero offset */ 650 if (dev->gtf_filter & ATA_ACPI_FILTER_FPDMA_OFFSET && 651 (tf->nsect == SATA_FPDMA_OFFSET || 652 tf->nsect == SATA_FPDMA_IN_ORDER)) 653 return 1; 654 655 /* inhibit FPDMA auto activation */ 656 if (dev->gtf_filter & ATA_ACPI_FILTER_FPDMA_AA && 657 tf->nsect == SATA_FPDMA_AA) 658 return 1; 659 } 660 661 return 0; 662 } 663 664 /** 665 * ata_acpi_run_tf - send taskfile registers to host controller 666 * @dev: target ATA device 667 * @gtf: raw ATA taskfile register set (0x1f1 - 0x1f7) 668 * 669 * Outputs ATA taskfile to standard ATA host controller using MMIO 670 * or PIO as indicated by the ATA_FLAG_MMIO flag. 671 * Writes the control, feature, nsect, lbal, lbam, and lbah registers. 672 * Optionally (ATA_TFLAG_LBA48) writes hob_feature, hob_nsect, 673 * hob_lbal, hob_lbam, and hob_lbah. 674 * 675 * This function waits for idle (!BUSY and !DRQ) after writing 676 * registers. If the control register has a new value, this 677 * function also waits for idle after writing control and before 678 * writing the remaining registers. 679 * 680 * LOCKING: 681 * EH context. 682 * 683 * RETURNS: 684 * 1 if command is executed successfully. 0 if ignored, rejected or 685 * filtered out, -errno on other errors. 686 */ 687 static int ata_acpi_run_tf(struct ata_device *dev, 688 const struct ata_acpi_gtf *gtf, 689 const struct ata_acpi_gtf *prev_gtf) 690 { 691 struct ata_taskfile *pptf = NULL; 692 struct ata_taskfile tf, ptf, rtf; 693 unsigned int err_mask; 694 const char *level; 695 const char *descr; 696 char msg[60]; 697 int rc; 698 699 if ((gtf->tf[0] == 0) && (gtf->tf[1] == 0) && (gtf->tf[2] == 0) 700 && (gtf->tf[3] == 0) && (gtf->tf[4] == 0) && (gtf->tf[5] == 0) 701 && (gtf->tf[6] == 0)) 702 return 0; 703 704 ata_acpi_gtf_to_tf(dev, gtf, &tf); 705 if (prev_gtf) { 706 ata_acpi_gtf_to_tf(dev, prev_gtf, &ptf); 707 pptf = &ptf; 708 } 709 710 if (!ata_acpi_filter_tf(dev, &tf, pptf)) { 711 rtf = tf; 712 err_mask = ata_exec_internal(dev, &rtf, NULL, 713 DMA_NONE, NULL, 0, 0); 714 715 switch (err_mask) { 716 case 0: 717 level = KERN_DEBUG; 718 snprintf(msg, sizeof(msg), "succeeded"); 719 rc = 1; 720 break; 721 722 case AC_ERR_DEV: 723 level = KERN_INFO; 724 snprintf(msg, sizeof(msg), 725 "rejected by device (Stat=0x%02x Err=0x%02x)", 726 rtf.command, rtf.feature); 727 rc = 0; 728 break; 729 730 default: 731 level = KERN_ERR; 732 snprintf(msg, sizeof(msg), 733 "failed (Emask=0x%x Stat=0x%02x Err=0x%02x)", 734 err_mask, rtf.command, rtf.feature); 735 rc = -EIO; 736 break; 737 } 738 } else { 739 level = KERN_INFO; 740 snprintf(msg, sizeof(msg), "filtered out"); 741 rc = 0; 742 } 743 descr = ata_get_cmd_descript(tf.command); 744 745 ata_dev_printk(dev, level, 746 "ACPI cmd %02x/%02x:%02x:%02x:%02x:%02x:%02x (%s) %s\n", 747 tf.command, tf.feature, tf.nsect, tf.lbal, 748 tf.lbam, tf.lbah, tf.device, 749 (descr ? descr : "unknown"), msg); 750 751 return rc; 752 } 753 754 /** 755 * ata_acpi_exec_tfs - get then write drive taskfile settings 756 * @dev: target ATA device 757 * @nr_executed: out parameter for the number of executed commands 758 * 759 * Evaluate _GTF and execute returned taskfiles. 760 * 761 * LOCKING: 762 * EH context. 763 * 764 * RETURNS: 765 * Number of executed taskfiles on success, 0 if _GTF doesn't exist. 766 * -errno on other errors. 767 */ 768 static int ata_acpi_exec_tfs(struct ata_device *dev, int *nr_executed) 769 { 770 struct ata_acpi_gtf *gtf = NULL, *pgtf = NULL; 771 int gtf_count, i, rc; 772 773 /* get taskfiles */ 774 rc = ata_dev_get_GTF(dev, >f); 775 if (rc < 0) 776 return rc; 777 gtf_count = rc; 778 779 /* execute them */ 780 for (i = 0; i < gtf_count; i++, gtf++) { 781 rc = ata_acpi_run_tf(dev, gtf, pgtf); 782 if (rc < 0) 783 break; 784 if (rc) { 785 (*nr_executed)++; 786 pgtf = gtf; 787 } 788 } 789 790 ata_acpi_clear_gtf(dev); 791 792 if (rc < 0) 793 return rc; 794 return 0; 795 } 796 797 /** 798 * ata_acpi_push_id - send Identify data to drive 799 * @dev: target ATA device 800 * 801 * _SDD ACPI object: for SATA mode only 802 * Must be after Identify (Packet) Device -- uses its data 803 * ATM this function never returns a failure. It is an optional 804 * method and if it fails for whatever reason, we should still 805 * just keep going. 806 * 807 * LOCKING: 808 * EH context. 809 * 810 * RETURNS: 811 * 0 on success, -ENOENT if _SDD doesn't exist, -errno on failure. 812 */ 813 static int ata_acpi_push_id(struct ata_device *dev) 814 { 815 struct ata_port *ap = dev->link->ap; 816 acpi_status status; 817 struct acpi_object_list input; 818 union acpi_object in_params[1]; 819 820 if (ata_msg_probe(ap)) 821 ata_dev_printk(dev, KERN_DEBUG, "%s: ix = %d, port#: %d\n", 822 __func__, dev->devno, ap->port_no); 823 824 /* Give the drive Identify data to the drive via the _SDD method */ 825 /* _SDD: set up input parameters */ 826 input.count = 1; 827 input.pointer = in_params; 828 in_params[0].type = ACPI_TYPE_BUFFER; 829 in_params[0].buffer.length = sizeof(dev->id[0]) * ATA_ID_WORDS; 830 in_params[0].buffer.pointer = (u8 *)dev->id; 831 /* Output buffer: _SDD has no output */ 832 833 /* It's OK for _SDD to be missing too. */ 834 swap_buf_le16(dev->id, ATA_ID_WORDS); 835 status = acpi_evaluate_object(dev->acpi_handle, "_SDD", &input, NULL); 836 swap_buf_le16(dev->id, ATA_ID_WORDS); 837 838 if (status == AE_NOT_FOUND) 839 return -ENOENT; 840 841 if (ACPI_FAILURE(status)) { 842 ata_dev_printk(dev, KERN_WARNING, 843 "ACPI _SDD failed (AE 0x%x)\n", status); 844 return -EIO; 845 } 846 847 return 0; 848 } 849 850 /** 851 * ata_acpi_on_suspend - ATA ACPI hook called on suspend 852 * @ap: target ATA port 853 * 854 * This function is called when @ap is about to be suspended. All 855 * devices are already put to sleep but the port_suspend() callback 856 * hasn't been executed yet. Error return from this function aborts 857 * suspend. 858 * 859 * LOCKING: 860 * EH context. 861 * 862 * RETURNS: 863 * 0 on success, -errno on failure. 864 */ 865 int ata_acpi_on_suspend(struct ata_port *ap) 866 { 867 /* nada */ 868 return 0; 869 } 870 871 /** 872 * ata_acpi_on_resume - ATA ACPI hook called on resume 873 * @ap: target ATA port 874 * 875 * This function is called when @ap is resumed - right after port 876 * itself is resumed but before any EH action is taken. 877 * 878 * LOCKING: 879 * EH context. 880 */ 881 void ata_acpi_on_resume(struct ata_port *ap) 882 { 883 const struct ata_acpi_gtm *gtm = ata_acpi_init_gtm(ap); 884 struct ata_device *dev; 885 886 if (ap->acpi_handle && gtm) { 887 /* _GTM valid */ 888 889 /* restore timing parameters */ 890 ata_acpi_stm(ap, gtm); 891 892 /* _GTF should immediately follow _STM so that it can 893 * use values set by _STM. Cache _GTF result and 894 * schedule _GTF. 895 */ 896 ata_for_each_dev(dev, &ap->link, ALL) { 897 ata_acpi_clear_gtf(dev); 898 if (ata_dev_enabled(dev) && 899 ata_dev_get_GTF(dev, NULL) >= 0) 900 dev->flags |= ATA_DFLAG_ACPI_PENDING; 901 } 902 } else { 903 /* SATA _GTF needs to be evaulated after _SDD and 904 * there's no reason to evaluate IDE _GTF early 905 * without _STM. Clear cache and schedule _GTF. 906 */ 907 ata_for_each_dev(dev, &ap->link, ALL) { 908 ata_acpi_clear_gtf(dev); 909 if (ata_dev_enabled(dev)) 910 dev->flags |= ATA_DFLAG_ACPI_PENDING; 911 } 912 } 913 } 914 915 /** 916 * ata_acpi_set_state - set the port power state 917 * @ap: target ATA port 918 * @state: state, on/off 919 * 920 * This function executes the _PS0/_PS3 ACPI method to set the power state. 921 * ACPI spec requires _PS0 when IDE power on and _PS3 when power off 922 */ 923 void ata_acpi_set_state(struct ata_port *ap, pm_message_t state) 924 { 925 struct ata_device *dev; 926 927 if (!ap->acpi_handle || (ap->flags & ATA_FLAG_ACPI_SATA)) 928 return; 929 930 /* channel first and then drives for power on and vica versa 931 for power off */ 932 if (state.event == PM_EVENT_ON) 933 acpi_bus_set_power(ap->acpi_handle, ACPI_STATE_D0); 934 935 ata_for_each_dev(dev, &ap->link, ENABLED) { 936 if (dev->acpi_handle) 937 acpi_bus_set_power(dev->acpi_handle, 938 state.event == PM_EVENT_ON ? 939 ACPI_STATE_D0 : ACPI_STATE_D3); 940 } 941 if (state.event != PM_EVENT_ON) 942 acpi_bus_set_power(ap->acpi_handle, ACPI_STATE_D3); 943 } 944 945 /** 946 * ata_acpi_on_devcfg - ATA ACPI hook called on device donfiguration 947 * @dev: target ATA device 948 * 949 * This function is called when @dev is about to be configured. 950 * IDENTIFY data might have been modified after this hook is run. 951 * 952 * LOCKING: 953 * EH context. 954 * 955 * RETURNS: 956 * Positive number if IDENTIFY data needs to be refreshed, 0 if not, 957 * -errno on failure. 958 */ 959 int ata_acpi_on_devcfg(struct ata_device *dev) 960 { 961 struct ata_port *ap = dev->link->ap; 962 struct ata_eh_context *ehc = &ap->link.eh_context; 963 int acpi_sata = ap->flags & ATA_FLAG_ACPI_SATA; 964 int nr_executed = 0; 965 int rc; 966 967 if (!dev->acpi_handle) 968 return 0; 969 970 /* do we need to do _GTF? */ 971 if (!(dev->flags & ATA_DFLAG_ACPI_PENDING) && 972 !(acpi_sata && (ehc->i.flags & ATA_EHI_DID_HARDRESET))) 973 return 0; 974 975 /* do _SDD if SATA */ 976 if (acpi_sata) { 977 rc = ata_acpi_push_id(dev); 978 if (rc && rc != -ENOENT) 979 goto acpi_err; 980 } 981 982 /* do _GTF */ 983 rc = ata_acpi_exec_tfs(dev, &nr_executed); 984 if (rc) 985 goto acpi_err; 986 987 dev->flags &= ~ATA_DFLAG_ACPI_PENDING; 988 989 /* refresh IDENTIFY page if any _GTF command has been executed */ 990 if (nr_executed) { 991 rc = ata_dev_reread_id(dev, 0); 992 if (rc < 0) { 993 ata_dev_printk(dev, KERN_ERR, "failed to IDENTIFY " 994 "after ACPI commands\n"); 995 return rc; 996 } 997 } 998 999 return 0; 1000 1001 acpi_err: 1002 /* ignore evaluation failure if we can continue safely */ 1003 if (rc == -EINVAL && !nr_executed && !(ap->pflags & ATA_PFLAG_FROZEN)) 1004 return 0; 1005 1006 /* fail and let EH retry once more for unknown IO errors */ 1007 if (!(dev->flags & ATA_DFLAG_ACPI_FAILED)) { 1008 dev->flags |= ATA_DFLAG_ACPI_FAILED; 1009 return rc; 1010 } 1011 1012 ata_dev_printk(dev, KERN_WARNING, 1013 "ACPI: failed the second time, disabled\n"); 1014 dev->acpi_handle = NULL; 1015 1016 /* We can safely continue if no _GTF command has been executed 1017 * and port is not frozen. 1018 */ 1019 if (!nr_executed && !(ap->pflags & ATA_PFLAG_FROZEN)) 1020 return 0; 1021 1022 return rc; 1023 } 1024 1025 /** 1026 * ata_acpi_on_disable - ATA ACPI hook called when a device is disabled 1027 * @dev: target ATA device 1028 * 1029 * This function is called when @dev is about to be disabled. 1030 * 1031 * LOCKING: 1032 * EH context. 1033 */ 1034 void ata_acpi_on_disable(struct ata_device *dev) 1035 { 1036 ata_acpi_clear_gtf(dev); 1037 } 1038