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