11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/******************************************************************************* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Module Name: rsaddr - Address resource descriptors (16/32/64) 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ******************************************************************************/ 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 877848130e53b06c22fe37a7b6acbb82bb3e9bfbaBob Moore * Copyright (C) 2000 - 2012, Intel Corp. 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 <acpi/acpi.h> 45e2f7a7772880458edff1b1cc5a988947229fac26Len Brown#include "accommon.h" 46e2f7a7772880458edff1b1cc5a988947229fac26Len Brown#include "acresrc.h" 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _COMPONENT ACPI_RESOURCES 494be44fcd3bf648b782f4460fd06dfae6c42ded4bLen BrownACPI_MODULE_NAME("rsaddr") 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 51aff8c2777d1a9edf97f26bf60579f9c931443eb1Robert Moore/******************************************************************************* 52aff8c2777d1a9edf97f26bf60579f9c931443eb1Robert Moore * 530897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * acpi_rs_convert_address16 - All WORD (16-bit) address resources 54aff8c2777d1a9edf97f26bf60579f9c931443eb1Robert Moore * 55aff8c2777d1a9edf97f26bf60579f9c931443eb1Robert Moore ******************************************************************************/ 560897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moorestruct acpi_rsconvert_info acpi_rs_convert_address16[5] = { 570897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_ADDRESS16, 580897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore ACPI_RS_SIZE(struct acpi_resource_address16), 590897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore ACPI_RSC_TABLE_SIZE(acpi_rs_convert_address16)}, 60aff8c2777d1a9edf97f26bf60579f9c931443eb1Robert Moore 610897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_ADDRESS16, 620897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore sizeof(struct aml_resource_address16), 630897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 0}, 64aff8c2777d1a9edf97f26bf60579f9c931443eb1Robert Moore 650897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore /* Resource Type, General Flags, and Type-Specific Flags */ 66aff8c2777d1a9edf97f26bf60579f9c931443eb1Robert Moore 670897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_ADDRESS, 0, 0, 0}, 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* 700897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * These fields are contiguous in both the source and destination: 7150eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * Address Granularity 7250eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * Address Range Minimum 7350eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * Address Range Maximum 7450eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * Address Translation Offset 7550eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * Address Length 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 770897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.address16.granularity), 780897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore AML_OFFSET(address16.granularity), 790897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 5}, 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 810897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore /* Optional resource_source (Index and String) */ 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 830897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_SOURCE, ACPI_RS_OFFSET(data.address16.resource_source), 840897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 0, 850897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore sizeof(struct aml_resource_address16)} 860897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore}; 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/******************************************************************************* 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 900897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * acpi_rs_convert_address32 - All DWORD (32-bit) address resources 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ******************************************************************************/ 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 940897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moorestruct acpi_rsconvert_info acpi_rs_convert_address32[5] = { 950897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_ADDRESS32, 960897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore ACPI_RS_SIZE(struct acpi_resource_address32), 970897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore ACPI_RSC_TABLE_SIZE(acpi_rs_convert_address32)}, 9844f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore 990897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_ADDRESS32, 1000897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore sizeof(struct aml_resource_address32), 1010897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 0}, 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1030897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore /* Resource Type, General Flags, and Type-Specific Flags */ 10444f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore 1050897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_ADDRESS, 0, 0, 0}, 10644f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore 10750eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore /* 1080897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * These fields are contiguous in both the source and destination: 10950eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * Address Granularity 11050eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * Address Range Minimum 11150eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * Address Range Maximum 11250eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * Address Translation Offset 11350eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * Address Length 11450eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore */ 1150897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.address32.granularity), 1160897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore AML_OFFSET(address32.granularity), 1170897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 5}, 11844f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore 1190897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore /* Optional resource_source (Index and String) */ 1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1210897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_SOURCE, ACPI_RS_OFFSET(data.address32.resource_source), 1220897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 0, 1230897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore sizeof(struct aml_resource_address32)} 1240897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore}; 1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/******************************************************************************* 1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 1280897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * acpi_rs_convert_address64 - All QWORD (64-bit) address resources 1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ******************************************************************************/ 1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1320897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moorestruct acpi_rsconvert_info acpi_rs_convert_address64[5] = { 1330897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_ADDRESS64, 1340897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore ACPI_RS_SIZE(struct acpi_resource_address64), 1350897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore ACPI_RSC_TABLE_SIZE(acpi_rs_convert_address64)}, 1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1370897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_ADDRESS64, 1380897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore sizeof(struct aml_resource_address64), 1390897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 0}, 1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1410897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore /* Resource Type, General Flags, and Type-Specific Flags */ 1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1430897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_ADDRESS, 0, 0, 0}, 1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* 1460897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * These fields are contiguous in both the source and destination: 14750eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * Address Granularity 14850eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * Address Range Minimum 14950eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * Address Range Maximum 15050eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * Address Translation Offset 15150eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * Address Length 1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 1530897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_MOVE64, ACPI_RS_OFFSET(data.address64.granularity), 1540897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore AML_OFFSET(address64.granularity), 1550897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 5}, 1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1570897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore /* Optional resource_source (Index and String) */ 1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1590897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_SOURCE, ACPI_RS_OFFSET(data.address64.resource_source), 1600897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 0, 1610897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore sizeof(struct aml_resource_address64)} 1620897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore}; 1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/******************************************************************************* 1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 1660897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * acpi_rs_convert_ext_address64 - All Extended (64-bit) address resources 1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ******************************************************************************/ 1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1700897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moorestruct acpi_rsconvert_info acpi_rs_convert_ext_address64[5] = { 1710897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64, 1720897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore ACPI_RS_SIZE(struct acpi_resource_extended_address64), 1730897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore ACPI_RSC_TABLE_SIZE(acpi_rs_convert_ext_address64)}, 1740897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 1750897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64, 1760897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore sizeof(struct aml_resource_extended_address64), 1770897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 0}, 1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1790897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore /* Resource Type, General Flags, and Type-Specific Flags */ 18044f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore 1810897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_ADDRESS, 0, 0, 0}, 1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1830897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore /* Revision ID */ 18444f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore 1850897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.ext_address64.revision_iD), 1860897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore AML_OFFSET(ext_address64.revision_iD), 1870897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 1}, 18850eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore /* 1890897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * These fields are contiguous in both the source and destination: 19050eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * Address Granularity 19150eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * Address Range Minimum 19250eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * Address Range Maximum 19350eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * Address Translation Offset 19450eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * Address Length 1950897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * Type-Specific Attribute 19650eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore */ 1970897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_MOVE64, ACPI_RS_OFFSET(data.ext_address64.granularity), 1980897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore AML_OFFSET(ext_address64.granularity), 1990897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 6} 2000897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore}; 2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/******************************************************************************* 2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 2040897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * acpi_rs_convert_general_flags - Flags common to all address descriptors 2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ******************************************************************************/ 2071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2080897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moorestatic struct acpi_rsconvert_info acpi_rs_convert_general_flags[6] = { 2090897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_FLAGINIT, 0, AML_OFFSET(address.flags), 2100897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore ACPI_RSC_TABLE_SIZE(acpi_rs_convert_general_flags)}, 21144f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore 2120897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore /* Resource Type (Memory, Io, bus_number, etc.) */ 2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2140897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.address.resource_type), 2150897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore AML_OFFSET(address.resource_type), 2160897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 1}, 2171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2180897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore /* General Flags - Consume, Decode, min_fixed, max_fixed */ 21944f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore 2200897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.address.producer_consumer), 2210897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore AML_OFFSET(address.flags), 2220897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 0}, 2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2240897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.address.decode), 2250897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore AML_OFFSET(address.flags), 2260897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 1}, 2271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2280897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.address.min_address_fixed), 2290897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore AML_OFFSET(address.flags), 2300897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 2}, 2311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2320897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.address.max_address_fixed), 2330897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore AML_OFFSET(address.flags), 2340897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 3} 2350897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore}; 2361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 23750eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore/******************************************************************************* 23850eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * 2390897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * acpi_rs_convert_mem_flags - Flags common to Memory address descriptors 24050eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * 24150eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore ******************************************************************************/ 2421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2430897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moorestatic struct acpi_rsconvert_info acpi_rs_convert_mem_flags[5] = { 2440897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_FLAGINIT, 0, AML_OFFSET(address.specific_flags), 2450897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore ACPI_RSC_TABLE_SIZE(acpi_rs_convert_mem_flags)}, 24644f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore 2470897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore /* Memory-specific flags */ 2481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2490897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.address.info.mem.write_protect), 2500897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore AML_OFFSET(address.specific_flags), 2510897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 0}, 2521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2530897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.address.info.mem.caching), 2540897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore AML_OFFSET(address.specific_flags), 2550897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 1}, 2561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2570897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.address.info.mem.range_type), 2580897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore AML_OFFSET(address.specific_flags), 2590897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 3}, 2600897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 2610897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.address.info.mem.translation), 2620897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore AML_OFFSET(address.specific_flags), 2630897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 5} 2640897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore}; 2650897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 2660897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore/******************************************************************************* 2670897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * 2680897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * acpi_rs_convert_io_flags - Flags common to I/O address descriptors 2690897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * 2700897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore ******************************************************************************/ 2711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2720897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moorestatic struct acpi_rsconvert_info acpi_rs_convert_io_flags[4] = { 2730897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_FLAGINIT, 0, AML_OFFSET(address.specific_flags), 2740897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore ACPI_RSC_TABLE_SIZE(acpi_rs_convert_io_flags)}, 2751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2760897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore /* I/O-specific flags */ 2771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2780897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.address.info.io.range_type), 2790897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore AML_OFFSET(address.specific_flags), 2800897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 0}, 2811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2820897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.address.info.io.translation), 2830897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore AML_OFFSET(address.specific_flags), 2840897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 4}, 2850897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 2860897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore {ACPI_RSC_1BITFLAG, 2870897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore ACPI_RS_OFFSET(data.address.info.io.translation_type), 2880897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore AML_OFFSET(address.specific_flags), 2890897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 5} 2900897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore}; 2911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 29250eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore/******************************************************************************* 29350eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * 2940897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * FUNCTION: acpi_rs_get_address_common 29550eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * 2960897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * PARAMETERS: Resource - Pointer to the internal resource struct 2970897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * Aml - Pointer to the AML resource descriptor 29850eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * 2990897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * RETURN: TRUE if the resource_type field is OK, FALSE otherwise 30050eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * 3010897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * DESCRIPTION: Convert common flag fields from a raw AML resource descriptor 3020897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * to an internal resource descriptor 30350eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore * 30450eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore ******************************************************************************/ 3051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3060897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Mooreu8 3070897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Mooreacpi_rs_get_address_common(struct acpi_resource *resource, 3080897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore union aml_resource *aml) 30950eca3eb89d73d9f0aa070b126c7ee6a616016abBob Moore{ 3100897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore ACPI_FUNCTION_ENTRY(); 3111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3120897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore /* Validate the Resource Type */ 3131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3140897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore if ((aml->address.resource_type > 2) 3150897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore && (aml->address.resource_type < 0xC0)) { 3160897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore return (FALSE); 3171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds } 3181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3190897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore /* Get the Resource Type and General Flags */ 32044f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore 3210897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore (void)acpi_rs_convert_aml_to_resource(resource, aml, 3220897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore acpi_rs_convert_general_flags); 3230897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 3240897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore /* Get the Type-Specific Flags (Memory and I/O descriptors only) */ 3251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3260897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore if (resource->data.address.resource_type == ACPI_MEMORY_RANGE) { 3270897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore (void)acpi_rs_convert_aml_to_resource(resource, aml, 3280897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore acpi_rs_convert_mem_flags); 3290897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore } else if (resource->data.address.resource_type == ACPI_IO_RANGE) { 3300897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore (void)acpi_rs_convert_aml_to_resource(resource, aml, 3310897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore acpi_rs_convert_io_flags); 3320897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore } else { 3330897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore /* Generic resource type, just grab the type_specific byte */ 33444f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore 3350897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore resource->data.address.info.type_specific = 3360897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore aml->address.specific_flags; 3370897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore } 3380897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore 3390897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore return (TRUE); 3401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 3411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/******************************************************************************* 3431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 3440897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * FUNCTION: acpi_rs_set_address_common 3451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 3460897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * PARAMETERS: Aml - Pointer to the AML resource descriptor 3470897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * Resource - Pointer to the internal resource struct 3481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 3490897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * RETURN: None 3501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 3510897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * DESCRIPTION: Convert common flag fields from a resource descriptor to an 3520897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore * AML descriptor 3531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 3541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ******************************************************************************/ 3551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3560897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moorevoid 3570897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Mooreacpi_rs_set_address_common(union aml_resource *aml, 3580897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore struct acpi_resource *resource) 3591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 3600897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore ACPI_FUNCTION_ENTRY(); 36144f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore 3620897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore /* Set the Resource Type and General Flags */ 3631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3640897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore (void)acpi_rs_convert_resource_to_aml(resource, aml, 3650897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore acpi_rs_convert_general_flags); 36644f6c01242da4e162f28d8e1216a8c7a91174605Robert Moore 3670897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore /* Set the Type-Specific Flags (Memory and I/O descriptors only) */ 3681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3690897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore if (resource->data.address.resource_type == ACPI_MEMORY_RANGE) { 3700897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore (void)acpi_rs_convert_resource_to_aml(resource, aml, 3710897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore acpi_rs_convert_mem_flags); 3720897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore } else if (resource->data.address.resource_type == ACPI_IO_RANGE) { 3730897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore (void)acpi_rs_convert_resource_to_aml(resource, aml, 3740897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore acpi_rs_convert_io_flags); 3750897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore } else { 3760897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore /* Generic resource type, just copy the type_specific byte */ 3771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3780897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore aml->address.specific_flags = 3790897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore resource->data.address.info.type_specific; 3800897831bb54eb36fd9e2a22da7f0f64be1b20d09Bob Moore } 3811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 382