10d02842fSSascha Wildner /*******************************************************************************
20d02842fSSascha Wildner  *
30d02842fSSascha Wildner  * Module Name: rsaddr - Address resource descriptors (16/32/64)
40d02842fSSascha Wildner  *
50d02842fSSascha Wildner  ******************************************************************************/
60d02842fSSascha Wildner 
70d02842fSSascha Wildner /*
8fe7b5cb4SSascha Wildner  * Copyright (C) 2000 - 2015, Intel Corp.
90d02842fSSascha Wildner  * All rights reserved.
100d02842fSSascha Wildner  *
110d02842fSSascha Wildner  * Redistribution and use in source and binary forms, with or without
120d02842fSSascha Wildner  * modification, are permitted provided that the following conditions
130d02842fSSascha Wildner  * are met:
140d02842fSSascha Wildner  * 1. Redistributions of source code must retain the above copyright
150d02842fSSascha Wildner  *    notice, this list of conditions, and the following disclaimer,
160d02842fSSascha Wildner  *    without modification.
170d02842fSSascha Wildner  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
180d02842fSSascha Wildner  *    substantially similar to the "NO WARRANTY" disclaimer below
190d02842fSSascha Wildner  *    ("Disclaimer") and any redistribution must be conditioned upon
200d02842fSSascha Wildner  *    including a substantially similar Disclaimer requirement for further
210d02842fSSascha Wildner  *    binary redistribution.
220d02842fSSascha Wildner  * 3. Neither the names of the above-listed copyright holders nor the names
230d02842fSSascha Wildner  *    of any contributors may be used to endorse or promote products derived
240d02842fSSascha Wildner  *    from this software without specific prior written permission.
250d02842fSSascha Wildner  *
260d02842fSSascha Wildner  * Alternatively, this software may be distributed under the terms of the
270d02842fSSascha Wildner  * GNU General Public License ("GPL") version 2 as published by the Free
280d02842fSSascha Wildner  * Software Foundation.
290d02842fSSascha Wildner  *
300d02842fSSascha Wildner  * NO WARRANTY
310d02842fSSascha Wildner  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
320d02842fSSascha Wildner  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
330d02842fSSascha Wildner  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
340d02842fSSascha Wildner  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
350d02842fSSascha Wildner  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
360d02842fSSascha Wildner  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
370d02842fSSascha Wildner  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
380d02842fSSascha Wildner  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
390d02842fSSascha Wildner  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
400d02842fSSascha Wildner  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
410d02842fSSascha Wildner  * POSSIBILITY OF SUCH DAMAGES.
420d02842fSSascha Wildner  */
430d02842fSSascha Wildner 
440d02842fSSascha Wildner #include "acpi.h"
450d02842fSSascha Wildner #include "accommon.h"
460d02842fSSascha Wildner #include "acresrc.h"
470d02842fSSascha Wildner 
480d02842fSSascha Wildner #define _COMPONENT          ACPI_RESOURCES
490d02842fSSascha Wildner         ACPI_MODULE_NAME    ("rsaddr")
500d02842fSSascha Wildner 
510d02842fSSascha Wildner 
520d02842fSSascha Wildner /*******************************************************************************
530d02842fSSascha Wildner  *
540d02842fSSascha Wildner  * AcpiRsConvertAddress16 - All WORD (16-bit) address resources
550d02842fSSascha Wildner  *
560d02842fSSascha Wildner  ******************************************************************************/
570d02842fSSascha Wildner 
580d02842fSSascha Wildner ACPI_RSCONVERT_INFO     AcpiRsConvertAddress16[5] =
590d02842fSSascha Wildner {
600d02842fSSascha Wildner     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_ADDRESS16,
610d02842fSSascha Wildner                         ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS16),
620d02842fSSascha Wildner                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertAddress16)},
630d02842fSSascha Wildner 
640d02842fSSascha Wildner     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_ADDRESS16,
650d02842fSSascha Wildner                         sizeof (AML_RESOURCE_ADDRESS16),
660d02842fSSascha Wildner                         0},
670d02842fSSascha Wildner 
680d02842fSSascha Wildner     /* Resource Type, General Flags, and Type-Specific Flags */
690d02842fSSascha Wildner 
700d02842fSSascha Wildner     {ACPI_RSC_ADDRESS,  0, 0, 0},
710d02842fSSascha Wildner 
720d02842fSSascha Wildner     /*
730d02842fSSascha Wildner      * These fields are contiguous in both the source and destination:
740d02842fSSascha Wildner      * Address Granularity
750d02842fSSascha Wildner      * Address Range Minimum
760d02842fSSascha Wildner      * Address Range Maximum
770d02842fSSascha Wildner      * Address Translation Offset
780d02842fSSascha Wildner      * Address Length
790d02842fSSascha Wildner      */
805943f66cSSascha Wildner     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.Address16.Address.Granularity),
810d02842fSSascha Wildner                         AML_OFFSET (Address16.Granularity),
820d02842fSSascha Wildner                         5},
830d02842fSSascha Wildner 
840d02842fSSascha Wildner     /* Optional ResourceSource (Index and String) */
850d02842fSSascha Wildner 
860d02842fSSascha Wildner     {ACPI_RSC_SOURCE,   ACPI_RS_OFFSET (Data.Address16.ResourceSource),
870d02842fSSascha Wildner                         0,
880d02842fSSascha Wildner                         sizeof (AML_RESOURCE_ADDRESS16)}
890d02842fSSascha Wildner };
900d02842fSSascha Wildner 
910d02842fSSascha Wildner 
920d02842fSSascha Wildner /*******************************************************************************
930d02842fSSascha Wildner  *
940d02842fSSascha Wildner  * AcpiRsConvertAddress32 - All DWORD (32-bit) address resources
950d02842fSSascha Wildner  *
960d02842fSSascha Wildner  ******************************************************************************/
970d02842fSSascha Wildner 
980d02842fSSascha Wildner ACPI_RSCONVERT_INFO     AcpiRsConvertAddress32[5] =
990d02842fSSascha Wildner {
1000d02842fSSascha Wildner     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_ADDRESS32,
1010d02842fSSascha Wildner                         ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS32),
1020d02842fSSascha Wildner                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertAddress32)},
1030d02842fSSascha Wildner 
1040d02842fSSascha Wildner     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_ADDRESS32,
1050d02842fSSascha Wildner                         sizeof (AML_RESOURCE_ADDRESS32),
1060d02842fSSascha Wildner                         0},
1070d02842fSSascha Wildner 
1080d02842fSSascha Wildner     /* Resource Type, General Flags, and Type-Specific Flags */
1090d02842fSSascha Wildner 
1100d02842fSSascha Wildner     {ACPI_RSC_ADDRESS,  0, 0, 0},
1110d02842fSSascha Wildner 
1120d02842fSSascha Wildner     /*
1130d02842fSSascha Wildner      * These fields are contiguous in both the source and destination:
1140d02842fSSascha Wildner      * Address Granularity
1150d02842fSSascha Wildner      * Address Range Minimum
1160d02842fSSascha Wildner      * Address Range Maximum
1170d02842fSSascha Wildner      * Address Translation Offset
1180d02842fSSascha Wildner      * Address Length
1190d02842fSSascha Wildner      */
1205943f66cSSascha Wildner     {ACPI_RSC_MOVE32,   ACPI_RS_OFFSET (Data.Address32.Address.Granularity),
1210d02842fSSascha Wildner                         AML_OFFSET (Address32.Granularity),
1220d02842fSSascha Wildner                         5},
1230d02842fSSascha Wildner 
1240d02842fSSascha Wildner     /* Optional ResourceSource (Index and String) */
1250d02842fSSascha Wildner 
1260d02842fSSascha Wildner     {ACPI_RSC_SOURCE,   ACPI_RS_OFFSET (Data.Address32.ResourceSource),
1270d02842fSSascha Wildner                         0,
1280d02842fSSascha Wildner                         sizeof (AML_RESOURCE_ADDRESS32)}
1290d02842fSSascha Wildner };
1300d02842fSSascha Wildner 
1310d02842fSSascha Wildner 
1320d02842fSSascha Wildner /*******************************************************************************
1330d02842fSSascha Wildner  *
1340d02842fSSascha Wildner  * AcpiRsConvertAddress64 - All QWORD (64-bit) address resources
1350d02842fSSascha Wildner  *
1360d02842fSSascha Wildner  ******************************************************************************/
1370d02842fSSascha Wildner 
1380d02842fSSascha Wildner ACPI_RSCONVERT_INFO     AcpiRsConvertAddress64[5] =
1390d02842fSSascha Wildner {
1400d02842fSSascha Wildner     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_ADDRESS64,
1410d02842fSSascha Wildner                         ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS64),
1420d02842fSSascha Wildner                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertAddress64)},
1430d02842fSSascha Wildner 
1440d02842fSSascha Wildner     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_ADDRESS64,
1450d02842fSSascha Wildner                         sizeof (AML_RESOURCE_ADDRESS64),
1460d02842fSSascha Wildner                         0},
1470d02842fSSascha Wildner 
1480d02842fSSascha Wildner     /* Resource Type, General Flags, and Type-Specific Flags */
1490d02842fSSascha Wildner 
1500d02842fSSascha Wildner     {ACPI_RSC_ADDRESS,  0, 0, 0},
1510d02842fSSascha Wildner 
1520d02842fSSascha Wildner     /*
1530d02842fSSascha Wildner      * These fields are contiguous in both the source and destination:
1540d02842fSSascha Wildner      * Address Granularity
1550d02842fSSascha Wildner      * Address Range Minimum
1560d02842fSSascha Wildner      * Address Range Maximum
1570d02842fSSascha Wildner      * Address Translation Offset
1580d02842fSSascha Wildner      * Address Length
1590d02842fSSascha Wildner      */
1605943f66cSSascha Wildner     {ACPI_RSC_MOVE64,   ACPI_RS_OFFSET (Data.Address64.Address.Granularity),
1610d02842fSSascha Wildner                         AML_OFFSET (Address64.Granularity),
1620d02842fSSascha Wildner                         5},
1630d02842fSSascha Wildner 
1640d02842fSSascha Wildner     /* Optional ResourceSource (Index and String) */
1650d02842fSSascha Wildner 
1660d02842fSSascha Wildner     {ACPI_RSC_SOURCE,   ACPI_RS_OFFSET (Data.Address64.ResourceSource),
1670d02842fSSascha Wildner                         0,
1680d02842fSSascha Wildner                         sizeof (AML_RESOURCE_ADDRESS64)}
1690d02842fSSascha Wildner };
1700d02842fSSascha Wildner 
1710d02842fSSascha Wildner 
1720d02842fSSascha Wildner /*******************************************************************************
1730d02842fSSascha Wildner  *
1740d02842fSSascha Wildner  * AcpiRsConvertExtAddress64 - All Extended (64-bit) address resources
1750d02842fSSascha Wildner  *
1760d02842fSSascha Wildner  ******************************************************************************/
1770d02842fSSascha Wildner 
1780d02842fSSascha Wildner ACPI_RSCONVERT_INFO     AcpiRsConvertExtAddress64[5] =
1790d02842fSSascha Wildner {
1800d02842fSSascha Wildner     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64,
1810d02842fSSascha Wildner                         ACPI_RS_SIZE (ACPI_RESOURCE_EXTENDED_ADDRESS64),
1820d02842fSSascha Wildner                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertExtAddress64)},
1830d02842fSSascha Wildner 
1840d02842fSSascha Wildner     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64,
1850d02842fSSascha Wildner                         sizeof (AML_RESOURCE_EXTENDED_ADDRESS64),
1860d02842fSSascha Wildner                         0},
1870d02842fSSascha Wildner 
1880d02842fSSascha Wildner     /* Resource Type, General Flags, and Type-Specific Flags */
1890d02842fSSascha Wildner 
1900d02842fSSascha Wildner     {ACPI_RSC_ADDRESS,  0, 0, 0},
1910d02842fSSascha Wildner 
1920d02842fSSascha Wildner     /* Revision ID */
1930d02842fSSascha Wildner 
1940d02842fSSascha Wildner     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.ExtAddress64.RevisionID),
1950d02842fSSascha Wildner                         AML_OFFSET (ExtAddress64.RevisionID),
1960d02842fSSascha Wildner                         1},
1970d02842fSSascha Wildner     /*
1980d02842fSSascha Wildner      * These fields are contiguous in both the source and destination:
1990d02842fSSascha Wildner      * Address Granularity
2000d02842fSSascha Wildner      * Address Range Minimum
2010d02842fSSascha Wildner      * Address Range Maximum
2020d02842fSSascha Wildner      * Address Translation Offset
2030d02842fSSascha Wildner      * Address Length
2040d02842fSSascha Wildner      * Type-Specific Attribute
2050d02842fSSascha Wildner      */
2065943f66cSSascha Wildner     {ACPI_RSC_MOVE64,   ACPI_RS_OFFSET (Data.ExtAddress64.Address.Granularity),
2070d02842fSSascha Wildner                         AML_OFFSET (ExtAddress64.Granularity),
2080d02842fSSascha Wildner                         6}
2090d02842fSSascha Wildner };
2100d02842fSSascha Wildner 
2110d02842fSSascha Wildner 
2120d02842fSSascha Wildner /*******************************************************************************
2130d02842fSSascha Wildner  *
2140d02842fSSascha Wildner  * AcpiRsConvertGeneralFlags - Flags common to all address descriptors
2150d02842fSSascha Wildner  *
2160d02842fSSascha Wildner  ******************************************************************************/
2170d02842fSSascha Wildner 
2180d02842fSSascha Wildner static ACPI_RSCONVERT_INFO  AcpiRsConvertGeneralFlags[6] =
2190d02842fSSascha Wildner {
2200d02842fSSascha Wildner     {ACPI_RSC_FLAGINIT, 0, AML_OFFSET (Address.Flags),
2210d02842fSSascha Wildner                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertGeneralFlags)},
2220d02842fSSascha Wildner 
2230d02842fSSascha Wildner     /* Resource Type (Memory, Io, BusNumber, etc.) */
2240d02842fSSascha Wildner 
2250d02842fSSascha Wildner     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.Address.ResourceType),
2260d02842fSSascha Wildner                         AML_OFFSET (Address.ResourceType),
2270d02842fSSascha Wildner                         1},
2280d02842fSSascha Wildner 
2290d02842fSSascha Wildner     /* General Flags - Consume, Decode, MinFixed, MaxFixed */
2300d02842fSSascha Wildner 
2310d02842fSSascha Wildner     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.ProducerConsumer),
2320d02842fSSascha Wildner                         AML_OFFSET (Address.Flags),
2330d02842fSSascha Wildner                         0},
2340d02842fSSascha Wildner 
2350d02842fSSascha Wildner     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.Decode),
2360d02842fSSascha Wildner                         AML_OFFSET (Address.Flags),
2370d02842fSSascha Wildner                         1},
2380d02842fSSascha Wildner 
2390d02842fSSascha Wildner     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.MinAddressFixed),
2400d02842fSSascha Wildner                         AML_OFFSET (Address.Flags),
2410d02842fSSascha Wildner                         2},
2420d02842fSSascha Wildner 
2430d02842fSSascha Wildner     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.MaxAddressFixed),
2440d02842fSSascha Wildner                         AML_OFFSET (Address.Flags),
2450d02842fSSascha Wildner                         3}
2460d02842fSSascha Wildner };
2470d02842fSSascha Wildner 
2480d02842fSSascha Wildner 
2490d02842fSSascha Wildner /*******************************************************************************
2500d02842fSSascha Wildner  *
2510d02842fSSascha Wildner  * AcpiRsConvertMemFlags - Flags common to Memory address descriptors
2520d02842fSSascha Wildner  *
2530d02842fSSascha Wildner  ******************************************************************************/
2540d02842fSSascha Wildner 
2550d02842fSSascha Wildner static ACPI_RSCONVERT_INFO  AcpiRsConvertMemFlags[5] =
2560d02842fSSascha Wildner {
2570d02842fSSascha Wildner     {ACPI_RSC_FLAGINIT, 0, AML_OFFSET (Address.SpecificFlags),
2580d02842fSSascha Wildner                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertMemFlags)},
2590d02842fSSascha Wildner 
2600d02842fSSascha Wildner     /* Memory-specific flags */
2610d02842fSSascha Wildner 
2620d02842fSSascha Wildner     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Mem.WriteProtect),
2630d02842fSSascha Wildner                         AML_OFFSET (Address.SpecificFlags),
2640d02842fSSascha Wildner                         0},
2650d02842fSSascha Wildner 
2660d02842fSSascha Wildner     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Mem.Caching),
2670d02842fSSascha Wildner                         AML_OFFSET (Address.SpecificFlags),
2680d02842fSSascha Wildner                         1},
2690d02842fSSascha Wildner 
2700d02842fSSascha Wildner     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Mem.RangeType),
2710d02842fSSascha Wildner                         AML_OFFSET (Address.SpecificFlags),
2720d02842fSSascha Wildner                         3},
2730d02842fSSascha Wildner 
2740d02842fSSascha Wildner     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Mem.Translation),
2750d02842fSSascha Wildner                         AML_OFFSET (Address.SpecificFlags),
2760d02842fSSascha Wildner                         5}
2770d02842fSSascha Wildner };
2780d02842fSSascha Wildner 
2790d02842fSSascha Wildner 
2800d02842fSSascha Wildner /*******************************************************************************
2810d02842fSSascha Wildner  *
2820d02842fSSascha Wildner  * AcpiRsConvertIoFlags - Flags common to I/O address descriptors
2830d02842fSSascha Wildner  *
2840d02842fSSascha Wildner  ******************************************************************************/
2850d02842fSSascha Wildner 
2860d02842fSSascha Wildner static ACPI_RSCONVERT_INFO  AcpiRsConvertIoFlags[4] =
2870d02842fSSascha Wildner {
2880d02842fSSascha Wildner     {ACPI_RSC_FLAGINIT, 0, AML_OFFSET (Address.SpecificFlags),
2890d02842fSSascha Wildner                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertIoFlags)},
2900d02842fSSascha Wildner 
2910d02842fSSascha Wildner     /* I/O-specific flags */
2920d02842fSSascha Wildner 
2930d02842fSSascha Wildner     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Io.RangeType),
2940d02842fSSascha Wildner                         AML_OFFSET (Address.SpecificFlags),
2950d02842fSSascha Wildner                         0},
2960d02842fSSascha Wildner 
2970d02842fSSascha Wildner     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Io.Translation),
2980d02842fSSascha Wildner                         AML_OFFSET (Address.SpecificFlags),
2990d02842fSSascha Wildner                         4},
3000d02842fSSascha Wildner 
3010d02842fSSascha Wildner     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Io.TranslationType),
3020d02842fSSascha Wildner                         AML_OFFSET (Address.SpecificFlags),
3030d02842fSSascha Wildner                         5}
3040d02842fSSascha Wildner };
3050d02842fSSascha Wildner 
3060d02842fSSascha Wildner 
3070d02842fSSascha Wildner /*******************************************************************************
3080d02842fSSascha Wildner  *
3090d02842fSSascha Wildner  * FUNCTION:    AcpiRsGetAddressCommon
3100d02842fSSascha Wildner  *
3110d02842fSSascha Wildner  * PARAMETERS:  Resource            - Pointer to the internal resource struct
3120d02842fSSascha Wildner  *              Aml                 - Pointer to the AML resource descriptor
3130d02842fSSascha Wildner  *
3140d02842fSSascha Wildner  * RETURN:      TRUE if the ResourceType field is OK, FALSE otherwise
3150d02842fSSascha Wildner  *
3160d02842fSSascha Wildner  * DESCRIPTION: Convert common flag fields from a raw AML resource descriptor
3170d02842fSSascha Wildner  *              to an internal resource descriptor
3180d02842fSSascha Wildner  *
3190d02842fSSascha Wildner  ******************************************************************************/
3200d02842fSSascha Wildner 
3210d02842fSSascha Wildner BOOLEAN
3220d02842fSSascha Wildner AcpiRsGetAddressCommon (
3230d02842fSSascha Wildner     ACPI_RESOURCE           *Resource,
3240d02842fSSascha Wildner     AML_RESOURCE            *Aml)
3250d02842fSSascha Wildner {
3260d02842fSSascha Wildner     ACPI_FUNCTION_ENTRY ();
3270d02842fSSascha Wildner 
3280d02842fSSascha Wildner 
3290d02842fSSascha Wildner     /* Validate the Resource Type */
3300d02842fSSascha Wildner 
331*820c5b08SSascha Wildner     if ((Aml->Address.ResourceType > 2) &&
332*820c5b08SSascha Wildner         (Aml->Address.ResourceType < 0xC0))
3330d02842fSSascha Wildner     {
3340d02842fSSascha Wildner         return (FALSE);
3350d02842fSSascha Wildner     }
3360d02842fSSascha Wildner 
3370d02842fSSascha Wildner     /* Get the Resource Type and General Flags */
3380d02842fSSascha Wildner 
339*820c5b08SSascha Wildner     (void) AcpiRsConvertAmlToResource (
340*820c5b08SSascha Wildner         Resource, Aml, AcpiRsConvertGeneralFlags);
3410d02842fSSascha Wildner 
3420d02842fSSascha Wildner     /* Get the Type-Specific Flags (Memory and I/O descriptors only) */
3430d02842fSSascha Wildner 
3440d02842fSSascha Wildner     if (Resource->Data.Address.ResourceType == ACPI_MEMORY_RANGE)
3450d02842fSSascha Wildner     {
346*820c5b08SSascha Wildner         (void) AcpiRsConvertAmlToResource (
347*820c5b08SSascha Wildner             Resource, Aml, AcpiRsConvertMemFlags);
3480d02842fSSascha Wildner     }
3490d02842fSSascha Wildner     else if (Resource->Data.Address.ResourceType == ACPI_IO_RANGE)
3500d02842fSSascha Wildner     {
351*820c5b08SSascha Wildner         (void) AcpiRsConvertAmlToResource (
352*820c5b08SSascha Wildner             Resource, Aml, AcpiRsConvertIoFlags);
3530d02842fSSascha Wildner     }
3540d02842fSSascha Wildner     else
3550d02842fSSascha Wildner     {
3560d02842fSSascha Wildner         /* Generic resource type, just grab the TypeSpecific byte */
3570d02842fSSascha Wildner 
358*820c5b08SSascha Wildner         Resource->Data.Address.Info.TypeSpecific =
359*820c5b08SSascha Wildner             Aml->Address.SpecificFlags;
3600d02842fSSascha Wildner     }
3610d02842fSSascha Wildner 
3620d02842fSSascha Wildner     return (TRUE);
3630d02842fSSascha Wildner }
3640d02842fSSascha Wildner 
3650d02842fSSascha Wildner 
3660d02842fSSascha Wildner /*******************************************************************************
3670d02842fSSascha Wildner  *
3680d02842fSSascha Wildner  * FUNCTION:    AcpiRsSetAddressCommon
3690d02842fSSascha Wildner  *
3700d02842fSSascha Wildner  * PARAMETERS:  Aml                 - Pointer to the AML resource descriptor
3710d02842fSSascha Wildner  *              Resource            - Pointer to the internal resource struct
3720d02842fSSascha Wildner  *
3730d02842fSSascha Wildner  * RETURN:      None
3740d02842fSSascha Wildner  *
3750d02842fSSascha Wildner  * DESCRIPTION: Convert common flag fields from a resource descriptor to an
3760d02842fSSascha Wildner  *              AML descriptor
3770d02842fSSascha Wildner  *
3780d02842fSSascha Wildner  ******************************************************************************/
3790d02842fSSascha Wildner 
3800d02842fSSascha Wildner void
3810d02842fSSascha Wildner AcpiRsSetAddressCommon (
3820d02842fSSascha Wildner     AML_RESOURCE            *Aml,
3830d02842fSSascha Wildner     ACPI_RESOURCE           *Resource)
3840d02842fSSascha Wildner {
3850d02842fSSascha Wildner     ACPI_FUNCTION_ENTRY ();
3860d02842fSSascha Wildner 
3870d02842fSSascha Wildner 
3880d02842fSSascha Wildner     /* Set the Resource Type and General Flags */
3890d02842fSSascha Wildner 
390*820c5b08SSascha Wildner     (void) AcpiRsConvertResourceToAml (
391*820c5b08SSascha Wildner         Resource, Aml, AcpiRsConvertGeneralFlags);
3920d02842fSSascha Wildner 
3930d02842fSSascha Wildner     /* Set the Type-Specific Flags (Memory and I/O descriptors only) */
3940d02842fSSascha Wildner 
3950d02842fSSascha Wildner     if (Resource->Data.Address.ResourceType == ACPI_MEMORY_RANGE)
3960d02842fSSascha Wildner     {
397*820c5b08SSascha Wildner         (void) AcpiRsConvertResourceToAml (
398*820c5b08SSascha Wildner             Resource, Aml, AcpiRsConvertMemFlags);
3990d02842fSSascha Wildner     }
4000d02842fSSascha Wildner     else if (Resource->Data.Address.ResourceType == ACPI_IO_RANGE)
4010d02842fSSascha Wildner     {
402*820c5b08SSascha Wildner         (void) AcpiRsConvertResourceToAml (
403*820c5b08SSascha Wildner             Resource, Aml, AcpiRsConvertIoFlags);
4040d02842fSSascha Wildner     }
4050d02842fSSascha Wildner     else
4060d02842fSSascha Wildner     {
4070d02842fSSascha Wildner         /* Generic resource type, just copy the TypeSpecific byte */
4080d02842fSSascha Wildner 
409*820c5b08SSascha Wildner         Aml->Address.SpecificFlags =
410*820c5b08SSascha Wildner             Resource->Data.Address.Info.TypeSpecific;
4110d02842fSSascha Wildner     }
4120d02842fSSascha Wildner }
413