cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

libata-acpi.c (26325B)


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