rsmemory.c revision 281075
1130812Smarcel/*******************************************************************************
2130812Smarcel *
3130812Smarcel * Module Name: rsmem24 - Memory resource descriptors
4130812Smarcel *
5130812Smarcel ******************************************************************************/
6130812Smarcel
7130812Smarcel/*
8130812Smarcel * Copyright (C) 2000 - 2015, Intel Corp.
9130812Smarcel * All rights reserved.
10130812Smarcel *
11130812Smarcel * Redistribution and use in source and binary forms, with or without
12130812Smarcel * modification, are permitted provided that the following conditions
13130812Smarcel * are met:
14130812Smarcel * 1. Redistributions of source code must retain the above copyright
15130812Smarcel *    notice, this list of conditions, and the following disclaimer,
16130812Smarcel *    without modification.
17130812Smarcel * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18130812Smarcel *    substantially similar to the "NO WARRANTY" disclaimer below
19130812Smarcel *    ("Disclaimer") and any redistribution must be conditioned upon
20130812Smarcel *    including a substantially similar Disclaimer requirement for further
21130812Smarcel *    binary redistribution.
22130812Smarcel * 3. Neither the names of the above-listed copyright holders nor the names
23130812Smarcel *    of any contributors may be used to endorse or promote products derived
24130812Smarcel *    from this software without specific prior written permission.
25130812Smarcel *
26130812Smarcel * Alternatively, this software may be distributed under the terms of the
27130812Smarcel * GNU General Public License ("GPL") version 2 as published by the Free
28130812Smarcel * Software Foundation.
29130812Smarcel *
30130812Smarcel * NO WARRANTY
31130812Smarcel * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32130812Smarcel * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33130812Smarcel * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34130812Smarcel * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35130812Smarcel * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36130812Smarcel * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37130812Smarcel * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38130812Smarcel * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39130812Smarcel * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40130812Smarcel * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41130812Smarcel * POSSIBILITY OF SUCH DAMAGES.
42130812Smarcel */
43130812Smarcel
44130812Smarcel#include <contrib/dev/acpica/include/acpi.h>
45130812Smarcel#include <contrib/dev/acpica/include/accommon.h>
46130812Smarcel#include <contrib/dev/acpica/include/acresrc.h>
47130812Smarcel
48130812Smarcel#define _COMPONENT          ACPI_RESOURCES
49130812Smarcel        ACPI_MODULE_NAME    ("rsmemory")
50130812Smarcel
51130812Smarcel
52130812Smarcel/*******************************************************************************
53130812Smarcel *
54130812Smarcel * AcpiRsConvertMemory24
55130812Smarcel *
56130812Smarcel ******************************************************************************/
57130812Smarcel
58130812SmarcelACPI_RSCONVERT_INFO     AcpiRsConvertMemory24[4] =
59130812Smarcel{
60130812Smarcel    {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_MEMORY24,
61130812Smarcel                        ACPI_RS_SIZE (ACPI_RESOURCE_MEMORY24),
62130812Smarcel                        ACPI_RSC_TABLE_SIZE (AcpiRsConvertMemory24)},
63130812Smarcel
64130812Smarcel    {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_MEMORY24,
65130812Smarcel                        sizeof (AML_RESOURCE_MEMORY24),
66130812Smarcel                        0},
67130812Smarcel
68130812Smarcel    /* Read/Write bit */
69130812Smarcel
70130812Smarcel    {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Memory24.WriteProtect),
71130812Smarcel                        AML_OFFSET (Memory24.Flags),
72130812Smarcel                        0},
73130812Smarcel    /*
74130812Smarcel     * These fields are contiguous in both the source and destination:
75130812Smarcel     * Minimum Base Address
76130812Smarcel     * Maximum Base Address
77130812Smarcel     * Address Base Alignment
78130812Smarcel     * Range Length
79130812Smarcel     */
80130812Smarcel    {ACPI_RSC_MOVE16,   ACPI_RS_OFFSET (Data.Memory24.Minimum),
81130812Smarcel                        AML_OFFSET (Memory24.Minimum),
82130812Smarcel                        4}
83130812Smarcel};
84130812Smarcel
85130812Smarcel
86130812Smarcel/*******************************************************************************
87130812Smarcel *
88130812Smarcel * AcpiRsConvertMemory32
89130812Smarcel *
90130812Smarcel ******************************************************************************/
91130812Smarcel
92130812SmarcelACPI_RSCONVERT_INFO     AcpiRsConvertMemory32[4] =
93130812Smarcel{
94130812Smarcel    {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_MEMORY32,
95130812Smarcel                        ACPI_RS_SIZE (ACPI_RESOURCE_MEMORY32),
96130812Smarcel                        ACPI_RSC_TABLE_SIZE (AcpiRsConvertMemory32)},
97130812Smarcel
98130812Smarcel    {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_MEMORY32,
99130812Smarcel                        sizeof (AML_RESOURCE_MEMORY32),
100130812Smarcel                        0},
101130812Smarcel
102130812Smarcel    /* Read/Write bit */
103130812Smarcel
104130812Smarcel    {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.Memory32.WriteProtect),
105130812Smarcel                        AML_OFFSET (Memory32.Flags),
106130812Smarcel                        0},
107130812Smarcel    /*
108130812Smarcel     * These fields are contiguous in both the source and destination:
109130812Smarcel     * Minimum Base Address
110130812Smarcel     * Maximum Base Address
111130812Smarcel     * Address Base Alignment
112130812Smarcel     * Range Length
113130812Smarcel     */
114130812Smarcel    {ACPI_RSC_MOVE32,   ACPI_RS_OFFSET (Data.Memory32.Minimum),
115130812Smarcel                        AML_OFFSET (Memory32.Minimum),
116130812Smarcel                        4}
117130812Smarcel};
118130812Smarcel
119130812Smarcel
120130812Smarcel/*******************************************************************************
121130812Smarcel *
122130812Smarcel * AcpiRsConvertFixedMemory32
123130812Smarcel *
124130812Smarcel ******************************************************************************/
125130812Smarcel
126130812SmarcelACPI_RSCONVERT_INFO     AcpiRsConvertFixedMemory32[4] =
127130812Smarcel{
128130812Smarcel    {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_FIXED_MEMORY32,
129130812Smarcel                        ACPI_RS_SIZE (ACPI_RESOURCE_FIXED_MEMORY32),
130130812Smarcel                        ACPI_RSC_TABLE_SIZE (AcpiRsConvertFixedMemory32)},
131130812Smarcel
132130812Smarcel    {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_FIXED_MEMORY32,
133130812Smarcel                        sizeof (AML_RESOURCE_FIXED_MEMORY32),
134130812Smarcel                        0},
135130812Smarcel
136130812Smarcel    /* Read/Write bit */
137130812Smarcel
138130812Smarcel    {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET (Data.FixedMemory32.WriteProtect),
139130812Smarcel                        AML_OFFSET (FixedMemory32.Flags),
140130812Smarcel                        0},
141130812Smarcel    /*
142130812Smarcel     * These fields are contiguous in both the source and destination:
143130812Smarcel     * Base Address
144130812Smarcel     * Range Length
145130812Smarcel     */
146130812Smarcel    {ACPI_RSC_MOVE32,   ACPI_RS_OFFSET (Data.FixedMemory32.Address),
147130812Smarcel                        AML_OFFSET (FixedMemory32.Address),
148130812Smarcel                        2}
149130812Smarcel};
150130812Smarcel
151130812Smarcel
152130812Smarcel/*******************************************************************************
153130812Smarcel *
154130812Smarcel * AcpiRsGetVendorSmall
155130812Smarcel *
156130812Smarcel ******************************************************************************/
157130812Smarcel
158130812SmarcelACPI_RSCONVERT_INFO     AcpiRsGetVendorSmall[3] =
159130812Smarcel{
160130812Smarcel    {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_VENDOR,
161130812Smarcel                        ACPI_RS_SIZE (ACPI_RESOURCE_VENDOR),
162130812Smarcel                        ACPI_RSC_TABLE_SIZE (AcpiRsGetVendorSmall)},
163130812Smarcel
164130812Smarcel    /* Length of the vendor data (byte count) */
165130812Smarcel
166130812Smarcel    {ACPI_RSC_COUNT16,  ACPI_RS_OFFSET (Data.Vendor.ByteLength),
167130812Smarcel                        0,
168130812Smarcel                        sizeof (UINT8)},
169130812Smarcel
170130812Smarcel    /* Vendor data */
171130812Smarcel
172130812Smarcel    {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.Vendor.ByteData[0]),
173130812Smarcel                        sizeof (AML_RESOURCE_SMALL_HEADER),
174130812Smarcel                        0}
175130812Smarcel};
176130812Smarcel
177130812Smarcel
178130812Smarcel/*******************************************************************************
179130812Smarcel *
180130812Smarcel * AcpiRsGetVendorLarge
181130812Smarcel *
182130812Smarcel ******************************************************************************/
183130812Smarcel
184130812SmarcelACPI_RSCONVERT_INFO     AcpiRsGetVendorLarge[3] =
185130812Smarcel{
186130812Smarcel    {ACPI_RSC_INITGET,  ACPI_RESOURCE_TYPE_VENDOR,
187130812Smarcel                        ACPI_RS_SIZE (ACPI_RESOURCE_VENDOR),
188130812Smarcel                        ACPI_RSC_TABLE_SIZE (AcpiRsGetVendorLarge)},
189130812Smarcel
190130812Smarcel    /* Length of the vendor data (byte count) */
191130812Smarcel
192130812Smarcel    {ACPI_RSC_COUNT16,  ACPI_RS_OFFSET (Data.Vendor.ByteLength),
193130812Smarcel                        0,
194130812Smarcel                        sizeof (UINT8)},
195130812Smarcel
196130812Smarcel    /* Vendor data */
197130812Smarcel
198130812Smarcel    {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.Vendor.ByteData[0]),
199130812Smarcel                        sizeof (AML_RESOURCE_LARGE_HEADER),
200130812Smarcel                        0}
201130812Smarcel};
202130812Smarcel
203130812Smarcel
204130812Smarcel/*******************************************************************************
205130812Smarcel *
206130812Smarcel * AcpiRsSetVendor
207130812Smarcel *
208130812Smarcel ******************************************************************************/
209130812Smarcel
210130812SmarcelACPI_RSCONVERT_INFO     AcpiRsSetVendor[7] =
211130812Smarcel{
212130812Smarcel    /* Default is a small vendor descriptor */
213130812Smarcel
214130812Smarcel    {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_VENDOR_SMALL,
215130812Smarcel                        sizeof (AML_RESOURCE_SMALL_HEADER),
216130812Smarcel                        ACPI_RSC_TABLE_SIZE (AcpiRsSetVendor)},
217130812Smarcel
218130812Smarcel    /* Get the length and copy the data */
219130812Smarcel
220130812Smarcel    {ACPI_RSC_COUNT16,  ACPI_RS_OFFSET (Data.Vendor.ByteLength),
221130812Smarcel                        0,
222130812Smarcel                        0},
223130812Smarcel
224130812Smarcel    {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.Vendor.ByteData[0]),
225130812Smarcel                        sizeof (AML_RESOURCE_SMALL_HEADER),
226130812Smarcel                        0},
227130812Smarcel
228130812Smarcel    /*
229130812Smarcel     * All done if the Vendor byte length is 7 or less, meaning that it will
230130812Smarcel     * fit within a small descriptor
231130812Smarcel     */
232130812Smarcel    {ACPI_RSC_EXIT_LE,  0, 0, 7},
233130812Smarcel
234130812Smarcel    /* Must create a large vendor descriptor */
235130812Smarcel
236130812Smarcel    {ACPI_RSC_INITSET,  ACPI_RESOURCE_NAME_VENDOR_LARGE,
237130812Smarcel                        sizeof (AML_RESOURCE_LARGE_HEADER),
238130812Smarcel                        0},
239130812Smarcel
240130812Smarcel    {ACPI_RSC_COUNT16,  ACPI_RS_OFFSET (Data.Vendor.ByteLength),
241130812Smarcel                        0,
242130812Smarcel                        0},
243130812Smarcel
244130812Smarcel    {ACPI_RSC_MOVE8,    ACPI_RS_OFFSET (Data.Vendor.ByteData[0]),
245130812Smarcel                        sizeof (AML_RESOURCE_LARGE_HEADER),
246130812Smarcel                        0}
247130812Smarcel};
248130812Smarcel