Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
acpi
acpica
rsio.c
Go to the documentation of this file.
1
/*******************************************************************************
2
*
3
* Module Name: rsio - IO and DMA resource descriptors
4
*
5
******************************************************************************/
6
7
/*
8
* Copyright (C) 2000 - 2012, Intel Corp.
9
* All rights reserved.
10
*
11
* Redistribution and use in source and binary forms, with or without
12
* modification, are permitted provided that the following conditions
13
* are met:
14
* 1. Redistributions of source code must retain the above copyright
15
* notice, this list of conditions, and the following disclaimer,
16
* without modification.
17
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
18
* substantially similar to the "NO WARRANTY" disclaimer below
19
* ("Disclaimer") and any redistribution must be conditioned upon
20
* including a substantially similar Disclaimer requirement for further
21
* binary redistribution.
22
* 3. Neither the names of the above-listed copyright holders nor the names
23
* of any contributors may be used to endorse or promote products derived
24
* from this software without specific prior written permission.
25
*
26
* Alternatively, this software may be distributed under the terms of the
27
* GNU General Public License ("GPL") version 2 as published by the Free
28
* Software Foundation.
29
*
30
* NO WARRANTY
31
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41
* POSSIBILITY OF SUCH DAMAGES.
42
*/
43
44
#include <
acpi/acpi.h
>
45
#include "
accommon.h
"
46
#include "
acresrc.h
"
47
48
#define _COMPONENT ACPI_RESOURCES
49
ACPI_MODULE_NAME
(
"rsio"
)
50
51
/*******************************************************************************
52
*
53
* acpi_rs_convert_io
54
*
55
******************************************************************************/
56
struct
acpi_rsconvert_info
acpi_rs_convert_io
[5] = {
57
{
ACPI_RSC_INITGET
,
ACPI_RESOURCE_TYPE_IO
,
58
ACPI_RS_SIZE
(
struct
acpi_resource_io
),
59
ACPI_RSC_TABLE_SIZE
(acpi_rs_convert_io)},
60
61
{
ACPI_RSC_INITSET
,
ACPI_RESOURCE_NAME_IO
,
62
sizeof
(
struct
aml_resource_io
),
63
0},
64
65
/* Decode flag */
66
67
{
ACPI_RSC_1BITFLAG
,
ACPI_RS_OFFSET
(
data
.io.io_decode),
68
AML_OFFSET
(
io
.flags),
69
0},
70
/*
71
* These fields are contiguous in both the source and destination:
72
* Address Alignment
73
* Length
74
* Minimum Base Address
75
* Maximum Base Address
76
*/
77
{
ACPI_RSC_MOVE8
,
ACPI_RS_OFFSET
(
data
.io.alignment),
78
AML_OFFSET
(
io
.alignment),
79
2},
80
81
{
ACPI_RSC_MOVE16
,
ACPI_RS_OFFSET
(
data
.io.minimum),
82
AML_OFFSET
(
io
.minimum),
83
2}
84
};
85
86
/*******************************************************************************
87
*
88
* acpi_rs_convert_fixed_io
89
*
90
******************************************************************************/
91
92
struct
acpi_rsconvert_info
acpi_rs_convert_fixed_io
[4] = {
93
{
ACPI_RSC_INITGET
,
ACPI_RESOURCE_TYPE_FIXED_IO
,
94
ACPI_RS_SIZE
(
struct
acpi_resource_fixed_io
),
95
ACPI_RSC_TABLE_SIZE
(acpi_rs_convert_fixed_io)},
96
97
{
ACPI_RSC_INITSET
,
ACPI_RESOURCE_NAME_FIXED_IO
,
98
sizeof
(
struct
aml_resource_fixed_io
),
99
0},
100
/*
101
* These fields are contiguous in both the source and destination:
102
* Base Address
103
* Length
104
*/
105
{
ACPI_RSC_MOVE8
,
ACPI_RS_OFFSET
(
data
.fixed_io.address_length),
106
AML_OFFSET
(fixed_io.address_length),
107
1},
108
109
{
ACPI_RSC_MOVE16
,
ACPI_RS_OFFSET
(
data
.fixed_io.address),
110
AML_OFFSET
(fixed_io.address),
111
1}
112
};
113
114
/*******************************************************************************
115
*
116
* acpi_rs_convert_generic_reg
117
*
118
******************************************************************************/
119
120
struct
acpi_rsconvert_info
acpi_rs_convert_generic_reg
[4] = {
121
{
ACPI_RSC_INITGET
,
ACPI_RESOURCE_TYPE_GENERIC_REGISTER
,
122
ACPI_RS_SIZE
(
struct
acpi_resource_generic_register
),
123
ACPI_RSC_TABLE_SIZE
(acpi_rs_convert_generic_reg)},
124
125
{
ACPI_RSC_INITSET
,
ACPI_RESOURCE_NAME_GENERIC_REGISTER
,
126
sizeof
(
struct
aml_resource_generic_register
),
127
0},
128
/*
129
* These fields are contiguous in both the source and destination:
130
* Address Space ID
131
* Register Bit Width
132
* Register Bit Offset
133
* Access Size
134
*/
135
{
ACPI_RSC_MOVE8
,
ACPI_RS_OFFSET
(
data
.generic_reg.space_id),
136
AML_OFFSET
(generic_reg.address_space_id),
137
4},
138
139
/* Get the Register Address */
140
141
{
ACPI_RSC_MOVE64
,
ACPI_RS_OFFSET
(
data
.generic_reg.address),
142
AML_OFFSET
(generic_reg.address),
143
1}
144
};
145
146
/*******************************************************************************
147
*
148
* acpi_rs_convert_end_dpf
149
*
150
******************************************************************************/
151
152
struct
acpi_rsconvert_info
acpi_rs_convert_end_dpf
[2] = {
153
{
ACPI_RSC_INITGET
,
ACPI_RESOURCE_TYPE_END_DEPENDENT
,
154
ACPI_RS_SIZE_MIN
,
155
ACPI_RSC_TABLE_SIZE
(acpi_rs_convert_end_dpf)},
156
157
{
ACPI_RSC_INITSET
,
ACPI_RESOURCE_NAME_END_DEPENDENT
,
158
sizeof
(
struct
aml_resource_end_dependent
),
159
0}
160
};
161
162
/*******************************************************************************
163
*
164
* acpi_rs_convert_end_tag
165
*
166
******************************************************************************/
167
168
struct
acpi_rsconvert_info
acpi_rs_convert_end_tag
[2] = {
169
{
ACPI_RSC_INITGET
,
ACPI_RESOURCE_TYPE_END_TAG
,
170
ACPI_RS_SIZE_MIN
,
171
ACPI_RSC_TABLE_SIZE
(acpi_rs_convert_end_tag)},
172
173
/*
174
* Note: The checksum field is set to zero, meaning that the resource
175
* data is treated as if the checksum operation succeeded.
176
* (ACPI Spec 1.0b Section 6.4.2.8)
177
*/
178
{
ACPI_RSC_INITSET
,
ACPI_RESOURCE_NAME_END_TAG
,
179
sizeof
(
struct
aml_resource_end_tag
),
180
0}
181
};
182
183
/*******************************************************************************
184
*
185
* acpi_rs_get_start_dpf
186
*
187
******************************************************************************/
188
189
struct
acpi_rsconvert_info
acpi_rs_get_start_dpf
[6] = {
190
{
ACPI_RSC_INITGET
,
ACPI_RESOURCE_TYPE_START_DEPENDENT
,
191
ACPI_RS_SIZE
(
struct
acpi_resource_start_dependent
),
192
ACPI_RSC_TABLE_SIZE
(acpi_rs_get_start_dpf)},
193
194
/* Defaults for Compatibility and Performance priorities */
195
196
{
ACPI_RSC_SET8
,
ACPI_RS_OFFSET
(
data
.start_dpf.compatibility_priority),
197
ACPI_ACCEPTABLE_CONFIGURATION
,
198
2},
199
200
/* Get the descriptor length (0 or 1 for Start Dpf descriptor) */
201
202
{
ACPI_RSC_1BITFLAG
,
ACPI_RS_OFFSET
(
data
.start_dpf.descriptor_length),
203
AML_OFFSET
(start_dpf.descriptor_type),
204
0},
205
206
/* All done if there is no flag byte present in the descriptor */
207
208
{
ACPI_RSC_EXIT_NE
,
ACPI_RSC_COMPARE_AML_LENGTH
, 0, 1},
209
210
/* Flag byte is present, get the flags */
211
212
{
ACPI_RSC_2BITFLAG
,
213
ACPI_RS_OFFSET
(
data
.start_dpf.compatibility_priority),
214
AML_OFFSET
(start_dpf.flags),
215
0},
216
217
{
ACPI_RSC_2BITFLAG
,
218
ACPI_RS_OFFSET
(
data
.start_dpf.performance_robustness),
219
AML_OFFSET
(start_dpf.flags),
220
2}
221
};
222
223
/*******************************************************************************
224
*
225
* acpi_rs_set_start_dpf
226
*
227
******************************************************************************/
228
229
struct
acpi_rsconvert_info
acpi_rs_set_start_dpf
[10] = {
230
/* Start with a default descriptor of length 1 */
231
232
{
ACPI_RSC_INITSET
,
ACPI_RESOURCE_NAME_START_DEPENDENT
,
233
sizeof
(
struct
aml_resource_start_dependent
),
234
ACPI_RSC_TABLE_SIZE(acpi_rs_set_start_dpf)},
235
236
/* Set the default flag values */
237
238
{
ACPI_RSC_2BITFLAG
,
239
ACPI_RS_OFFSET
(
data
.start_dpf.compatibility_priority),
240
AML_OFFSET
(start_dpf.flags),
241
0},
242
243
{
ACPI_RSC_2BITFLAG
,
244
ACPI_RS_OFFSET
(
data
.start_dpf.performance_robustness),
245
AML_OFFSET
(start_dpf.flags),
246
2},
247
/*
248
* All done if the output descriptor length is required to be 1
249
* (i.e., optimization to 0 bytes cannot be attempted)
250
*/
251
{
ACPI_RSC_EXIT_EQ
,
ACPI_RSC_COMPARE_VALUE
,
252
ACPI_RS_OFFSET
(
data
.start_dpf.descriptor_length),
253
1},
254
255
/* Set length to 0 bytes (no flags byte) */
256
257
{
ACPI_RSC_LENGTH
, 0, 0,
258
sizeof
(
struct
aml_resource_start_dependent_noprio
)},
259
260
/*
261
* All done if the output descriptor length is required to be 0.
262
*
263
* TBD: Perhaps we should check for error if input flags are not
264
* compatible with a 0-byte descriptor.
265
*/
266
{
ACPI_RSC_EXIT_EQ
,
ACPI_RSC_COMPARE_VALUE
,
267
ACPI_RS_OFFSET
(
data
.start_dpf.descriptor_length),
268
0},
269
270
/* Reset length to 1 byte (descriptor with flags byte) */
271
272
{
ACPI_RSC_LENGTH
, 0, 0,
sizeof
(
struct
aml_resource_start_dependent
)},
273
274
/*
275
* All done if flags byte is necessary -- if either priority value
276
* is not ACPI_ACCEPTABLE_CONFIGURATION
277
*/
278
{
ACPI_RSC_EXIT_NE
,
ACPI_RSC_COMPARE_VALUE
,
279
ACPI_RS_OFFSET
(
data
.start_dpf.compatibility_priority),
280
ACPI_ACCEPTABLE_CONFIGURATION
},
281
282
{
ACPI_RSC_EXIT_NE
,
ACPI_RSC_COMPARE_VALUE
,
283
ACPI_RS_OFFSET
(
data
.start_dpf.performance_robustness),
284
ACPI_ACCEPTABLE_CONFIGURATION
},
285
286
/* Flag byte is not necessary */
287
288
{
ACPI_RSC_LENGTH
, 0, 0,
289
sizeof
(
struct
aml_resource_start_dependent_noprio
)}
290
};
Generated on Thu Jan 10 2013 13:23:34 for Linux Kernel by
1.8.2