3 * Provides ACPI support for PATA/SATA.
5 * Copyright (C) 2006 Intel Corp.
6 * Copyright (C) 2006 Randy Dunlap
10 #include <linux/delay.h>
11 #include <linux/device.h>
12 #include <linux/errno.h>
13 #include <linux/kernel.h>
14 #include <linux/acpi.h>
15 #include <linux/libata.h>
16 #include <linux/pci.h>
17 #include <scsi/scsi_device.h>
20 #include <acpi/acpi_bus.h>
21 #include <acpi/acnames.h>
22 #include <acpi/acnamesp.h>
23 #include <acpi/acparser.h>
24 #include <acpi/acexcep.h>
25 #include <acpi/acmacros.h>
26 #include <acpi/actypes.h>
28 #define NO_PORT_MULT 0xffff
29 #define SATA_ADR(root, pmp) (((root) << 16) | (pmp))
31 #define REGS_PER_GTF 7
33 u8 tf
[REGS_PER_GTF
]; /* regs. 0x1f1 - 0x1f7 */
37 * Helper - belongs in the PCI layer somewhere eventually
39 static int is_pci_dev(struct device
*dev
)
41 return (dev
->bus
== &pci_bus_type
);
45 * ata_acpi_associate_sata_port - associate SATA port with ACPI objects
46 * @ap: target SATA port
48 * Look up ACPI objects associated with @ap and initialize acpi_handle
49 * fields of @ap, the port and devices accordingly.
55 * 0 on success, -errno on failure.
57 void ata_acpi_associate_sata_port(struct ata_port
*ap
)
59 WARN_ON(!(ap
->flags
& ATA_FLAG_ACPI_SATA
));
61 if (!ap
->nr_pmp_links
) {
62 acpi_integer adr
= SATA_ADR(ap
->port_no
, NO_PORT_MULT
);
64 ap
->link
.device
->acpi_handle
=
65 acpi_get_child(ap
->host
->acpi_handle
, adr
);
67 struct ata_link
*link
;
69 ap
->link
.device
->acpi_handle
= NULL
;
71 ata_port_for_each_link(link
, ap
) {
72 acpi_integer adr
= SATA_ADR(ap
->port_no
, link
->pmp
);
74 link
->device
->acpi_handle
=
75 acpi_get_child(ap
->host
->acpi_handle
, adr
);
80 static void ata_acpi_associate_ide_port(struct ata_port
*ap
)
84 ap
->acpi_handle
= acpi_get_child(ap
->host
->acpi_handle
, ap
->port_no
);
89 if (ap
->flags
& ATA_FLAG_SLAVE_POSS
)
92 for (i
= 0; i
< max_devices
; i
++) {
93 struct ata_device
*dev
= &ap
->link
.device
[i
];
95 dev
->acpi_handle
= acpi_get_child(ap
->acpi_handle
, i
);
98 if (ata_acpi_gtm(ap
, &ap
->__acpi_init_gtm
) == 0)
99 ap
->pflags
|= ATA_PFLAG_INIT_GTM_VALID
;
102 static void ata_acpi_handle_hotplug(struct ata_port
*ap
, struct kobject
*kobj
,
105 char event_string
[12];
106 char *envp
[] = { event_string
, NULL
};
107 struct ata_eh_info
*ehi
= &ap
->link
.eh_info
;
109 if (event
== 0 || event
== 1) {
111 spin_lock_irqsave(ap
->lock
, flags
);
112 ata_ehi_clear_desc(ehi
);
113 ata_ehi_push_desc(ehi
, "ACPI event");
114 ata_ehi_hotplugged(ehi
);
116 spin_unlock_irqrestore(ap
->lock
, flags
);
120 sprintf(event_string
, "BAY_EVENT=%d", event
);
121 kobject_uevent_env(kobj
, KOBJ_CHANGE
, envp
);
125 static void ata_acpi_dev_notify(acpi_handle handle
, u32 event
, void *data
)
127 struct ata_device
*dev
= data
;
128 struct kobject
*kobj
= NULL
;
131 kobj
= &dev
->sdev
->sdev_gendev
.kobj
;
133 ata_acpi_handle_hotplug(dev
->link
->ap
, kobj
, event
);
136 static void ata_acpi_ap_notify(acpi_handle handle
, u32 event
, void *data
)
138 struct ata_port
*ap
= data
;
140 ata_acpi_handle_hotplug(ap
, &ap
->dev
->kobj
, event
);
144 * ata_acpi_associate - associate ATA host with ACPI objects
145 * @host: target ATA host
147 * Look up ACPI objects associated with @host and initialize
148 * acpi_handle fields of @host, its ports and devices accordingly.
154 * 0 on success, -errno on failure.
156 void ata_acpi_associate(struct ata_host
*host
)
160 if (!is_pci_dev(host
->dev
) || libata_noacpi
)
163 host
->acpi_handle
= DEVICE_ACPI_HANDLE(host
->dev
);
164 if (!host
->acpi_handle
)
167 for (i
= 0; i
< host
->n_ports
; i
++) {
168 struct ata_port
*ap
= host
->ports
[i
];
170 if (host
->ports
[0]->flags
& ATA_FLAG_ACPI_SATA
)
171 ata_acpi_associate_sata_port(ap
);
173 ata_acpi_associate_ide_port(ap
);
176 acpi_install_notify_handler (ap
->acpi_handle
,
181 for (j
= 0; j
< ata_link_max_devices(&ap
->link
); j
++) {
182 struct ata_device
*dev
= &ap
->link
.device
[j
];
184 if (dev
->acpi_handle
)
185 acpi_install_notify_handler (dev
->acpi_handle
,
194 * ata_acpi_dissociate - dissociate ATA host from ACPI objects
195 * @host: target ATA host
197 * This function is called during driver detach after the whole host
203 void ata_acpi_dissociate(struct ata_host
*host
)
207 /* Restore initial _GTM values so that driver which attaches
208 * afterward can use them too.
210 for (i
= 0; i
< host
->n_ports
; i
++) {
211 struct ata_port
*ap
= host
->ports
[i
];
212 const struct ata_acpi_gtm
*gtm
= ata_acpi_init_gtm(ap
);
214 if (ap
->acpi_handle
&& gtm
)
215 ata_acpi_stm(ap
, gtm
);
220 * ata_acpi_gtm - execute _GTM
221 * @ap: target ATA port
222 * @gtm: out parameter for _GTM result
224 * Evaluate _GTM and store the result in @gtm.
230 * 0 on success, -ENOENT if _GTM doesn't exist, -errno on failure.
232 int ata_acpi_gtm(struct ata_port
*ap
, struct ata_acpi_gtm
*gtm
)
234 struct acpi_buffer output
= { .length
= ACPI_ALLOCATE_BUFFER
};
235 union acpi_object
*out_obj
;
239 status
= acpi_evaluate_object(ap
->acpi_handle
, "_GTM", NULL
, &output
);
242 if (status
== AE_NOT_FOUND
)
246 if (ACPI_FAILURE(status
)) {
247 ata_port_printk(ap
, KERN_ERR
,
248 "ACPI get timing mode failed (AE 0x%x)\n",
253 out_obj
= output
.pointer
;
254 if (out_obj
->type
!= ACPI_TYPE_BUFFER
) {
255 ata_port_printk(ap
, KERN_WARNING
,
256 "_GTM returned unexpected object type 0x%x\n",
262 if (out_obj
->buffer
.length
!= sizeof(struct ata_acpi_gtm
)) {
263 ata_port_printk(ap
, KERN_ERR
,
264 "_GTM returned invalid length %d\n",
265 out_obj
->buffer
.length
);
269 memcpy(gtm
, out_obj
->buffer
.pointer
, sizeof(struct ata_acpi_gtm
));
272 kfree(output
.pointer
);
276 EXPORT_SYMBOL_GPL(ata_acpi_gtm
);
279 * ata_acpi_stm - execute _STM
280 * @ap: target ATA port
281 * @stm: timing parameter to _STM
283 * Evaluate _STM with timing parameter @stm.
289 * 0 on success, -ENOENT if _STM doesn't exist, -errno on failure.
291 int ata_acpi_stm(struct ata_port
*ap
, const struct ata_acpi_gtm
*stm
)
294 struct ata_acpi_gtm stm_buf
= *stm
;
295 struct acpi_object_list input
;
296 union acpi_object in_params
[3];
298 in_params
[0].type
= ACPI_TYPE_BUFFER
;
299 in_params
[0].buffer
.length
= sizeof(struct ata_acpi_gtm
);
300 in_params
[0].buffer
.pointer
= (u8
*)&stm_buf
;
301 /* Buffers for id may need byteswapping ? */
302 in_params
[1].type
= ACPI_TYPE_BUFFER
;
303 in_params
[1].buffer
.length
= 512;
304 in_params
[1].buffer
.pointer
= (u8
*)ap
->link
.device
[0].id
;
305 in_params
[2].type
= ACPI_TYPE_BUFFER
;
306 in_params
[2].buffer
.length
= 512;
307 in_params
[2].buffer
.pointer
= (u8
*)ap
->link
.device
[1].id
;
310 input
.pointer
= in_params
;
312 status
= acpi_evaluate_object(ap
->acpi_handle
, "_STM", &input
, NULL
);
314 if (status
== AE_NOT_FOUND
)
316 if (ACPI_FAILURE(status
)) {
317 ata_port_printk(ap
, KERN_ERR
,
318 "ACPI set timing mode failed (status=0x%x)\n", status
);
324 EXPORT_SYMBOL_GPL(ata_acpi_stm
);
327 * ata_dev_get_GTF - get the drive bootup default taskfile settings
328 * @dev: target ATA device
329 * @gtf: output parameter for buffer containing _GTF taskfile arrays
330 * @ptr_to_free: pointer which should be freed
332 * This applies to both PATA and SATA drives.
334 * The _GTF method has no input parameters.
335 * It returns a variable number of register set values (registers
336 * hex 1F1..1F7, taskfiles).
337 * The <variable number> is not known in advance, so have ACPI-CA
338 * allocate the buffer as needed and return it, then free it later.
344 * Number of taskfiles on success, 0 if _GTF doesn't exist or doesn't
345 * contain valid data.
347 static int ata_dev_get_GTF(struct ata_device
*dev
, struct ata_acpi_gtf
**gtf
,
350 struct ata_port
*ap
= dev
->link
->ap
;
352 struct acpi_buffer output
;
353 union acpi_object
*out_obj
;
356 /* set up output buffer */
357 output
.length
= ACPI_ALLOCATE_BUFFER
;
358 output
.pointer
= NULL
; /* ACPI-CA sets this; save/free it later */
360 if (ata_msg_probe(ap
))
361 ata_dev_printk(dev
, KERN_DEBUG
, "%s: ENTER: port#: %d\n",
362 __FUNCTION__
, ap
->port_no
);
364 /* _GTF has no input parameters */
365 status
= acpi_evaluate_object(dev
->acpi_handle
, "_GTF", NULL
, &output
);
367 if (ACPI_FAILURE(status
)) {
368 if (status
!= AE_NOT_FOUND
) {
369 ata_dev_printk(dev
, KERN_WARNING
,
370 "_GTF evaluation failed (AE 0x%x)\n",
376 if (!output
.length
|| !output
.pointer
) {
377 if (ata_msg_probe(ap
))
378 ata_dev_printk(dev
, KERN_DEBUG
, "%s: Run _GTF: "
379 "length or ptr is NULL (0x%llx, 0x%p)\n",
381 (unsigned long long)output
.length
,
386 out_obj
= output
.pointer
;
387 if (out_obj
->type
!= ACPI_TYPE_BUFFER
) {
388 ata_dev_printk(dev
, KERN_WARNING
,
389 "_GTF unexpected object type 0x%x\n",
394 if (out_obj
->buffer
.length
% REGS_PER_GTF
) {
395 ata_dev_printk(dev
, KERN_WARNING
,
396 "unexpected _GTF length (%d)\n",
397 out_obj
->buffer
.length
);
401 *ptr_to_free
= out_obj
;
402 *gtf
= (void *)out_obj
->buffer
.pointer
;
403 rc
= out_obj
->buffer
.length
/ REGS_PER_GTF
;
405 if (ata_msg_probe(ap
))
406 ata_dev_printk(dev
, KERN_DEBUG
, "%s: returning "
407 "gtf=%p, gtf_count=%d, ptr_to_free=%p\n",
408 __FUNCTION__
, *gtf
, rc
, *ptr_to_free
);
412 kfree(output
.pointer
);
417 * ata_acpi_cbl_80wire - Check for 80 wire cable
420 * Return 1 if the ACPI mode data for this port indicates the BIOS selected
424 int ata_acpi_cbl_80wire(struct ata_port
*ap
)
426 const struct ata_acpi_gtm
*gtm
= ata_acpi_init_gtm(ap
);
432 /* Split timing, DMA enabled */
433 if ((gtm
->flags
& 0x11) == 0x11 && gtm
->drive
[0].dma
< 55)
435 if ((gtm
->flags
& 0x14) == 0x14 && gtm
->drive
[1].dma
< 55)
437 /* Shared timing, DMA enabled */
438 if ((gtm
->flags
& 0x11) == 0x01 && gtm
->drive
[0].dma
< 55)
440 if ((gtm
->flags
& 0x14) == 0x04 && gtm
->drive
[0].dma
< 55)
444 if ((valid
& 1) && ata_dev_enabled(&ap
->link
.device
[0]))
446 if ((valid
& 2) && ata_dev_enabled(&ap
->link
.device
[1]))
451 EXPORT_SYMBOL_GPL(ata_acpi_cbl_80wire
);
454 * taskfile_load_raw - send taskfile registers to host controller
455 * @dev: target ATA device
456 * @gtf: raw ATA taskfile register set (0x1f1 - 0x1f7)
458 * Outputs ATA taskfile to standard ATA host controller using MMIO
459 * or PIO as indicated by the ATA_FLAG_MMIO flag.
460 * Writes the control, feature, nsect, lbal, lbam, and lbah registers.
461 * Optionally (ATA_TFLAG_LBA48) writes hob_feature, hob_nsect,
462 * hob_lbal, hob_lbam, and hob_lbah.
464 * This function waits for idle (!BUSY and !DRQ) after writing
465 * registers. If the control register has a new value, this
466 * function also waits for idle after writing control and before
467 * writing the remaining registers.
473 * 0 on success, -errno on failure.
475 static int taskfile_load_raw(struct ata_device
*dev
,
476 const struct ata_acpi_gtf
*gtf
)
478 struct ata_port
*ap
= dev
->link
->ap
;
479 struct ata_taskfile tf
, rtf
;
480 unsigned int err_mask
;
482 if ((gtf
->tf
[0] == 0) && (gtf
->tf
[1] == 0) && (gtf
->tf
[2] == 0)
483 && (gtf
->tf
[3] == 0) && (gtf
->tf
[4] == 0) && (gtf
->tf
[5] == 0)
484 && (gtf
->tf
[6] == 0))
487 ata_tf_init(dev
, &tf
);
489 /* convert gtf to tf */
490 tf
.flags
|= ATA_TFLAG_ISADDR
| ATA_TFLAG_DEVICE
; /* TBD */
491 tf
.protocol
= ATA_PROT_NODATA
;
492 tf
.feature
= gtf
->tf
[0]; /* 0x1f1 */
493 tf
.nsect
= gtf
->tf
[1]; /* 0x1f2 */
494 tf
.lbal
= gtf
->tf
[2]; /* 0x1f3 */
495 tf
.lbam
= gtf
->tf
[3]; /* 0x1f4 */
496 tf
.lbah
= gtf
->tf
[4]; /* 0x1f5 */
497 tf
.device
= gtf
->tf
[5]; /* 0x1f6 */
498 tf
.command
= gtf
->tf
[6]; /* 0x1f7 */
500 if (ata_msg_probe(ap
))
501 ata_dev_printk(dev
, KERN_DEBUG
, "executing ACPI cmd "
502 "%02x/%02x:%02x:%02x:%02x:%02x:%02x\n",
503 tf
.command
, tf
.feature
, tf
.nsect
,
504 tf
.lbal
, tf
.lbam
, tf
.lbah
, tf
.device
);
507 err_mask
= ata_exec_internal(dev
, &rtf
, NULL
, DMA_NONE
, NULL
, 0, 0);
509 ata_dev_printk(dev
, KERN_ERR
,
510 "ACPI cmd %02x/%02x:%02x:%02x:%02x:%02x:%02x failed "
511 "(Emask=0x%x Stat=0x%02x Err=0x%02x)\n",
512 tf
.command
, tf
.feature
, tf
.nsect
, tf
.lbal
, tf
.lbam
,
513 tf
.lbah
, tf
.device
, err_mask
, rtf
.command
, rtf
.feature
);
521 * ata_acpi_exec_tfs - get then write drive taskfile settings
522 * @dev: target ATA device
524 * Evaluate _GTF and excute returned taskfiles.
530 * Number of executed taskfiles on success, 0 if _GTF doesn't exist or
531 * doesn't contain valid data. -errno on other errors.
533 static int ata_acpi_exec_tfs(struct ata_device
*dev
)
535 struct ata_acpi_gtf
*gtf
= NULL
;
536 void *ptr_to_free
= NULL
;
537 int gtf_count
, i
, rc
;
540 gtf_count
= ata_dev_get_GTF(dev
, >f
, &ptr_to_free
);
543 for (i
= 0, rc
= 0; i
< gtf_count
; i
++) {
546 /* ACPI errors are eventually ignored. Run till the
547 * end even after errors.
549 tmp
= taskfile_load_raw(dev
, gtf
++);
562 * ata_acpi_push_id - send Identify data to drive
563 * @dev: target ATA device
565 * _SDD ACPI object: for SATA mode only
566 * Must be after Identify (Packet) Device -- uses its data
567 * ATM this function never returns a failure. It is an optional
568 * method and if it fails for whatever reason, we should still
575 * 0 on success, -errno on failure.
577 static int ata_acpi_push_id(struct ata_device
*dev
)
579 struct ata_port
*ap
= dev
->link
->ap
;
582 struct acpi_object_list input
;
583 union acpi_object in_params
[1];
585 if (ata_msg_probe(ap
))
586 ata_dev_printk(dev
, KERN_DEBUG
, "%s: ix = %d, port#: %d\n",
587 __FUNCTION__
, dev
->devno
, ap
->port_no
);
589 /* Give the drive Identify data to the drive via the _SDD method */
590 /* _SDD: set up input parameters */
592 input
.pointer
= in_params
;
593 in_params
[0].type
= ACPI_TYPE_BUFFER
;
594 in_params
[0].buffer
.length
= sizeof(dev
->id
[0]) * ATA_ID_WORDS
;
595 in_params
[0].buffer
.pointer
= (u8
*)dev
->id
;
596 /* Output buffer: _SDD has no output */
598 /* It's OK for _SDD to be missing too. */
599 swap_buf_le16(dev
->id
, ATA_ID_WORDS
);
600 status
= acpi_evaluate_object(dev
->acpi_handle
, "_SDD", &input
, NULL
);
601 swap_buf_le16(dev
->id
, ATA_ID_WORDS
);
603 err
= ACPI_FAILURE(status
) ? -EIO
: 0;
605 ata_dev_printk(dev
, KERN_WARNING
,
606 "ACPI _SDD failed (AE 0x%x)\n", status
);
612 * ata_acpi_on_suspend - ATA ACPI hook called on suspend
613 * @ap: target ATA port
615 * This function is called when @ap is about to be suspended. All
616 * devices are already put to sleep but the port_suspend() callback
617 * hasn't been executed yet. Error return from this function aborts
624 * 0 on success, -errno on failure.
626 int ata_acpi_on_suspend(struct ata_port
*ap
)
633 * ata_acpi_on_resume - ATA ACPI hook called on resume
634 * @ap: target ATA port
636 * This function is called when @ap is resumed - right after port
637 * itself is resumed but before any EH action is taken.
642 void ata_acpi_on_resume(struct ata_port
*ap
)
644 const struct ata_acpi_gtm
*gtm
= ata_acpi_init_gtm(ap
);
645 struct ata_device
*dev
;
647 /* restore timing parameters */
648 if (ap
->acpi_handle
&& gtm
)
649 ata_acpi_stm(ap
, gtm
);
652 ata_link_for_each_dev(dev
, &ap
->link
)
653 dev
->flags
|= ATA_DFLAG_ACPI_PENDING
;
657 * ata_acpi_on_devcfg - ATA ACPI hook called on device donfiguration
658 * @dev: target ATA device
660 * This function is called when @dev is about to be configured.
661 * IDENTIFY data might have been modified after this hook is run.
667 * Positive number if IDENTIFY data needs to be refreshed, 0 if not,
670 int ata_acpi_on_devcfg(struct ata_device
*dev
)
672 struct ata_port
*ap
= dev
->link
->ap
;
673 struct ata_eh_context
*ehc
= &ap
->link
.eh_context
;
674 int acpi_sata
= ap
->flags
& ATA_FLAG_ACPI_SATA
;
677 if (!dev
->acpi_handle
)
680 /* do we need to do _GTF? */
681 if (!(dev
->flags
& ATA_DFLAG_ACPI_PENDING
) &&
682 !(acpi_sata
&& (ehc
->i
.flags
& ATA_EHI_DID_HARDRESET
)))
685 /* do _SDD if SATA */
687 rc
= ata_acpi_push_id(dev
);
693 rc
= ata_acpi_exec_tfs(dev
);
697 dev
->flags
&= ~ATA_DFLAG_ACPI_PENDING
;
699 /* refresh IDENTIFY page if any _GTF command has been executed */
701 rc
= ata_dev_reread_id(dev
, 0);
703 ata_dev_printk(dev
, KERN_ERR
, "failed to IDENTIFY "
704 "after ACPI commands\n");
712 /* let EH retry on the first failure, disable ACPI on the second */
713 if (dev
->flags
& ATA_DFLAG_ACPI_FAILED
) {
714 ata_dev_printk(dev
, KERN_WARNING
, "ACPI on devcfg failed the "
715 "second time, disabling (errno=%d)\n", rc
);
717 dev
->acpi_handle
= NULL
;
719 /* if port is working, request IDENTIFY reload and continue */
720 if (!(ap
->pflags
& ATA_PFLAG_FROZEN
))
723 dev
->flags
|= ATA_DFLAG_ACPI_FAILED
;
728 * ata_acpi_on_disable - ATA ACPI hook called when a device is disabled
729 * @dev: target ATA device
731 * This function is called when @dev is about to be disabled.
736 void ata_acpi_on_disable(struct ata_device
*dev
)