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