acresrc.h 11.7 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7
/******************************************************************************
 *
 * Name: acresrc.h - Resource Manager function prototypes
 *
 *****************************************************************************/

/*
8
 * Copyright (C) 2000 - 2012, Intel Corp.
L
Linus Torvalds 已提交
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions, and the following disclaimer,
 *    without modification.
 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
 *    substantially similar to the "NO WARRANTY" disclaimer below
 *    ("Disclaimer") and any redistribution must be conditioned upon
 *    including a substantially similar Disclaimer requirement for further
 *    binary redistribution.
 * 3. Neither the names of the above-listed copyright holders nor the names
 *    of any contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * Alternatively, this software may be distributed under the terms of the
 * GNU General Public License ("GPL") version 2 as published by the Free
 * Software Foundation.
 *
 * NO WARRANTY
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGES.
 */

#ifndef __ACRESRC_H__
#define __ACRESRC_H__

B
Bob Moore 已提交
47 48 49 50
/* Need the AML resource descriptor structs */

#include "amlresrc.h"

B
Bob Moore 已提交
51 52
/*
 * If possible, pack the following structures to byte alignment, since we
B
Bob Moore 已提交
53 54 55 56 57
 * don't care about performance for debug output. Two cases where we cannot
 * pack the structures:
 *
 * 1) Hardware does not support misaligned memory transfers
 * 2) Compiler does not support pointers within packed structures
B
Bob Moore 已提交
58
 */
B
Bob Moore 已提交
59
#if (!defined(ACPI_MISALIGNMENT_NOT_SUPPORTED) && !defined(ACPI_PACKED_POINTERS_NOT_SUPPORTED))
B
Bob Moore 已提交
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
#pragma pack(1)
#endif

/*
 * Individual entry for the resource conversion tables
 */
typedef const struct acpi_rsconvert_info {
	u8 opcode;
	u8 resource_offset;
	u8 aml_offset;
	u8 value;

} acpi_rsconvert_info;

/* Resource conversion opcodes */

76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
typedef enum {
	ACPI_RSC_INITGET = 0,
	ACPI_RSC_INITSET,
	ACPI_RSC_FLAGINIT,
	ACPI_RSC_1BITFLAG,
	ACPI_RSC_2BITFLAG,
	ACPI_RSC_3BITFLAG,
	ACPI_RSC_ADDRESS,
	ACPI_RSC_BITMASK,
	ACPI_RSC_BITMASK16,
	ACPI_RSC_COUNT,
	ACPI_RSC_COUNT16,
	ACPI_RSC_COUNT_GPIO_PIN,
	ACPI_RSC_COUNT_GPIO_RES,
	ACPI_RSC_COUNT_GPIO_VEN,
	ACPI_RSC_COUNT_SERIAL_RES,
	ACPI_RSC_COUNT_SERIAL_VEN,
	ACPI_RSC_DATA8,
	ACPI_RSC_EXIT_EQ,
	ACPI_RSC_EXIT_LE,
	ACPI_RSC_EXIT_NE,
	ACPI_RSC_LENGTH,
	ACPI_RSC_MOVE_GPIO_PIN,
	ACPI_RSC_MOVE_GPIO_RES,
	ACPI_RSC_MOVE_SERIAL_RES,
	ACPI_RSC_MOVE_SERIAL_VEN,
	ACPI_RSC_MOVE8,
	ACPI_RSC_MOVE16,
	ACPI_RSC_MOVE32,
	ACPI_RSC_MOVE64,
	ACPI_RSC_SET8,
	ACPI_RSC_SOURCE,
	ACPI_RSC_SOURCEX
} ACPI_RSCONVERT_OPCODES;
B
Bob Moore 已提交
110 111 112 113 114 115 116 117 118 119 120

/* Resource Conversion sub-opcodes */

#define ACPI_RSC_COMPARE_AML_LENGTH     0
#define ACPI_RSC_COMPARE_VALUE          1

#define ACPI_RSC_TABLE_SIZE(d)          (sizeof (d) / sizeof (struct acpi_rsconvert_info))

#define ACPI_RS_OFFSET(f)               (u8) ACPI_OFFSET (struct acpi_resource,f)
#define AML_OFFSET(f)                   (u8) ACPI_OFFSET (union aml_resource,f)

121 122 123
/*
 * Individual entry for the resource dump tables
 */
B
Bob Moore 已提交
124 125 126 127
typedef const struct acpi_rsdump_info {
	u8 opcode;
	u8 offset;
	char *name;
B
Bob Moore 已提交
128
	const char **pointer;
B
Bob Moore 已提交
129

B
Bob Moore 已提交
130
} acpi_rsdump_info;
B
Bob Moore 已提交
131

B
Bob Moore 已提交
132
/* Values for the Opcode field above */
B
Bob Moore 已提交
133

134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
typedef enum {
	ACPI_RSD_TITLE = 0,
	ACPI_RSD_1BITFLAG,
	ACPI_RSD_2BITFLAG,
	ACPI_RSD_3BITFLAG,
	ACPI_RSD_ADDRESS,
	ACPI_RSD_DWORDLIST,
	ACPI_RSD_LITERAL,
	ACPI_RSD_LONGLIST,
	ACPI_RSD_SHORTLIST,
	ACPI_RSD_SHORTLISTX,
	ACPI_RSD_SOURCE,
	ACPI_RSD_STRING,
	ACPI_RSD_UINT8,
	ACPI_RSD_UINT16,
	ACPI_RSD_UINT32,
	ACPI_RSD_UINT64,
	ACPI_RSD_WORDLIST
} ACPI_RSDUMP_OPCODES;
B
Bob Moore 已提交
153

B
Bob Moore 已提交
154
/* restore default alignment */
B
Bob Moore 已提交
155

B
Bob Moore 已提交
156
#pragma pack()
B
Bob Moore 已提交
157

B
Bob Moore 已提交
158
/* Resource tables indexed by internal resource type */
B
Bob Moore 已提交
159

B
Bob Moore 已提交
160
extern const u8 acpi_gbl_aml_resource_sizes[];
161
extern const u8 acpi_gbl_aml_resource_serial_bus_sizes[];
B
Bob Moore 已提交
162 163 164
extern struct acpi_rsconvert_info *acpi_gbl_set_resource_dispatch[];

/* Resource tables indexed by raw AML resource descriptor type */
B
Bob Moore 已提交
165

B
Bob Moore 已提交
166
extern const u8 acpi_gbl_resource_struct_sizes[];
167
extern const u8 acpi_gbl_resource_struct_serial_bus_sizes[];
B
Bob Moore 已提交
168 169
extern struct acpi_rsconvert_info *acpi_gbl_get_resource_dispatch[];

170 171 172
extern struct acpi_rsconvert_info
    *acpi_gbl_convert_resource_serial_bus_dispatch[];

B
Bob Moore 已提交
173 174 175 176 177
struct acpi_vendor_walk_info {
	struct acpi_vendor_uuid *uuid;
	struct acpi_buffer *buffer;
	acpi_status status;
};
B
Bob Moore 已提交
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192

/*
 * rscreate
 */
acpi_status
acpi_rs_create_resource_list(union acpi_operand_object *aml_buffer,
			     struct acpi_buffer *output_buffer);

acpi_status
acpi_rs_create_aml_resources(struct acpi_resource *linked_list_buffer,
			     struct acpi_buffer *output_buffer);

acpi_status
acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object,
				 struct acpi_buffer *output_buffer);
B
Bob Moore 已提交
193

L
Linus Torvalds 已提交
194
/*
B
Bob Moore 已提交
195
 * rsutils
L
Linus Torvalds 已提交
196
 */
B
Bob Moore 已提交
197

L
Linus Torvalds 已提交
198
acpi_status
B
Bob Moore 已提交
199 200
acpi_rs_get_prt_method_data(struct acpi_namespace_node *node,
			    struct acpi_buffer *ret_buffer);
L
Linus Torvalds 已提交
201 202

acpi_status
B
Bob Moore 已提交
203 204
acpi_rs_get_crs_method_data(struct acpi_namespace_node *node,
			    struct acpi_buffer *ret_buffer);
L
Linus Torvalds 已提交
205 206

acpi_status
B
Bob Moore 已提交
207 208
acpi_rs_get_prs_method_data(struct acpi_namespace_node *node,
			    struct acpi_buffer *ret_buffer);
L
Linus Torvalds 已提交
209 210

acpi_status
L
Len Brown 已提交
211 212
acpi_rs_get_method_data(acpi_handle handle,
			char *path, struct acpi_buffer *ret_buffer);
L
Linus Torvalds 已提交
213 214

acpi_status
B
Bob Moore 已提交
215 216
acpi_rs_set_srs_method_data(struct acpi_namespace_node *node,
			    struct acpi_buffer *ret_buffer);
L
Linus Torvalds 已提交
217

218 219 220 221
acpi_status
acpi_rs_get_aei_method_data(struct acpi_namespace_node *node,
			    struct acpi_buffer *ret_buffer);

R
Robert Moore 已提交
222 223 224
/*
 * rscalc
 */
L
Linus Torvalds 已提交
225
acpi_status
B
Bob Moore 已提交
226 227
acpi_rs_get_list_length(u8 * aml_buffer,
			u32 aml_buffer_length, acpi_size * size_needed);
L
Linus Torvalds 已提交
228 229

acpi_status
B
Bob Moore 已提交
230 231
acpi_rs_get_aml_length(struct acpi_resource *linked_list_buffer,
		       acpi_size * size_needed);
L
Linus Torvalds 已提交
232 233

acpi_status
L
Len Brown 已提交
234 235
acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
				     acpi_size * buffer_size_needed);
L
Linus Torvalds 已提交
236 237

acpi_status
B
Bob Moore 已提交
238 239 240
acpi_rs_convert_aml_to_resources(u8 * aml,
				 u32 length,
				 u32 offset, u8 resource_index, void **context);
L
Linus Torvalds 已提交
241 242

acpi_status
B
Bob Moore 已提交
243 244
acpi_rs_convert_resources_to_aml(struct acpi_resource *resource,
				 acpi_size aml_size_needed, u8 * output_buffer);
L
Linus Torvalds 已提交
245

B
Bob Moore 已提交
246 247 248
/*
 * rsaddr
 */
B
Bob Moore 已提交
249 250
void
acpi_rs_set_address_common(union aml_resource *aml,
B
Bob Moore 已提交
251
			   struct acpi_resource *resource);
L
Linus Torvalds 已提交
252

B
Bob Moore 已提交
253 254
u8
acpi_rs_get_address_common(struct acpi_resource *resource,
B
Bob Moore 已提交
255
			   union aml_resource *aml);
L
Linus Torvalds 已提交
256

B
Bob Moore 已提交
257 258 259
/*
 * rsmisc
 */
L
Linus Torvalds 已提交
260
acpi_status
B
Bob Moore 已提交
261 262 263
acpi_rs_convert_aml_to_resource(struct acpi_resource *resource,
				union aml_resource *aml,
				struct acpi_rsconvert_info *info);
L
Linus Torvalds 已提交
264 265

acpi_status
B
Bob Moore 已提交
266 267 268
acpi_rs_convert_resource_to_aml(struct acpi_resource *resource,
				union aml_resource *aml,
				struct acpi_rsconvert_info *info);
B
Bob Moore 已提交
269 270 271 272 273 274 275 276

/*
 * rsutils
 */
void
acpi_rs_move_data(void *destination,
		  void *source, u16 item_count, u8 move_type);

B
Bob Moore 已提交
277
u8 acpi_rs_decode_bitmask(u16 mask, u8 * list);
B
Bob Moore 已提交
278

B
Bob Moore 已提交
279
u16 acpi_rs_encode_bitmask(u8 * list, u8 count);
B
Bob Moore 已提交
280

B
Bob Moore 已提交
281 282 283
acpi_rs_length
acpi_rs_get_resource_source(acpi_rs_length resource_length,
			    acpi_rs_length minimum_length,
B
Bob Moore 已提交
284 285 286
			    struct acpi_resource_source *resource_source,
			    union aml_resource *aml, char *string_ptr);

B
Bob Moore 已提交
287
acpi_rsdesc_size
B
Bob Moore 已提交
288
acpi_rs_set_resource_source(union aml_resource *aml,
B
Bob Moore 已提交
289
			    acpi_rs_length minimum_length,
B
Bob Moore 已提交
290
			    struct acpi_resource_source *resource_source);
L
Linus Torvalds 已提交
291

B
Bob Moore 已提交
292 293
void
acpi_rs_set_resource_header(u8 descriptor_type,
B
Bob Moore 已提交
294 295 296 297 298 299
			    acpi_rsdesc_size total_length,
			    union aml_resource *aml);

void
acpi_rs_set_resource_length(acpi_rsdesc_size total_length,
			    union aml_resource *aml);
B
Bob Moore 已提交
300

R
Robert Moore 已提交
301
/*
B
Bob Moore 已提交
302
 * rsdump
R
Robert Moore 已提交
303
 */
B
Bob Moore 已提交
304
void acpi_rs_dump_resource_list(struct acpi_resource *resource);
B
Bob Moore 已提交
305

B
Bob Moore 已提交
306
void acpi_rs_dump_irq_list(u8 * route_table);
B
Bob Moore 已提交
307

B
Bob Moore 已提交
308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324
/*
 * Resource conversion tables
 */
extern struct acpi_rsconvert_info acpi_rs_convert_dma[];
extern struct acpi_rsconvert_info acpi_rs_convert_end_dpf[];
extern struct acpi_rsconvert_info acpi_rs_convert_io[];
extern struct acpi_rsconvert_info acpi_rs_convert_fixed_io[];
extern struct acpi_rsconvert_info acpi_rs_convert_end_tag[];
extern struct acpi_rsconvert_info acpi_rs_convert_memory24[];
extern struct acpi_rsconvert_info acpi_rs_convert_generic_reg[];
extern struct acpi_rsconvert_info acpi_rs_convert_memory32[];
extern struct acpi_rsconvert_info acpi_rs_convert_fixed_memory32[];
extern struct acpi_rsconvert_info acpi_rs_convert_address32[];
extern struct acpi_rsconvert_info acpi_rs_convert_address16[];
extern struct acpi_rsconvert_info acpi_rs_convert_ext_irq[];
extern struct acpi_rsconvert_info acpi_rs_convert_address64[];
extern struct acpi_rsconvert_info acpi_rs_convert_ext_address64[];
325 326 327 328 329
extern struct acpi_rsconvert_info acpi_rs_convert_gpio[];
extern struct acpi_rsconvert_info acpi_rs_convert_fixed_dma[];
extern struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[];
extern struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[];
extern struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[];
B
Bob Moore 已提交
330 331 332 333 334 335 336 337 338 339 340

/* These resources require separate get/set tables */

extern struct acpi_rsconvert_info acpi_rs_get_irq[];
extern struct acpi_rsconvert_info acpi_rs_get_start_dpf[];
extern struct acpi_rsconvert_info acpi_rs_get_vendor_small[];
extern struct acpi_rsconvert_info acpi_rs_get_vendor_large[];

extern struct acpi_rsconvert_info acpi_rs_set_irq[];
extern struct acpi_rsconvert_info acpi_rs_set_start_dpf[];
extern struct acpi_rsconvert_info acpi_rs_set_vendor[];
B
Bob Moore 已提交
341

B
Bob Moore 已提交
342 343 344 345 346
#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
/*
 * rsinfo
 */
extern struct acpi_rsdump_info *acpi_gbl_dump_resource_dispatch[];
347
extern struct acpi_rsdump_info *acpi_gbl_dump_serial_bus_dispatch[];
B
Bob Moore 已提交
348

B
Bob Moore 已提交
349
/*
350
 * rsdumpinfo
B
Bob Moore 已提交
351 352
 */
extern struct acpi_rsdump_info acpi_rs_dump_irq[];
353
extern struct acpi_rsdump_info acpi_rs_dump_prt[];
B
Bob Moore 已提交
354 355 356 357
extern struct acpi_rsdump_info acpi_rs_dump_dma[];
extern struct acpi_rsdump_info acpi_rs_dump_start_dpf[];
extern struct acpi_rsdump_info acpi_rs_dump_end_dpf[];
extern struct acpi_rsdump_info acpi_rs_dump_io[];
358
extern struct acpi_rsdump_info acpi_rs_dump_io_flags[];
B
Bob Moore 已提交
359 360 361 362 363
extern struct acpi_rsdump_info acpi_rs_dump_fixed_io[];
extern struct acpi_rsdump_info acpi_rs_dump_vendor[];
extern struct acpi_rsdump_info acpi_rs_dump_end_tag[];
extern struct acpi_rsdump_info acpi_rs_dump_memory24[];
extern struct acpi_rsdump_info acpi_rs_dump_memory32[];
364
extern struct acpi_rsdump_info acpi_rs_dump_memory_flags[];
B
Bob Moore 已提交
365 366 367 368 369 370 371
extern struct acpi_rsdump_info acpi_rs_dump_fixed_memory32[];
extern struct acpi_rsdump_info acpi_rs_dump_address16[];
extern struct acpi_rsdump_info acpi_rs_dump_address32[];
extern struct acpi_rsdump_info acpi_rs_dump_address64[];
extern struct acpi_rsdump_info acpi_rs_dump_ext_address64[];
extern struct acpi_rsdump_info acpi_rs_dump_ext_irq[];
extern struct acpi_rsdump_info acpi_rs_dump_generic_reg[];
372 373 374 375 376 377
extern struct acpi_rsdump_info acpi_rs_dump_gpio[];
extern struct acpi_rsdump_info acpi_rs_dump_fixed_dma[];
extern struct acpi_rsdump_info acpi_rs_dump_common_serial_bus[];
extern struct acpi_rsdump_info acpi_rs_dump_i2c_serial_bus[];
extern struct acpi_rsdump_info acpi_rs_dump_spi_serial_bus[];
extern struct acpi_rsdump_info acpi_rs_dump_uart_serial_bus[];
378
extern struct acpi_rsdump_info acpi_rs_dump_general_flags[];
B
Bob Moore 已提交
379
#endif
R
Robert Moore 已提交
380

L
Len Brown 已提交
381
#endif				/* __ACRESRC_H__ */