xref: /freebsd/sys/contrib/dev/acpica/components/resources/rsaddr.c (revision a159c266a93c3c4f229864954c5f963acd8f60f2)
1*a159c266SJung-uk Kim /*******************************************************************************
2*a159c266SJung-uk Kim  *
3*a159c266SJung-uk Kim  * Module Name: rsaddr - Address resource descriptors (16/32/64)
4*a159c266SJung-uk Kim  *
5*a159c266SJung-uk Kim  ******************************************************************************/
6*a159c266SJung-uk Kim 
7*a159c266SJung-uk Kim /*
8*a159c266SJung-uk Kim  * Copyright (C) 2000 - 2012, Intel Corp.
9*a159c266SJung-uk Kim  * All rights reserved.
10*a159c266SJung-uk Kim  *
11*a159c266SJung-uk Kim  * Redistribution and use in source and binary forms, with or without
12*a159c266SJung-uk Kim  * modification, are permitted provided that the following conditions
13*a159c266SJung-uk Kim  * are met:
14*a159c266SJung-uk Kim  * 1. Redistributions of source code must retain the above copyright
15*a159c266SJung-uk Kim  *    notice, this list of conditions, and the following disclaimer,
16*a159c266SJung-uk Kim  *    without modification.
17*a159c266SJung-uk Kim  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18*a159c266SJung-uk Kim  *    substantially similar to the "NO WARRANTY" disclaimer below
19*a159c266SJung-uk Kim  *    ("Disclaimer") and any redistribution must be conditioned upon
20*a159c266SJung-uk Kim  *    including a substantially similar Disclaimer requirement for further
21*a159c266SJung-uk Kim  *    binary redistribution.
22*a159c266SJung-uk Kim  * 3. Neither the names of the above-listed copyright holders nor the names
23*a159c266SJung-uk Kim  *    of any contributors may be used to endorse or promote products derived
24*a159c266SJung-uk Kim  *    from this software without specific prior written permission.
25*a159c266SJung-uk Kim  *
26*a159c266SJung-uk Kim  * Alternatively, this software may be distributed under the terms of the
27*a159c266SJung-uk Kim  * GNU General Public License ("GPL") version 2 as published by the Free
28*a159c266SJung-uk Kim  * Software Foundation.
29*a159c266SJung-uk Kim  *
30*a159c266SJung-uk Kim  * NO WARRANTY
31*a159c266SJung-uk Kim  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32*a159c266SJung-uk Kim  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33*a159c266SJung-uk Kim  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34*a159c266SJung-uk Kim  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35*a159c266SJung-uk Kim  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36*a159c266SJung-uk Kim  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37*a159c266SJung-uk Kim  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38*a159c266SJung-uk Kim  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39*a159c266SJung-uk Kim  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40*a159c266SJung-uk Kim  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41*a159c266SJung-uk Kim  * POSSIBILITY OF SUCH DAMAGES.
42*a159c266SJung-uk Kim  */
43*a159c266SJung-uk Kim 
44*a159c266SJung-uk Kim #define __RSADDR_C__
45*a159c266SJung-uk Kim 
46*a159c266SJung-uk Kim #include <contrib/dev/acpica/include/acpi.h>
47*a159c266SJung-uk Kim #include <contrib/dev/acpica/include/accommon.h>
48*a159c266SJung-uk Kim #include <contrib/dev/acpica/include/acresrc.h>
49*a159c266SJung-uk Kim 
50*a159c266SJung-uk Kim #define _COMPONENT          ACPI_RESOURCES
51*a159c266SJung-uk Kim         ACPI_MODULE_NAME    ("rsaddr")
52*a159c266SJung-uk Kim 
53*a159c266SJung-uk Kim 
54*a159c266SJung-uk Kim /*******************************************************************************
55*a159c266SJung-uk Kim  *
56*a159c266SJung-uk Kim  * AcpiRsConvertAddress16 - All WORD (16-bit) address resources
57*a159c266SJung-uk Kim  *
58*a159c266SJung-uk Kim  ******************************************************************************/
59*a159c266SJung-uk Kim 
60*a159c266SJung-uk Kim ACPI_RSCONVERT_INFO     AcpiRsConvertAddress16[5] =
61*a159c266SJung-uk Kim {
62*a159c266SJung-uk Kim     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_ADDRESS16,
63*a159c266SJung-uk Kim                         ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS16),
64*a159c266SJung-uk Kim                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertAddress16)},
65*a159c266SJung-uk Kim 
66*a159c266SJung-uk Kim     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_ADDRESS16,
67*a159c266SJung-uk Kim                         sizeof (AML_RESOURCE_ADDRESS16),
68*a159c266SJung-uk Kim                         0},
69*a159c266SJung-uk Kim 
70*a159c266SJung-uk Kim     /* Resource Type, General Flags, and Type-Specific Flags */
71*a159c266SJung-uk Kim 
72*a159c266SJung-uk Kim     {ACPI_RSC_ADDRESS,  0, 0, 0},
73*a159c266SJung-uk Kim 
74*a159c266SJung-uk Kim     /*
75*a159c266SJung-uk Kim      * These fields are contiguous in both the source and destination:
76*a159c266SJung-uk Kim      * Address Granularity
77*a159c266SJung-uk Kim      * Address Range Minimum
78*a159c266SJung-uk Kim      * Address Range Maximum
79*a159c266SJung-uk Kim      * Address Translation Offset
80*a159c266SJung-uk Kim      * Address Length
81*a159c266SJung-uk Kim      */
82*a159c266SJung-uk Kim     {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.Address16.Granularity),
83*a159c266SJung-uk Kim                         AML_OFFSET (Address16.Granularity),
84*a159c266SJung-uk Kim                         5},
85*a159c266SJung-uk Kim 
86*a159c266SJung-uk Kim     /* Optional ResourceSource (Index and String) */
87*a159c266SJung-uk Kim 
88*a159c266SJung-uk Kim     {ACPI_RSC_SOURCE,   ACPI_RS_OFFSET (Data.Address16.ResourceSource),
89*a159c266SJung-uk Kim                         0,
90*a159c266SJung-uk Kim                         sizeof (AML_RESOURCE_ADDRESS16)}
91*a159c266SJung-uk Kim };
92*a159c266SJung-uk Kim 
93*a159c266SJung-uk Kim 
94*a159c266SJung-uk Kim /*******************************************************************************
95*a159c266SJung-uk Kim  *
96*a159c266SJung-uk Kim  * AcpiRsConvertAddress32 - All DWORD (32-bit) address resources
97*a159c266SJung-uk Kim  *
98*a159c266SJung-uk Kim  ******************************************************************************/
99*a159c266SJung-uk Kim 
100*a159c266SJung-uk Kim ACPI_RSCONVERT_INFO     AcpiRsConvertAddress32[5] =
101*a159c266SJung-uk Kim {
102*a159c266SJung-uk Kim     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_ADDRESS32,
103*a159c266SJung-uk Kim                         ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS32),
104*a159c266SJung-uk Kim                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertAddress32)},
105*a159c266SJung-uk Kim 
106*a159c266SJung-uk Kim     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_ADDRESS32,
107*a159c266SJung-uk Kim                         sizeof (AML_RESOURCE_ADDRESS32),
108*a159c266SJung-uk Kim                         0},
109*a159c266SJung-uk Kim 
110*a159c266SJung-uk Kim     /* Resource Type, General Flags, and Type-Specific Flags */
111*a159c266SJung-uk Kim 
112*a159c266SJung-uk Kim     {ACPI_RSC_ADDRESS,  0, 0, 0},
113*a159c266SJung-uk Kim 
114*a159c266SJung-uk Kim     /*
115*a159c266SJung-uk Kim      * These fields are contiguous in both the source and destination:
116*a159c266SJung-uk Kim      * Address Granularity
117*a159c266SJung-uk Kim      * Address Range Minimum
118*a159c266SJung-uk Kim      * Address Range Maximum
119*a159c266SJung-uk Kim      * Address Translation Offset
120*a159c266SJung-uk Kim      * Address Length
121*a159c266SJung-uk Kim      */
122*a159c266SJung-uk Kim     {ACPI_RSC_MOVE32,   ACPI_RS_OFFSET (Data.Address32.Granularity),
123*a159c266SJung-uk Kim                         AML_OFFSET (Address32.Granularity),
124*a159c266SJung-uk Kim                         5},
125*a159c266SJung-uk Kim 
126*a159c266SJung-uk Kim     /* Optional ResourceSource (Index and String) */
127*a159c266SJung-uk Kim 
128*a159c266SJung-uk Kim     {ACPI_RSC_SOURCE,   ACPI_RS_OFFSET (Data.Address32.ResourceSource),
129*a159c266SJung-uk Kim                         0,
130*a159c266SJung-uk Kim                         sizeof (AML_RESOURCE_ADDRESS32)}
131*a159c266SJung-uk Kim };
132*a159c266SJung-uk Kim 
133*a159c266SJung-uk Kim 
134*a159c266SJung-uk Kim /*******************************************************************************
135*a159c266SJung-uk Kim  *
136*a159c266SJung-uk Kim  * AcpiRsConvertAddress64 - All QWORD (64-bit) address resources
137*a159c266SJung-uk Kim  *
138*a159c266SJung-uk Kim  ******************************************************************************/
139*a159c266SJung-uk Kim 
140*a159c266SJung-uk Kim ACPI_RSCONVERT_INFO     AcpiRsConvertAddress64[5] =
141*a159c266SJung-uk Kim {
142*a159c266SJung-uk Kim     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_ADDRESS64,
143*a159c266SJung-uk Kim                         ACPI_RS_SIZE (ACPI_RESOURCE_ADDRESS64),
144*a159c266SJung-uk Kim                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertAddress64)},
145*a159c266SJung-uk Kim 
146*a159c266SJung-uk Kim     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_ADDRESS64,
147*a159c266SJung-uk Kim                         sizeof (AML_RESOURCE_ADDRESS64),
148*a159c266SJung-uk Kim                         0},
149*a159c266SJung-uk Kim 
150*a159c266SJung-uk Kim     /* Resource Type, General Flags, and Type-Specific Flags */
151*a159c266SJung-uk Kim 
152*a159c266SJung-uk Kim     {ACPI_RSC_ADDRESS,  0, 0, 0},
153*a159c266SJung-uk Kim 
154*a159c266SJung-uk Kim     /*
155*a159c266SJung-uk Kim      * These fields are contiguous in both the source and destination:
156*a159c266SJung-uk Kim      * Address Granularity
157*a159c266SJung-uk Kim      * Address Range Minimum
158*a159c266SJung-uk Kim      * Address Range Maximum
159*a159c266SJung-uk Kim      * Address Translation Offset
160*a159c266SJung-uk Kim      * Address Length
161*a159c266SJung-uk Kim      */
162*a159c266SJung-uk Kim     {ACPI_RSC_MOVE64,   ACPI_RS_OFFSET (Data.Address64.Granularity),
163*a159c266SJung-uk Kim                         AML_OFFSET (Address64.Granularity),
164*a159c266SJung-uk Kim                         5},
165*a159c266SJung-uk Kim 
166*a159c266SJung-uk Kim     /* Optional ResourceSource (Index and String) */
167*a159c266SJung-uk Kim 
168*a159c266SJung-uk Kim     {ACPI_RSC_SOURCE,   ACPI_RS_OFFSET (Data.Address64.ResourceSource),
169*a159c266SJung-uk Kim                         0,
170*a159c266SJung-uk Kim                         sizeof (AML_RESOURCE_ADDRESS64)}
171*a159c266SJung-uk Kim };
172*a159c266SJung-uk Kim 
173*a159c266SJung-uk Kim 
174*a159c266SJung-uk Kim /*******************************************************************************
175*a159c266SJung-uk Kim  *
176*a159c266SJung-uk Kim  * AcpiRsConvertExtAddress64 - All Extended (64-bit) address resources
177*a159c266SJung-uk Kim  *
178*a159c266SJung-uk Kim  ******************************************************************************/
179*a159c266SJung-uk Kim 
180*a159c266SJung-uk Kim ACPI_RSCONVERT_INFO     AcpiRsConvertExtAddress64[5] =
181*a159c266SJung-uk Kim {
182*a159c266SJung-uk Kim     {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64,
183*a159c266SJung-uk Kim                         ACPI_RS_SIZE (ACPI_RESOURCE_EXTENDED_ADDRESS64),
184*a159c266SJung-uk Kim                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertExtAddress64)},
185*a159c266SJung-uk Kim 
186*a159c266SJung-uk Kim     {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64,
187*a159c266SJung-uk Kim                         sizeof (AML_RESOURCE_EXTENDED_ADDRESS64),
188*a159c266SJung-uk Kim                         0},
189*a159c266SJung-uk Kim 
190*a159c266SJung-uk Kim     /* Resource Type, General Flags, and Type-Specific Flags */
191*a159c266SJung-uk Kim 
192*a159c266SJung-uk Kim     {ACPI_RSC_ADDRESS,  0, 0, 0},
193*a159c266SJung-uk Kim 
194*a159c266SJung-uk Kim     /* Revision ID */
195*a159c266SJung-uk Kim 
196*a159c266SJung-uk Kim     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.ExtAddress64.RevisionID),
197*a159c266SJung-uk Kim                         AML_OFFSET (ExtAddress64.RevisionID),
198*a159c266SJung-uk Kim                         1},
199*a159c266SJung-uk Kim     /*
200*a159c266SJung-uk Kim      * These fields are contiguous in both the source and destination:
201*a159c266SJung-uk Kim      * Address Granularity
202*a159c266SJung-uk Kim      * Address Range Minimum
203*a159c266SJung-uk Kim      * Address Range Maximum
204*a159c266SJung-uk Kim      * Address Translation Offset
205*a159c266SJung-uk Kim      * Address Length
206*a159c266SJung-uk Kim      * Type-Specific Attribute
207*a159c266SJung-uk Kim      */
208*a159c266SJung-uk Kim     {ACPI_RSC_MOVE64,   ACPI_RS_OFFSET (Data.ExtAddress64.Granularity),
209*a159c266SJung-uk Kim                         AML_OFFSET (ExtAddress64.Granularity),
210*a159c266SJung-uk Kim                         6}
211*a159c266SJung-uk Kim };
212*a159c266SJung-uk Kim 
213*a159c266SJung-uk Kim 
214*a159c266SJung-uk Kim /*******************************************************************************
215*a159c266SJung-uk Kim  *
216*a159c266SJung-uk Kim  * AcpiRsConvertGeneralFlags - Flags common to all address descriptors
217*a159c266SJung-uk Kim  *
218*a159c266SJung-uk Kim  ******************************************************************************/
219*a159c266SJung-uk Kim 
220*a159c266SJung-uk Kim static ACPI_RSCONVERT_INFO  AcpiRsConvertGeneralFlags[6] =
221*a159c266SJung-uk Kim {
222*a159c266SJung-uk Kim     {ACPI_RSC_FLAGINIT, 0, AML_OFFSET (Address.Flags),
223*a159c266SJung-uk Kim                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertGeneralFlags)},
224*a159c266SJung-uk Kim 
225*a159c266SJung-uk Kim     /* Resource Type (Memory, Io, BusNumber, etc.) */
226*a159c266SJung-uk Kim 
227*a159c266SJung-uk Kim     {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.Address.ResourceType),
228*a159c266SJung-uk Kim                         AML_OFFSET (Address.ResourceType),
229*a159c266SJung-uk Kim                         1},
230*a159c266SJung-uk Kim 
231*a159c266SJung-uk Kim     /* General Flags - Consume, Decode, MinFixed, MaxFixed */
232*a159c266SJung-uk Kim 
233*a159c266SJung-uk Kim     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.ProducerConsumer),
234*a159c266SJung-uk Kim                         AML_OFFSET (Address.Flags),
235*a159c266SJung-uk Kim                         0},
236*a159c266SJung-uk Kim 
237*a159c266SJung-uk Kim     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.Decode),
238*a159c266SJung-uk Kim                         AML_OFFSET (Address.Flags),
239*a159c266SJung-uk Kim                         1},
240*a159c266SJung-uk Kim 
241*a159c266SJung-uk Kim     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.MinAddressFixed),
242*a159c266SJung-uk Kim                         AML_OFFSET (Address.Flags),
243*a159c266SJung-uk Kim                         2},
244*a159c266SJung-uk Kim 
245*a159c266SJung-uk Kim     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.MaxAddressFixed),
246*a159c266SJung-uk Kim                         AML_OFFSET (Address.Flags),
247*a159c266SJung-uk Kim                         3}
248*a159c266SJung-uk Kim };
249*a159c266SJung-uk Kim 
250*a159c266SJung-uk Kim 
251*a159c266SJung-uk Kim /*******************************************************************************
252*a159c266SJung-uk Kim  *
253*a159c266SJung-uk Kim  * AcpiRsConvertMemFlags - Flags common to Memory address descriptors
254*a159c266SJung-uk Kim  *
255*a159c266SJung-uk Kim  ******************************************************************************/
256*a159c266SJung-uk Kim 
257*a159c266SJung-uk Kim static ACPI_RSCONVERT_INFO  AcpiRsConvertMemFlags[5] =
258*a159c266SJung-uk Kim {
259*a159c266SJung-uk Kim     {ACPI_RSC_FLAGINIT, 0, AML_OFFSET (Address.SpecificFlags),
260*a159c266SJung-uk Kim                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertMemFlags)},
261*a159c266SJung-uk Kim 
262*a159c266SJung-uk Kim     /* Memory-specific flags */
263*a159c266SJung-uk Kim 
264*a159c266SJung-uk Kim     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Mem.WriteProtect),
265*a159c266SJung-uk Kim                         AML_OFFSET (Address.SpecificFlags),
266*a159c266SJung-uk Kim                         0},
267*a159c266SJung-uk Kim 
268*a159c266SJung-uk Kim     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Mem.Caching),
269*a159c266SJung-uk Kim                         AML_OFFSET (Address.SpecificFlags),
270*a159c266SJung-uk Kim                         1},
271*a159c266SJung-uk Kim 
272*a159c266SJung-uk Kim     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Mem.RangeType),
273*a159c266SJung-uk Kim                         AML_OFFSET (Address.SpecificFlags),
274*a159c266SJung-uk Kim                         3},
275*a159c266SJung-uk Kim 
276*a159c266SJung-uk Kim     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Mem.Translation),
277*a159c266SJung-uk Kim                         AML_OFFSET (Address.SpecificFlags),
278*a159c266SJung-uk Kim                         5}
279*a159c266SJung-uk Kim };
280*a159c266SJung-uk Kim 
281*a159c266SJung-uk Kim 
282*a159c266SJung-uk Kim /*******************************************************************************
283*a159c266SJung-uk Kim  *
284*a159c266SJung-uk Kim  * AcpiRsConvertIoFlags - Flags common to I/O address descriptors
285*a159c266SJung-uk Kim  *
286*a159c266SJung-uk Kim  ******************************************************************************/
287*a159c266SJung-uk Kim 
288*a159c266SJung-uk Kim static ACPI_RSCONVERT_INFO  AcpiRsConvertIoFlags[4] =
289*a159c266SJung-uk Kim {
290*a159c266SJung-uk Kim     {ACPI_RSC_FLAGINIT, 0, AML_OFFSET (Address.SpecificFlags),
291*a159c266SJung-uk Kim                         ACPI_RSC_TABLE_SIZE (AcpiRsConvertIoFlags)},
292*a159c266SJung-uk Kim 
293*a159c266SJung-uk Kim     /* I/O-specific flags */
294*a159c266SJung-uk Kim 
295*a159c266SJung-uk Kim     {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Io.RangeType),
296*a159c266SJung-uk Kim                         AML_OFFSET (Address.SpecificFlags),
297*a159c266SJung-uk Kim                         0},
298*a159c266SJung-uk Kim 
299*a159c266SJung-uk Kim     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Io.Translation),
300*a159c266SJung-uk Kim                         AML_OFFSET (Address.SpecificFlags),
301*a159c266SJung-uk Kim                         4},
302*a159c266SJung-uk Kim 
303*a159c266SJung-uk Kim     {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Address.Info.Io.TranslationType),
304*a159c266SJung-uk Kim                         AML_OFFSET (Address.SpecificFlags),
305*a159c266SJung-uk Kim                         5}
306*a159c266SJung-uk Kim };
307*a159c266SJung-uk Kim 
308*a159c266SJung-uk Kim 
309*a159c266SJung-uk Kim /*******************************************************************************
310*a159c266SJung-uk Kim  *
311*a159c266SJung-uk Kim  * FUNCTION:    AcpiRsGetAddressCommon
312*a159c266SJung-uk Kim  *
313*a159c266SJung-uk Kim  * PARAMETERS:  Resource            - Pointer to the internal resource struct
314*a159c266SJung-uk Kim  *              Aml                 - Pointer to the AML resource descriptor
315*a159c266SJung-uk Kim  *
316*a159c266SJung-uk Kim  * RETURN:      TRUE if the ResourceType field is OK, FALSE otherwise
317*a159c266SJung-uk Kim  *
318*a159c266SJung-uk Kim  * DESCRIPTION: Convert common flag fields from a raw AML resource descriptor
319*a159c266SJung-uk Kim  *              to an internal resource descriptor
320*a159c266SJung-uk Kim  *
321*a159c266SJung-uk Kim  ******************************************************************************/
322*a159c266SJung-uk Kim 
323*a159c266SJung-uk Kim BOOLEAN
324*a159c266SJung-uk Kim AcpiRsGetAddressCommon (
325*a159c266SJung-uk Kim     ACPI_RESOURCE           *Resource,
326*a159c266SJung-uk Kim     AML_RESOURCE            *Aml)
327*a159c266SJung-uk Kim {
328*a159c266SJung-uk Kim     ACPI_FUNCTION_ENTRY ();
329*a159c266SJung-uk Kim 
330*a159c266SJung-uk Kim 
331*a159c266SJung-uk Kim     /* Validate the Resource Type */
332*a159c266SJung-uk Kim 
333*a159c266SJung-uk Kim     if ((Aml->Address.ResourceType > 2) && (Aml->Address.ResourceType < 0xC0))
334*a159c266SJung-uk Kim     {
335*a159c266SJung-uk Kim         return (FALSE);
336*a159c266SJung-uk Kim     }
337*a159c266SJung-uk Kim 
338*a159c266SJung-uk Kim     /* Get the Resource Type and General Flags */
339*a159c266SJung-uk Kim 
340*a159c266SJung-uk Kim     (void) AcpiRsConvertAmlToResource (Resource, Aml, AcpiRsConvertGeneralFlags);
341*a159c266SJung-uk Kim 
342*a159c266SJung-uk Kim     /* Get the Type-Specific Flags (Memory and I/O descriptors only) */
343*a159c266SJung-uk Kim 
344*a159c266SJung-uk Kim     if (Resource->Data.Address.ResourceType == ACPI_MEMORY_RANGE)
345*a159c266SJung-uk Kim     {
346*a159c266SJung-uk Kim         (void) AcpiRsConvertAmlToResource (Resource, Aml, AcpiRsConvertMemFlags);
347*a159c266SJung-uk Kim     }
348*a159c266SJung-uk Kim     else if (Resource->Data.Address.ResourceType == ACPI_IO_RANGE)
349*a159c266SJung-uk Kim     {
350*a159c266SJung-uk Kim         (void) AcpiRsConvertAmlToResource (Resource, Aml, AcpiRsConvertIoFlags);
351*a159c266SJung-uk Kim     }
352*a159c266SJung-uk Kim     else
353*a159c266SJung-uk Kim     {
354*a159c266SJung-uk Kim         /* Generic resource type, just grab the TypeSpecific byte */
355*a159c266SJung-uk Kim 
356*a159c266SJung-uk Kim         Resource->Data.Address.Info.TypeSpecific = Aml->Address.SpecificFlags;
357*a159c266SJung-uk Kim     }
358*a159c266SJung-uk Kim 
359*a159c266SJung-uk Kim     return (TRUE);
360*a159c266SJung-uk Kim }
361*a159c266SJung-uk Kim 
362*a159c266SJung-uk Kim 
363*a159c266SJung-uk Kim /*******************************************************************************
364*a159c266SJung-uk Kim  *
365*a159c266SJung-uk Kim  * FUNCTION:    AcpiRsSetAddressCommon
366*a159c266SJung-uk Kim  *
367*a159c266SJung-uk Kim  * PARAMETERS:  Aml                 - Pointer to the AML resource descriptor
368*a159c266SJung-uk Kim  *              Resource            - Pointer to the internal resource struct
369*a159c266SJung-uk Kim  *
370*a159c266SJung-uk Kim  * RETURN:      None
371*a159c266SJung-uk Kim  *
372*a159c266SJung-uk Kim  * DESCRIPTION: Convert common flag fields from a resource descriptor to an
373*a159c266SJung-uk Kim  *              AML descriptor
374*a159c266SJung-uk Kim  *
375*a159c266SJung-uk Kim  ******************************************************************************/
376*a159c266SJung-uk Kim 
377*a159c266SJung-uk Kim void
378*a159c266SJung-uk Kim AcpiRsSetAddressCommon (
379*a159c266SJung-uk Kim     AML_RESOURCE            *Aml,
380*a159c266SJung-uk Kim     ACPI_RESOURCE           *Resource)
381*a159c266SJung-uk Kim {
382*a159c266SJung-uk Kim     ACPI_FUNCTION_ENTRY ();
383*a159c266SJung-uk Kim 
384*a159c266SJung-uk Kim 
385*a159c266SJung-uk Kim     /* Set the Resource Type and General Flags */
386*a159c266SJung-uk Kim 
387*a159c266SJung-uk Kim     (void) AcpiRsConvertResourceToAml (Resource, Aml, AcpiRsConvertGeneralFlags);
388*a159c266SJung-uk Kim 
389*a159c266SJung-uk Kim     /* Set the Type-Specific Flags (Memory and I/O descriptors only) */
390*a159c266SJung-uk Kim 
391*a159c266SJung-uk Kim     if (Resource->Data.Address.ResourceType == ACPI_MEMORY_RANGE)
392*a159c266SJung-uk Kim     {
393*a159c266SJung-uk Kim         (void) AcpiRsConvertResourceToAml (Resource, Aml, AcpiRsConvertMemFlags);
394*a159c266SJung-uk Kim     }
395*a159c266SJung-uk Kim     else if (Resource->Data.Address.ResourceType == ACPI_IO_RANGE)
396*a159c266SJung-uk Kim     {
397*a159c266SJung-uk Kim         (void) AcpiRsConvertResourceToAml (Resource, Aml, AcpiRsConvertIoFlags);
398*a159c266SJung-uk Kim     }
399*a159c266SJung-uk Kim     else
400*a159c266SJung-uk Kim     {
401*a159c266SJung-uk Kim         /* Generic resource type, just copy the TypeSpecific byte */
402*a159c266SJung-uk Kim 
403*a159c266SJung-uk Kim         Aml->Address.SpecificFlags = Resource->Data.Address.Info.TypeSpecific;
404*a159c266SJung-uk Kim     }
405*a159c266SJung-uk Kim }
406*a159c266SJung-uk Kim 
407*a159c266SJung-uk Kim 
408