rsxface.c revision 1da177e4c3f41524e886b7f1b8a0c1fc7321cac
11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*******************************************************************************
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Module Name: rsxface - Public interfaces to the resource manager
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ******************************************************************************/
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 2000 - 2005, R. Byron Moore
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * All rights reserved.
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Redistribution and use in source and binary forms, with or without
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * modification, are permitted provided that the following conditions
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * are met:
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 1. Redistributions of source code must retain the above copyright
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    notice, this list of conditions, and the following disclaimer,
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    without modification.
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 2. Redistributions in binary form must reproduce at minimum a disclaimer
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    substantially similar to the "NO WARRANTY" disclaimer below
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    ("Disclaimer") and any redistribution must be conditioned upon
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    including a substantially similar Disclaimer requirement for further
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    binary redistribution.
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 3. Neither the names of the above-listed copyright holders nor the names
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    of any contributors may be used to endorse or promote products derived
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    from this software without specific prior written permission.
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Alternatively, this software may be distributed under the terms of the
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * GNU General Public License ("GPL") version 2 as published by the Free
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Software Foundation.
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * NO WARRANTY
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * POSSIBILITY OF SUCH DAMAGES.
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/module.h>
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <acpi/acpi.h>
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <acpi/acresrc.h>
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _COMPONENT          ACPI_RESOURCES
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 ACPI_MODULE_NAME    ("rsxface")
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*******************************************************************************
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_get_irq_routing_table
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  device_handle   - a handle to the Bus device we are querying
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              ret_buffer      - a pointer to a buffer to receive the
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *                                current resources for the device
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      Status
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DESCRIPTION: This function is called to get the IRQ routing table for a
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              specific bus.  The caller must first acquire a handle for the
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              desired bus.  The routine table is placed in the buffer pointed
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              to by the ret_buffer variable parameter.
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              If the function fails an appropriate status will be returned
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              and the value of ret_buffer is undefined.
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              This function attempts to execute the _PRT method contained in
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              the object indicated by the passed device_handle.
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ******************************************************************************/
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsacpi_status
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsacpi_get_irq_routing_table (
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_handle                     device_handle,
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct acpi_buffer              *ret_buffer)
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_status                     status;
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ACPI_FUNCTION_TRACE ("acpi_get_irq_routing_table ");
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * Must have a valid handle and buffer, So we have to have a handle
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * and a return buffer structure, and if there is a non-zero buffer length
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * we also need a valid pointer in the buffer. If it's a zero buffer length,
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * we'll be returning the needed buffer size, so keep going.
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 */
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (!device_handle) {
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		return_ACPI_STATUS (AE_BAD_PARAMETER);
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	status = acpi_ut_validate_buffer (ret_buffer);
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (ACPI_FAILURE (status)) {
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		return_ACPI_STATUS (status);
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	status = acpi_rs_get_prt_method_data (device_handle, ret_buffer);
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return_ACPI_STATUS (status);
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*******************************************************************************
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_get_current_resources
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  device_handle   - a handle to the device object for the
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *                                device we are querying
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              ret_buffer      - a pointer to a buffer to receive the
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *                                current resources for the device
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      Status
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DESCRIPTION: This function is called to get the current resources for a
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              specific device.  The caller must first acquire a handle for
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              the desired device.  The resource data is placed in the buffer
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              pointed to by the ret_buffer variable parameter.
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              If the function fails an appropriate status will be returned
1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              and the value of ret_buffer is undefined.
1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              This function attempts to execute the _CRS method contained in
1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              the object indicated by the passed device_handle.
1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ******************************************************************************/
1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsacpi_status
1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsacpi_get_current_resources (
1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_handle                     device_handle,
1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct acpi_buffer              *ret_buffer)
1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_status                     status;
1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ACPI_FUNCTION_TRACE ("acpi_get_current_resources");
1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*
1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * Must have a valid handle and buffer, So we have to have a handle
1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * and a return buffer structure, and if there is a non-zero buffer length
1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * we also need a valid pointer in the buffer. If it's a zero buffer length,
1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * we'll be returning the needed buffer size, so keep going.
1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 */
1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (!device_handle) {
1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		return_ACPI_STATUS (AE_BAD_PARAMETER);
1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	status = acpi_ut_validate_buffer (ret_buffer);
1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (ACPI_FAILURE (status)) {
1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		return_ACPI_STATUS (status);
1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	status = acpi_rs_get_crs_method_data (device_handle, ret_buffer);
1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return_ACPI_STATUS (status);
1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(acpi_get_current_resources);
1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*******************************************************************************
1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_get_possible_resources
1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  device_handle   - a handle to the device object for the
1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *                                device we are querying
1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              ret_buffer      - a pointer to a buffer to receive the
1701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *                                resources for the device
1711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      Status
1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DESCRIPTION: This function is called to get a list of the possible resources
1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              for a specific device.  The caller must first acquire a handle
1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              for the desired device.  The resource data is placed in the
1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              buffer pointed to by the ret_buffer variable.
1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              If the function fails an appropriate status will be returned
1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              and the value of ret_buffer is undefined.
1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ******************************************************************************/
1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef ACPI_FUTURE_USAGE
1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsacpi_status
1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsacpi_get_possible_resources (
1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_handle                     device_handle,
1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct acpi_buffer              *ret_buffer)
1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_status                     status;
1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ACPI_FUNCTION_TRACE ("acpi_get_possible_resources");
1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*
1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * Must have a valid handle and buffer, So we have to have a handle
1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * and a return buffer structure, and if there is a non-zero buffer length
1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * we also need a valid pointer in the buffer. If it's a zero buffer length,
1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * we'll be returning the needed buffer size, so keep going.
2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 */
2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (!device_handle) {
2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		return_ACPI_STATUS (AE_BAD_PARAMETER);
2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	status = acpi_ut_validate_buffer (ret_buffer);
2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (ACPI_FAILURE (status)) {
2071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		return_ACPI_STATUS (status);
2081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
2091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	status = acpi_rs_get_prs_method_data (device_handle, ret_buffer);
2111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return_ACPI_STATUS (status);
2121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(acpi_get_possible_resources);
2141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif  /*  ACPI_FUTURE_USAGE  */
2151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*******************************************************************************
2181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_walk_resources
2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  device_handle   - a handle to the device object for the
2221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *                                device we are querying
2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              Path            - method name of the resources we want
2241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *                                (METHOD_NAME__CRS or METHOD_NAME__PRS)
2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              user_function   - called for each resource
2261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              Context         - passed to user_function
2271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      Status
2291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DESCRIPTION: Retrieves the current or possible resource list for the
2311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              specified device.  The user_function is called once for
2321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              each resource in the list.
2331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
2341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ******************************************************************************/
2351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsacpi_status
2371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsacpi_walk_resources (
2381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_handle                             device_handle,
2391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char                                    *path,
2401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ACPI_WALK_RESOURCE_CALLBACK     user_function,
2411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	void                                    *context)
2421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
2431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_status                         status;
2441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct acpi_buffer                  buffer = {ACPI_ALLOCATE_BUFFER, NULL};
2451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct acpi_resource                *resource;
2461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct acpi_resource                *buffer_end;
2471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ACPI_FUNCTION_TRACE ("acpi_walk_resources");
2501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (!device_handle ||
2531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		(ACPI_STRNCMP (path, METHOD_NAME__CRS, sizeof (METHOD_NAME__CRS)) &&
2541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		 ACPI_STRNCMP (path, METHOD_NAME__PRS, sizeof (METHOD_NAME__PRS)))) {
2551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		return_ACPI_STATUS (AE_BAD_PARAMETER);
2561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
2571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	status = acpi_rs_get_method_data (device_handle, path, &buffer);
2591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (ACPI_FAILURE (status)) {
2601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		return_ACPI_STATUS (status);
2611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
2621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Setup pointers */
2641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	resource  = (struct acpi_resource *) buffer.pointer;
2661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	buffer_end = ACPI_CAST_PTR (struct acpi_resource,
2671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			  ((u8 *) buffer.pointer + buffer.length));
2681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Walk the resource list */
2701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	for (;;) {
2721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (!resource || resource->id == ACPI_RSTYPE_END_TAG) {
2731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			break;
2741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
2751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		status = user_function (resource, context);
2771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		switch (status) {
2791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		case AE_OK:
2801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		case AE_CTRL_DEPTH:
2811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			/* Just keep going */
2831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			status = AE_OK;
2851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			break;
2861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		case AE_CTRL_TERMINATE:
2881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			/* Exit now, with OK stats */
2901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			status = AE_OK;
2921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			goto cleanup;
2931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		default:
2951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			/* All others are valid exceptions */
2971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			goto cleanup;
2991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
3001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		/* Get the next resource descriptor */
3021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		resource = ACPI_NEXT_RESOURCE (resource);
3041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		/* Check for end-of-buffer */
3061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (resource >= buffer_end) {
3081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			goto cleanup;
3091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
3101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
3111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldscleanup:
3131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_os_free (buffer.pointer);
3151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return_ACPI_STATUS (status);
3161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
3171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(acpi_walk_resources);
3181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*******************************************************************************
3211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_set_current_resources
3231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  device_handle   - a handle to the device object for the
3251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *                                device we are changing the resources of
3261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              in_buffer       - a pointer to a buffer containing the
3271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *                                resources to be set for the device
3281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      Status
3301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DESCRIPTION: This function is called to set the current resources for a
3321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              specific device.  The caller must first acquire a handle for
3331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              the desired device.  The resource data is passed to the routine
3341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              the buffer pointed to by the in_buffer variable.
3351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ******************************************************************************/
3371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsacpi_status
3391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsacpi_set_current_resources (
3401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_handle                     device_handle,
3411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct acpi_buffer              *in_buffer)
3421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
3431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	acpi_status                     status;
3441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ACPI_FUNCTION_TRACE ("acpi_set_current_resources");
3471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*
3501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * Must have a valid handle and buffer
3511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 */
3521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if ((!device_handle)      ||
3531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		(!in_buffer)          ||
3541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		(!in_buffer->pointer) ||
3551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		(!in_buffer->length)) {
3561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		return_ACPI_STATUS (AE_BAD_PARAMETER);
3571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
3581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	status = acpi_rs_set_srs_method_data (device_handle, in_buffer);
3601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return_ACPI_STATUS (status);
3611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
3621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(acpi_set_current_resources);
3631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ACPI_COPY_FIELD(out, in, field)  ((out)->field = (in)->field)
3661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ACPI_COPY_ADDRESS(out, in)                      \
3671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ACPI_COPY_FIELD(out, in, resource_type);             \
3681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ACPI_COPY_FIELD(out, in, producer_consumer);         \
3691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ACPI_COPY_FIELD(out, in, decode);                    \
3701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ACPI_COPY_FIELD(out, in, min_address_fixed);         \
3711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ACPI_COPY_FIELD(out, in, max_address_fixed);         \
3721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ACPI_COPY_FIELD(out, in, attribute);                 \
3731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ACPI_COPY_FIELD(out, in, granularity);               \
3741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ACPI_COPY_FIELD(out, in, min_address_range);         \
3751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ACPI_COPY_FIELD(out, in, max_address_range);         \
3761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ACPI_COPY_FIELD(out, in, address_translation_offset); \
3771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ACPI_COPY_FIELD(out, in, address_length);            \
3781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	ACPI_COPY_FIELD(out, in, resource_source);
3791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/******************************************************************************
3811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FUNCTION:    acpi_resource_to_address64
3831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PARAMETERS:  resource                - Pointer to a resource
3851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              out                     - Pointer to the users's return
3861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *                                        buffer (a struct
3871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *                                        struct acpi_resource_address64)
3881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * RETURN:      Status
3901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * DESCRIPTION: If the resource is an address16, address32, or address64,
3921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              copy it to the address64 return buffer.  This saves the
3931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              caller from having to duplicate code for different-sized
3941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *              addresses.
3951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
3961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ******************************************************************************/
3971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsacpi_status
3991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsacpi_resource_to_address64 (
4001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct acpi_resource                *resource,
4011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct acpi_resource_address64      *out)
4021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
4031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct acpi_resource_address16      *address16;
4041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct acpi_resource_address32      *address32;
4051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	switch (resource->id) {
4081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	case ACPI_RSTYPE_ADDRESS16:
4091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		address16 = (struct acpi_resource_address16 *) &resource->data;
4111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		ACPI_COPY_ADDRESS(out, address16);
4121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
4131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	case ACPI_RSTYPE_ADDRESS32:
4161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		address32 = (struct acpi_resource_address32 *) &resource->data;
4181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		ACPI_COPY_ADDRESS(out, address32);
4191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
4201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	case ACPI_RSTYPE_ADDRESS64:
4231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		/* Simple copy for 64 bit source */
4251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		ACPI_MEMCPY (out, &resource->data, sizeof (struct acpi_resource_address64));
4271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
4281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	default:
4311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		return (AE_BAD_PARAMETER);
4321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
4331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return (AE_OK);
4351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
4361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsEXPORT_SYMBOL(acpi_resource_to_address64);
4371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
438