xref: /openbmc/linux/drivers/ata/libata-acpi.c (revision 9344dade)
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, &gtf);
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