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