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