Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/acpi/acpica/acresrc.h
15111 views
1
/******************************************************************************
2
*
3
* Name: acresrc.h - Resource Manager function prototypes
4
*
5
*****************************************************************************/
6
7
/*
8
* Copyright (C) 2000 - 2011, 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
#ifndef __ACRESRC_H__
45
#define __ACRESRC_H__
46
47
/* Need the AML resource descriptor structs */
48
49
#include "amlresrc.h"
50
51
/*
52
* If possible, pack the following structures to byte alignment, since we
53
* don't care about performance for debug output. Two cases where we cannot
54
* pack the structures:
55
*
56
* 1) Hardware does not support misaligned memory transfers
57
* 2) Compiler does not support pointers within packed structures
58
*/
59
#if (!defined(ACPI_MISALIGNMENT_NOT_SUPPORTED) && !defined(ACPI_PACKED_POINTERS_NOT_SUPPORTED))
60
#pragma pack(1)
61
#endif
62
63
/*
64
* Individual entry for the resource conversion tables
65
*/
66
typedef const struct acpi_rsconvert_info {
67
u8 opcode;
68
u8 resource_offset;
69
u8 aml_offset;
70
u8 value;
71
72
} acpi_rsconvert_info;
73
74
/* Resource conversion opcodes */
75
76
#define ACPI_RSC_INITGET 0
77
#define ACPI_RSC_INITSET 1
78
#define ACPI_RSC_FLAGINIT 2
79
#define ACPI_RSC_1BITFLAG 3
80
#define ACPI_RSC_2BITFLAG 4
81
#define ACPI_RSC_COUNT 5
82
#define ACPI_RSC_COUNT16 6
83
#define ACPI_RSC_LENGTH 7
84
#define ACPI_RSC_MOVE8 8
85
#define ACPI_RSC_MOVE16 9
86
#define ACPI_RSC_MOVE32 10
87
#define ACPI_RSC_MOVE64 11
88
#define ACPI_RSC_SET8 12
89
#define ACPI_RSC_DATA8 13
90
#define ACPI_RSC_ADDRESS 14
91
#define ACPI_RSC_SOURCE 15
92
#define ACPI_RSC_SOURCEX 16
93
#define ACPI_RSC_BITMASK 17
94
#define ACPI_RSC_BITMASK16 18
95
#define ACPI_RSC_EXIT_NE 19
96
#define ACPI_RSC_EXIT_LE 20
97
#define ACPI_RSC_EXIT_EQ 21
98
99
/* Resource Conversion sub-opcodes */
100
101
#define ACPI_RSC_COMPARE_AML_LENGTH 0
102
#define ACPI_RSC_COMPARE_VALUE 1
103
104
#define ACPI_RSC_TABLE_SIZE(d) (sizeof (d) / sizeof (struct acpi_rsconvert_info))
105
106
#define ACPI_RS_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_resource,f)
107
#define AML_OFFSET(f) (u8) ACPI_OFFSET (union aml_resource,f)
108
109
typedef const struct acpi_rsdump_info {
110
u8 opcode;
111
u8 offset;
112
char *name;
113
const char **pointer;
114
115
} acpi_rsdump_info;
116
117
/* Values for the Opcode field above */
118
119
#define ACPI_RSD_TITLE 0
120
#define ACPI_RSD_LITERAL 1
121
#define ACPI_RSD_STRING 2
122
#define ACPI_RSD_UINT8 3
123
#define ACPI_RSD_UINT16 4
124
#define ACPI_RSD_UINT32 5
125
#define ACPI_RSD_UINT64 6
126
#define ACPI_RSD_1BITFLAG 7
127
#define ACPI_RSD_2BITFLAG 8
128
#define ACPI_RSD_SHORTLIST 9
129
#define ACPI_RSD_LONGLIST 10
130
#define ACPI_RSD_DWORDLIST 11
131
#define ACPI_RSD_ADDRESS 12
132
#define ACPI_RSD_SOURCE 13
133
134
/* restore default alignment */
135
136
#pragma pack()
137
138
/* Resource tables indexed by internal resource type */
139
140
extern const u8 acpi_gbl_aml_resource_sizes[];
141
extern struct acpi_rsconvert_info *acpi_gbl_set_resource_dispatch[];
142
143
/* Resource tables indexed by raw AML resource descriptor type */
144
145
extern const u8 acpi_gbl_resource_struct_sizes[];
146
extern struct acpi_rsconvert_info *acpi_gbl_get_resource_dispatch[];
147
148
struct acpi_vendor_walk_info {
149
struct acpi_vendor_uuid *uuid;
150
struct acpi_buffer *buffer;
151
acpi_status status;
152
};
153
154
/*
155
* rscreate
156
*/
157
acpi_status
158
acpi_rs_create_resource_list(union acpi_operand_object *aml_buffer,
159
struct acpi_buffer *output_buffer);
160
161
acpi_status
162
acpi_rs_create_aml_resources(struct acpi_resource *linked_list_buffer,
163
struct acpi_buffer *output_buffer);
164
165
acpi_status
166
acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
167
struct acpi_buffer *output_buffer);
168
169
/*
170
* rsutils
171
*/
172
173
acpi_status
174
acpi_rs_get_prt_method_data(struct acpi_namespace_node *node,
175
struct acpi_buffer *ret_buffer);
176
177
acpi_status
178
acpi_rs_get_crs_method_data(struct acpi_namespace_node *node,
179
struct acpi_buffer *ret_buffer);
180
181
acpi_status
182
acpi_rs_get_prs_method_data(struct acpi_namespace_node *node,
183
struct acpi_buffer *ret_buffer);
184
185
acpi_status
186
acpi_rs_get_method_data(acpi_handle handle,
187
char *path, struct acpi_buffer *ret_buffer);
188
189
acpi_status
190
acpi_rs_set_srs_method_data(struct acpi_namespace_node *node,
191
struct acpi_buffer *ret_buffer);
192
193
/*
194
* rscalc
195
*/
196
acpi_status
197
acpi_rs_get_list_length(u8 * aml_buffer,
198
u32 aml_buffer_length, acpi_size * size_needed);
199
200
acpi_status
201
acpi_rs_get_aml_length(struct acpi_resource *linked_list_buffer,
202
acpi_size * size_needed);
203
204
acpi_status
205
acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
206
acpi_size * buffer_size_needed);
207
208
acpi_status
209
acpi_rs_convert_aml_to_resources(u8 * aml,
210
u32 length,
211
u32 offset, u8 resource_index, void **context);
212
213
acpi_status
214
acpi_rs_convert_resources_to_aml(struct acpi_resource *resource,
215
acpi_size aml_size_needed, u8 * output_buffer);
216
217
/*
218
* rsaddr
219
*/
220
void
221
acpi_rs_set_address_common(union aml_resource *aml,
222
struct acpi_resource *resource);
223
224
u8
225
acpi_rs_get_address_common(struct acpi_resource *resource,
226
union aml_resource *aml);
227
228
/*
229
* rsmisc
230
*/
231
acpi_status
232
acpi_rs_convert_aml_to_resource(struct acpi_resource *resource,
233
union aml_resource *aml,
234
struct acpi_rsconvert_info *info);
235
236
acpi_status
237
acpi_rs_convert_resource_to_aml(struct acpi_resource *resource,
238
union aml_resource *aml,
239
struct acpi_rsconvert_info *info);
240
241
/*
242
* rsutils
243
*/
244
void
245
acpi_rs_move_data(void *destination,
246
void *source, u16 item_count, u8 move_type);
247
248
u8 acpi_rs_decode_bitmask(u16 mask, u8 * list);
249
250
u16 acpi_rs_encode_bitmask(u8 * list, u8 count);
251
252
acpi_rs_length
253
acpi_rs_get_resource_source(acpi_rs_length resource_length,
254
acpi_rs_length minimum_length,
255
struct acpi_resource_source *resource_source,
256
union aml_resource *aml, char *string_ptr);
257
258
acpi_rsdesc_size
259
acpi_rs_set_resource_source(union aml_resource *aml,
260
acpi_rs_length minimum_length,
261
struct acpi_resource_source *resource_source);
262
263
void
264
acpi_rs_set_resource_header(u8 descriptor_type,
265
acpi_rsdesc_size total_length,
266
union aml_resource *aml);
267
268
void
269
acpi_rs_set_resource_length(acpi_rsdesc_size total_length,
270
union aml_resource *aml);
271
272
/*
273
* rsdump
274
*/
275
void acpi_rs_dump_resource_list(struct acpi_resource *resource);
276
277
void acpi_rs_dump_irq_list(u8 * route_table);
278
279
/*
280
* Resource conversion tables
281
*/
282
extern struct acpi_rsconvert_info acpi_rs_convert_dma[];
283
extern struct acpi_rsconvert_info acpi_rs_convert_end_dpf[];
284
extern struct acpi_rsconvert_info acpi_rs_convert_io[];
285
extern struct acpi_rsconvert_info acpi_rs_convert_fixed_io[];
286
extern struct acpi_rsconvert_info acpi_rs_convert_end_tag[];
287
extern struct acpi_rsconvert_info acpi_rs_convert_memory24[];
288
extern struct acpi_rsconvert_info acpi_rs_convert_generic_reg[];
289
extern struct acpi_rsconvert_info acpi_rs_convert_memory32[];
290
extern struct acpi_rsconvert_info acpi_rs_convert_fixed_memory32[];
291
extern struct acpi_rsconvert_info acpi_rs_convert_address32[];
292
extern struct acpi_rsconvert_info acpi_rs_convert_address16[];
293
extern struct acpi_rsconvert_info acpi_rs_convert_ext_irq[];
294
extern struct acpi_rsconvert_info acpi_rs_convert_address64[];
295
extern struct acpi_rsconvert_info acpi_rs_convert_ext_address64[];
296
297
/* These resources require separate get/set tables */
298
299
extern struct acpi_rsconvert_info acpi_rs_get_irq[];
300
extern struct acpi_rsconvert_info acpi_rs_get_start_dpf[];
301
extern struct acpi_rsconvert_info acpi_rs_get_vendor_small[];
302
extern struct acpi_rsconvert_info acpi_rs_get_vendor_large[];
303
304
extern struct acpi_rsconvert_info acpi_rs_set_irq[];
305
extern struct acpi_rsconvert_info acpi_rs_set_start_dpf[];
306
extern struct acpi_rsconvert_info acpi_rs_set_vendor[];
307
308
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
309
/*
310
* rsinfo
311
*/
312
extern struct acpi_rsdump_info *acpi_gbl_dump_resource_dispatch[];
313
314
/*
315
* rsdump
316
*/
317
extern struct acpi_rsdump_info acpi_rs_dump_irq[];
318
extern struct acpi_rsdump_info acpi_rs_dump_dma[];
319
extern struct acpi_rsdump_info acpi_rs_dump_start_dpf[];
320
extern struct acpi_rsdump_info acpi_rs_dump_end_dpf[];
321
extern struct acpi_rsdump_info acpi_rs_dump_io[];
322
extern struct acpi_rsdump_info acpi_rs_dump_fixed_io[];
323
extern struct acpi_rsdump_info acpi_rs_dump_vendor[];
324
extern struct acpi_rsdump_info acpi_rs_dump_end_tag[];
325
extern struct acpi_rsdump_info acpi_rs_dump_memory24[];
326
extern struct acpi_rsdump_info acpi_rs_dump_memory32[];
327
extern struct acpi_rsdump_info acpi_rs_dump_fixed_memory32[];
328
extern struct acpi_rsdump_info acpi_rs_dump_address16[];
329
extern struct acpi_rsdump_info acpi_rs_dump_address32[];
330
extern struct acpi_rsdump_info acpi_rs_dump_address64[];
331
extern struct acpi_rsdump_info acpi_rs_dump_ext_address64[];
332
extern struct acpi_rsdump_info acpi_rs_dump_ext_irq[];
333
extern struct acpi_rsdump_info acpi_rs_dump_generic_reg[];
334
#endif
335
336
#endif /* __ACRESRC_H__ */
337
338