Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/acpi/acpica/acresrc.h
26288 views
1
/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
2
/******************************************************************************
3
*
4
* Name: acresrc.h - Resource Manager function prototypes
5
*
6
* Copyright (C) 2000 - 2025, Intel Corp.
7
*
8
*****************************************************************************/
9
10
#ifndef __ACRESRC_H__
11
#define __ACRESRC_H__
12
13
/* Need the AML resource descriptor structs */
14
15
#include "amlresrc.h"
16
17
/*
18
* If possible, pack the following structures to byte alignment, since we
19
* don't care about performance for debug output. Two cases where we cannot
20
* pack the structures:
21
*
22
* 1) Hardware does not support misaligned memory transfers
23
* 2) Compiler does not support pointers within packed structures
24
*/
25
#if (!defined(ACPI_MISALIGNMENT_NOT_SUPPORTED) && !defined(ACPI_PACKED_POINTERS_NOT_SUPPORTED))
26
#pragma pack(1)
27
#endif
28
29
/*
30
* Individual entry for the resource conversion tables
31
*/
32
typedef const struct acpi_rsconvert_info {
33
u8 opcode;
34
u8 resource_offset;
35
u8 aml_offset;
36
u8 value;
37
38
} acpi_rsconvert_info;
39
40
/* Resource conversion opcodes */
41
42
typedef enum {
43
ACPI_RSC_INITGET = 0,
44
ACPI_RSC_INITSET,
45
ACPI_RSC_FLAGINIT,
46
ACPI_RSC_1BITFLAG,
47
ACPI_RSC_2BITFLAG,
48
ACPI_RSC_3BITFLAG,
49
ACPI_RSC_6BITFLAG,
50
ACPI_RSC_ADDRESS,
51
ACPI_RSC_BITMASK,
52
ACPI_RSC_BITMASK16,
53
ACPI_RSC_COUNT,
54
ACPI_RSC_COUNT16,
55
ACPI_RSC_COUNT_GPIO_PIN,
56
ACPI_RSC_COUNT_GPIO_RES,
57
ACPI_RSC_COUNT_GPIO_VEN,
58
ACPI_RSC_COUNT_SERIAL_RES,
59
ACPI_RSC_COUNT_SERIAL_VEN,
60
ACPI_RSC_DATA8,
61
ACPI_RSC_EXIT_EQ,
62
ACPI_RSC_EXIT_LE,
63
ACPI_RSC_EXIT_NE,
64
ACPI_RSC_LENGTH,
65
ACPI_RSC_MOVE_GPIO_PIN,
66
ACPI_RSC_MOVE_GPIO_RES,
67
ACPI_RSC_MOVE_SERIAL_RES,
68
ACPI_RSC_MOVE_SERIAL_VEN,
69
ACPI_RSC_MOVE8,
70
ACPI_RSC_MOVE16,
71
ACPI_RSC_MOVE32,
72
ACPI_RSC_MOVE64,
73
ACPI_RSC_SET8,
74
ACPI_RSC_SOURCE,
75
ACPI_RSC_SOURCEX
76
} ACPI_RSCONVERT_OPCODES;
77
78
/* Resource Conversion sub-opcodes */
79
80
#define ACPI_RSC_COMPARE_AML_LENGTH 0
81
#define ACPI_RSC_COMPARE_VALUE 1
82
83
#define ACPI_RSC_TABLE_SIZE(d) (sizeof (d) / sizeof (struct acpi_rsconvert_info))
84
85
#define ACPI_RS_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_resource,f)
86
#define AML_OFFSET(f) (u8) ACPI_OFFSET (union aml_resource,f)
87
88
/*
89
* Individual entry for the resource dump tables
90
*/
91
typedef const struct acpi_rsdump_info {
92
u8 opcode;
93
u8 offset;
94
const char *name;
95
const char **pointer;
96
97
} acpi_rsdump_info;
98
99
/* Values for the Opcode field above */
100
101
typedef enum {
102
ACPI_RSD_TITLE = 0,
103
ACPI_RSD_1BITFLAG,
104
ACPI_RSD_2BITFLAG,
105
ACPI_RSD_3BITFLAG,
106
ACPI_RSD_6BITFLAG,
107
ACPI_RSD_ADDRESS,
108
ACPI_RSD_DWORDLIST,
109
ACPI_RSD_LITERAL,
110
ACPI_RSD_LONGLIST,
111
ACPI_RSD_SHORTLIST,
112
ACPI_RSD_SHORTLISTX,
113
ACPI_RSD_SOURCE,
114
ACPI_RSD_STRING,
115
ACPI_RSD_UINT8,
116
ACPI_RSD_UINT16,
117
ACPI_RSD_UINT32,
118
ACPI_RSD_UINT64,
119
ACPI_RSD_WORDLIST,
120
ACPI_RSD_LABEL,
121
ACPI_RSD_SOURCE_LABEL,
122
123
} ACPI_RSDUMP_OPCODES;
124
125
/* restore default alignment */
126
127
#pragma pack()
128
129
/* Resource tables indexed by internal resource type */
130
131
extern const u8 acpi_gbl_aml_resource_sizes[];
132
extern const u8 acpi_gbl_aml_resource_serial_bus_sizes[];
133
extern struct acpi_rsconvert_info *acpi_gbl_set_resource_dispatch[];
134
135
/* Resource tables indexed by raw AML resource descriptor type */
136
137
extern const u8 acpi_gbl_resource_struct_sizes[];
138
extern const u8 acpi_gbl_resource_struct_serial_bus_sizes[];
139
extern struct acpi_rsconvert_info *acpi_gbl_get_resource_dispatch[];
140
141
extern struct acpi_rsconvert_info
142
*acpi_gbl_convert_resource_serial_bus_dispatch[];
143
144
struct acpi_vendor_walk_info {
145
struct acpi_vendor_uuid *uuid;
146
struct acpi_buffer *buffer;
147
acpi_status status;
148
};
149
150
/*
151
* rscreate
152
*/
153
acpi_status
154
acpi_rs_create_resource_list(union acpi_operand_object *aml_buffer,
155
struct acpi_buffer *output_buffer);
156
157
acpi_status
158
acpi_rs_create_aml_resources(struct acpi_buffer *resource_list,
159
struct acpi_buffer *output_buffer);
160
161
acpi_status
162
acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
163
struct acpi_buffer *output_buffer);
164
165
/*
166
* rsutils
167
*/
168
169
acpi_status
170
acpi_rs_get_prt_method_data(struct acpi_namespace_node *node,
171
struct acpi_buffer *ret_buffer);
172
173
acpi_status
174
acpi_rs_get_crs_method_data(struct acpi_namespace_node *node,
175
struct acpi_buffer *ret_buffer);
176
177
acpi_status
178
acpi_rs_get_prs_method_data(struct acpi_namespace_node *node,
179
struct acpi_buffer *ret_buffer);
180
181
acpi_status
182
acpi_rs_get_method_data(acpi_handle handle,
183
const char *path, struct acpi_buffer *ret_buffer);
184
185
acpi_status
186
acpi_rs_set_srs_method_data(struct acpi_namespace_node *node,
187
struct acpi_buffer *ret_buffer);
188
189
acpi_status
190
acpi_rs_get_aei_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 *resource_list,
202
acpi_size resource_list_size, 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 - Debugger support
274
*/
275
#ifdef ACPI_DEBUGGER
276
void acpi_rs_dump_resource_list(struct acpi_resource *resource);
277
278
void acpi_rs_dump_irq_list(u8 *route_table);
279
#endif
280
281
/*
282
* Resource conversion tables
283
*/
284
extern struct acpi_rsconvert_info acpi_rs_convert_dma[];
285
extern struct acpi_rsconvert_info acpi_rs_convert_end_dpf[];
286
extern struct acpi_rsconvert_info acpi_rs_convert_io[];
287
extern struct acpi_rsconvert_info acpi_rs_convert_fixed_io[];
288
extern struct acpi_rsconvert_info acpi_rs_convert_end_tag[];
289
extern struct acpi_rsconvert_info acpi_rs_convert_memory24[];
290
extern struct acpi_rsconvert_info acpi_rs_convert_generic_reg[];
291
extern struct acpi_rsconvert_info acpi_rs_convert_memory32[];
292
extern struct acpi_rsconvert_info acpi_rs_convert_fixed_memory32[];
293
extern struct acpi_rsconvert_info acpi_rs_convert_address32[];
294
extern struct acpi_rsconvert_info acpi_rs_convert_address16[];
295
extern struct acpi_rsconvert_info acpi_rs_convert_ext_irq[];
296
extern struct acpi_rsconvert_info acpi_rs_convert_address64[];
297
extern struct acpi_rsconvert_info acpi_rs_convert_ext_address64[];
298
extern struct acpi_rsconvert_info acpi_rs_convert_gpio[];
299
extern struct acpi_rsconvert_info acpi_rs_convert_fixed_dma[];
300
extern struct acpi_rsconvert_info acpi_rs_convert_csi2_serial_bus[];
301
extern struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[];
302
extern struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[];
303
extern struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[];
304
extern struct acpi_rsconvert_info acpi_rs_convert_pin_function[];
305
extern struct acpi_rsconvert_info acpi_rs_convert_pin_config[];
306
extern struct acpi_rsconvert_info acpi_rs_convert_pin_group[];
307
extern struct acpi_rsconvert_info acpi_rs_convert_pin_group_function[];
308
extern struct acpi_rsconvert_info acpi_rs_convert_pin_group_config[];
309
extern struct acpi_rsconvert_info acpi_rs_convert_clock_input[];
310
311
/* These resources require separate get/set tables */
312
313
extern struct acpi_rsconvert_info acpi_rs_get_irq[];
314
extern struct acpi_rsconvert_info acpi_rs_get_start_dpf[];
315
extern struct acpi_rsconvert_info acpi_rs_get_vendor_small[];
316
extern struct acpi_rsconvert_info acpi_rs_get_vendor_large[];
317
318
extern struct acpi_rsconvert_info acpi_rs_set_irq[];
319
extern struct acpi_rsconvert_info acpi_rs_set_start_dpf[];
320
extern struct acpi_rsconvert_info acpi_rs_set_vendor[];
321
322
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
323
/*
324
* rsinfo
325
*/
326
extern struct acpi_rsdump_info *acpi_gbl_dump_resource_dispatch[];
327
extern struct acpi_rsdump_info *acpi_gbl_dump_serial_bus_dispatch[];
328
329
/*
330
* rsdumpinfo
331
*/
332
extern struct acpi_rsdump_info acpi_rs_dump_irq[];
333
extern struct acpi_rsdump_info acpi_rs_dump_prt[];
334
extern struct acpi_rsdump_info acpi_rs_dump_dma[];
335
extern struct acpi_rsdump_info acpi_rs_dump_start_dpf[];
336
extern struct acpi_rsdump_info acpi_rs_dump_end_dpf[];
337
extern struct acpi_rsdump_info acpi_rs_dump_io[];
338
extern struct acpi_rsdump_info acpi_rs_dump_io_flags[];
339
extern struct acpi_rsdump_info acpi_rs_dump_fixed_io[];
340
extern struct acpi_rsdump_info acpi_rs_dump_vendor[];
341
extern struct acpi_rsdump_info acpi_rs_dump_end_tag[];
342
extern struct acpi_rsdump_info acpi_rs_dump_memory24[];
343
extern struct acpi_rsdump_info acpi_rs_dump_memory32[];
344
extern struct acpi_rsdump_info acpi_rs_dump_memory_flags[];
345
extern struct acpi_rsdump_info acpi_rs_dump_fixed_memory32[];
346
extern struct acpi_rsdump_info acpi_rs_dump_address16[];
347
extern struct acpi_rsdump_info acpi_rs_dump_address32[];
348
extern struct acpi_rsdump_info acpi_rs_dump_address64[];
349
extern struct acpi_rsdump_info acpi_rs_dump_ext_address64[];
350
extern struct acpi_rsdump_info acpi_rs_dump_ext_irq[];
351
extern struct acpi_rsdump_info acpi_rs_dump_generic_reg[];
352
extern struct acpi_rsdump_info acpi_rs_dump_gpio[];
353
extern struct acpi_rsdump_info acpi_rs_dump_pin_function[];
354
extern struct acpi_rsdump_info acpi_rs_dump_fixed_dma[];
355
extern struct acpi_rsdump_info acpi_rs_dump_common_serial_bus[];
356
extern struct acpi_rsdump_info acpi_rs_dump_csi2_serial_bus[];
357
extern struct acpi_rsdump_info acpi_rs_dump_i2c_serial_bus[];
358
extern struct acpi_rsdump_info acpi_rs_dump_spi_serial_bus[];
359
extern struct acpi_rsdump_info acpi_rs_dump_uart_serial_bus[];
360
extern struct acpi_rsdump_info acpi_rs_dump_general_flags[];
361
extern struct acpi_rsdump_info acpi_rs_dump_pin_config[];
362
extern struct acpi_rsdump_info acpi_rs_dump_pin_group[];
363
extern struct acpi_rsdump_info acpi_rs_dump_pin_group_function[];
364
extern struct acpi_rsdump_info acpi_rs_dump_pin_group_config[];
365
extern struct acpi_rsdump_info acpi_rs_dump_clock_input[];
366
#endif
367
368
#endif /* __ACRESRC_H__ */
369
370