aboutsummaryrefslogtreecommitdiff
path: root/include/acpi
diff options
context:
space:
mode:
authorBob Moore <robert.moore@intel.com>2005-09-30 19:03:00 -0400
committerLen Brown <len.brown@intel.com>2005-12-10 00:20:25 -0500
commit50eca3eb89d73d9f0aa070b126c7ee6a616016ab (patch)
treeb2d06d21b34b9bd17eea4c53cff1f3866fa1b21d /include/acpi
parent3d5271f9883cba7b54762bc4fe027d4172f06db7 (diff)
[ACPI] ACPICA 20050930
Completed a major overhaul of the Resource Manager code - specifically, optimizations in the area of the AML/internal resource conversion code. The code has been optimized to simplify and eliminate duplicated code, CPU stack use has been decreased by optimizing function parameters and local variables, and naming conventions across the manager have been standardized for clarity and ease of maintenance (this includes function, parameter, variable, and struct/typedef names.) All Resource Manager dispatch and information tables have been moved to a single location for clarity and ease of maintenance. One new file was created, named "rsinfo.c". The ACPI return macros (return_ACPI_STATUS, etc.) have been modified to guarantee that the argument is not evaluated twice, making them less prone to macro side-effects. However, since there exists the possibility of additional stack use if a particular compiler cannot optimize them (such as in the debug generation case), the original macros are optionally available. Note that some invocations of the return_VALUE macro may now cause size mismatch warnings; the return_UINT8 and return_UINT32 macros are provided to eliminate these. (From Randy Dunlap) Implemented a new mechanism to enable debug tracing for individual control methods. A new external interface, acpi_debug_trace(), is provided to enable this mechanism. The intent is to allow the host OS to easily enable and disable tracing for problematic control methods. This interface can be easily exposed to a user or debugger interface if desired. See the file psxface.c for details. acpi_ut_callocate() will now return a valid pointer if a length of zero is specified - a length of one is used and a warning is issued. This matches the behavior of acpi_ut_allocate(). Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'include/acpi')
-rw-r--r--include/acpi/acconfig.h2
-rw-r--r--include/acpi/acdisasm.h40
-rw-r--r--include/acpi/acglobal.h9
-rw-r--r--include/acpi/aclocal.h79
-rw-r--r--include/acpi/acmacros.h58
-rw-r--r--include/acpi/acpi_drivers.h4
-rw-r--r--include/acpi/acpixf.h3
-rw-r--r--include/acpi/acresrc.h313
-rw-r--r--include/acpi/actypes.h152
-rw-r--r--include/acpi/amlresrc.h242
10 files changed, 535 insertions, 367 deletions
diff --git a/include/acpi/acconfig.h b/include/acpi/acconfig.h
index 1427c5cf430..cb59b018c84 100644
--- a/include/acpi/acconfig.h
+++ b/include/acpi/acconfig.h
@@ -63,7 +63,7 @@
/* Current ACPICA subsystem version in YYYYMMDD format */
-#define ACPI_CA_VERSION 0x20050916
+#define ACPI_CA_VERSION 0x20050930
/*
* OS name, used for the _OS object. The _OS object is essentially obsolete,
diff --git a/include/acpi/acdisasm.h b/include/acpi/acdisasm.h
index 759b4cff4f8..b2921b869bb 100644
--- a/include/acpi/acdisasm.h
+++ b/include/acpi/acdisasm.h
@@ -187,73 +187,67 @@ void acpi_dm_decode_attribute(u8 attribute);
* dmresrcl
*/
void
-acpi_dm_word_descriptor(union asl_resource_desc *resource,
- u32 length, u32 level);
+acpi_dm_word_descriptor(union aml_resource *resource, u32 length, u32 level);
void
-acpi_dm_dword_descriptor(union asl_resource_desc *resource,
- u32 length, u32 level);
+acpi_dm_dword_descriptor(union aml_resource *resource, u32 length, u32 level);
void
-acpi_dm_extended_descriptor(union asl_resource_desc *resource,
+acpi_dm_extended_descriptor(union aml_resource *resource,
u32 length, u32 level);
void
-acpi_dm_qword_descriptor(union asl_resource_desc *resource,
- u32 length, u32 level);
+acpi_dm_qword_descriptor(union aml_resource *resource, u32 length, u32 level);
void
-acpi_dm_memory24_descriptor(union asl_resource_desc *resource,
+acpi_dm_memory24_descriptor(union aml_resource *resource,
u32 length, u32 level);
void
-acpi_dm_memory32_descriptor(union asl_resource_desc *resource,
+acpi_dm_memory32_descriptor(union aml_resource *resource,
u32 length, u32 level);
void
-acpi_dm_fixed_memory32_descriptor(union asl_resource_desc *resource,
+acpi_dm_fixed_memory32_descriptor(union aml_resource *resource,
u32 length, u32 level);
void
-acpi_dm_generic_register_descriptor(union asl_resource_desc *resource,
+acpi_dm_generic_register_descriptor(union aml_resource *resource,
u32 length, u32 level);
void
-acpi_dm_interrupt_descriptor(union asl_resource_desc *resource,
+acpi_dm_interrupt_descriptor(union aml_resource *resource,
u32 length, u32 level);
void
-acpi_dm_vendor_large_descriptor(union asl_resource_desc *resource,
+acpi_dm_vendor_large_descriptor(union aml_resource *resource,
u32 length, u32 level);
/*
* dmresrcs
*/
void
-acpi_dm_irq_descriptor(union asl_resource_desc *resource,
- u32 length, u32 level);
+acpi_dm_irq_descriptor(union aml_resource *resource, u32 length, u32 level);
void
-acpi_dm_dma_descriptor(union asl_resource_desc *resource,
- u32 length, u32 level);
+acpi_dm_dma_descriptor(union aml_resource *resource, u32 length, u32 level);
-void
-acpi_dm_io_descriptor(union asl_resource_desc *resource, u32 length, u32 level);
+void acpi_dm_io_descriptor(union aml_resource *resource, u32 length, u32 level);
void
-acpi_dm_fixed_io_descriptor(union asl_resource_desc *resource,
+acpi_dm_fixed_io_descriptor(union aml_resource *resource,
u32 length, u32 level);
void
-acpi_dm_start_dependent_descriptor(union asl_resource_desc *resource,
+acpi_dm_start_dependent_descriptor(union aml_resource *resource,
u32 length, u32 level);
void
-acpi_dm_end_dependent_descriptor(union asl_resource_desc *resource,
+acpi_dm_end_dependent_descriptor(union aml_resource *resource,
u32 length, u32 level);
void
-acpi_dm_vendor_small_descriptor(union asl_resource_desc *resource,
+acpi_dm_vendor_small_descriptor(union aml_resource *resource,
u32 length, u32 level);
/*
diff --git a/include/acpi/acglobal.h b/include/acpi/acglobal.h
index e9c2790139e..cef51b1ddf9 100644
--- a/include/acpi/acglobal.h
+++ b/include/acpi/acglobal.h
@@ -80,6 +80,15 @@ extern u32 acpi_dbg_layer;
extern u32 acpi_gbl_nesting_level;
+/* Support for dynamic control method tracing mechanism */
+
+ACPI_EXTERN u32 acpi_gbl_original_dbg_level;
+ACPI_EXTERN u32 acpi_gbl_original_dbg_layer;
+ACPI_EXTERN acpi_name acpi_gbl_trace_method_name;
+ACPI_EXTERN u32 acpi_gbl_trace_dbg_level;
+ACPI_EXTERN u32 acpi_gbl_trace_dbg_layer;
+ACPI_EXTERN u32 acpi_gbl_trace_flags;
+
/*****************************************************************************
*
* Runtime configuration (static defaults that can be overriden at runtime)
diff --git a/include/acpi/aclocal.h b/include/acpi/aclocal.h
index 76ac1533c40..dca0d40ea39 100644
--- a/include/acpi/aclocal.h
+++ b/include/acpi/aclocal.h
@@ -735,59 +735,52 @@ struct acpi_bit_register_info {
/* resource_type values */
-#define ACPI_RESOURCE_TYPE_MEMORY_RANGE 0
-#define ACPI_RESOURCE_TYPE_IO_RANGE 1
-#define ACPI_RESOURCE_TYPE_BUS_NUMBER_RANGE 2
+#define ACPI_ADDRESS_TYPE_MEMORY_RANGE 0
+#define ACPI_ADDRESS_TYPE_IO_RANGE 1
+#define ACPI_ADDRESS_TYPE_BUS_NUMBER_RANGE 2
/* Resource descriptor types and masks */
-#define ACPI_RDESC_TYPE_LARGE 0x80
-#define ACPI_RDESC_TYPE_SMALL 0x00
+#define ACPI_RESOURCE_NAME_LARGE 0x80
+#define ACPI_RESOURCE_NAME_SMALL 0x00
-#define ACPI_RDESC_SMALL_MASK 0x78 /* Bits 6:3 contain the type */
-#define ACPI_RDESC_SMALL_LENGTH_MASK 0x07 /* Bits 2:0 contain the length */
-#define ACPI_RDESC_LARGE_MASK 0x7F /* Bits 6:0 contain the type */
+#define ACPI_RESOURCE_NAME_SMALL_MASK 0x78 /* Bits 6:3 contain the type */
+#define ACPI_RESOURCE_NAME_SMALL_LENGTH_MASK 0x07 /* Bits 2:0 contain the length */
+#define ACPI_RESOURCE_NAME_LARGE_MASK 0x7F /* Bits 6:0 contain the type */
/*
- * Small resource descriptor types
+ * Small resource descriptor "names" as defined by the ACPI specification.
* Note: Bits 2:0 are used for the descriptor length
*/
-#define ACPI_RDESC_TYPE_IRQ_FORMAT 0x20
-#define ACPI_RDESC_TYPE_DMA_FORMAT 0x28
-#define ACPI_RDESC_TYPE_START_DEPENDENT 0x30
-#define ACPI_RDESC_TYPE_END_DEPENDENT 0x38
-#define ACPI_RDESC_TYPE_IO_PORT 0x40
-#define ACPI_RDESC_TYPE_FIXED_IO_PORT 0x48
-#define ACPI_RDESC_TYPE_RESERVED_S1 0x50
-#define ACPI_RDESC_TYPE_RESERVED_S2 0x58
-#define ACPI_RDESC_TYPE_RESERVED_S3 0x60
-#define ACPI_RDESC_TYPE_RESERVED_S4 0x68
-#define ACPI_RDESC_TYPE_SMALL_VENDOR 0x70
-#define ACPI_RDESC_TYPE_END_TAG 0x78
+#define ACPI_RESOURCE_NAME_IRQ 0x20
+#define ACPI_RESOURCE_NAME_DMA 0x28
+#define ACPI_RESOURCE_NAME_START_DEPENDENT 0x30
+#define ACPI_RESOURCE_NAME_END_DEPENDENT 0x38
+#define ACPI_RESOURCE_NAME_IO 0x40
+#define ACPI_RESOURCE_NAME_FIXED_IO 0x48
+#define ACPI_RESOURCE_NAME_RESERVED_S1 0x50
+#define ACPI_RESOURCE_NAME_RESERVED_S2 0x58
+#define ACPI_RESOURCE_NAME_RESERVED_S3 0x60
+#define ACPI_RESOURCE_NAME_RESERVED_S4 0x68
+#define ACPI_RESOURCE_NAME_VENDOR_SMALL 0x70
+#define ACPI_RESOURCE_NAME_END_TAG 0x78
/*
- * Large resource descriptor types
+ * Large resource descriptor "names" as defined by the ACPI specification.
+ * Note: includes the Large Descriptor bit in bit[7]
*/
-#define ACPI_RDESC_TYPE_MEMORY_24 0x81
-#define ACPI_RDESC_TYPE_GENERIC_REGISTER 0x82
-#define ACPI_RDESC_TYPE_RESERVED_L1 0x83
-#define ACPI_RDESC_TYPE_LARGE_VENDOR 0x84
-#define ACPI_RDESC_TYPE_MEMORY_32 0x85
-#define ACPI_RDESC_TYPE_FIXED_MEMORY_32 0x86
-#define ACPI_RDESC_TYPE_DWORD_ADDRESS_SPACE 0x87
-#define ACPI_RDESC_TYPE_WORD_ADDRESS_SPACE 0x88
-#define ACPI_RDESC_TYPE_EXTENDED_XRUPT 0x89
-#define ACPI_RDESC_TYPE_QWORD_ADDRESS_SPACE 0x8A
-#define ACPI_RDESC_TYPE_EXTENDED_ADDRESS_SPACE 0x8B
-#define ACPI_RDESC_LARGE_MAX 0x8B
-
-/*
- * Minimum lengths for descriptors with optional fields
- */
-#define ACPI_RDESC_QWORD_MIN 43
-#define ACPI_RDESC_DWORD_MIN 23
-#define ACPI_RDESC_WORD_MIN 13
-#define ACPI_RDESC_EXT_XRUPT_MIN 6
+#define ACPI_RESOURCE_NAME_MEMORY24 0x81
+#define ACPI_RESOURCE_NAME_GENERIC_REGISTER 0x82
+#define ACPI_RESOURCE_NAME_RESERVED_L1 0x83
+#define ACPI_RESOURCE_NAME_VENDOR_LARGE 0x84
+#define ACPI_RESOURCE_NAME_MEMORY32 0x85
+#define ACPI_RESOURCE_NAME_FIXED_MEMORY32 0x86
+#define ACPI_RESOURCE_NAME_ADDRESS32 0x87
+#define ACPI_RESOURCE_NAME_ADDRESS16 0x88
+#define ACPI_RESOURCE_NAME_EXTENDED_IRQ 0x89
+#define ACPI_RESOURCE_NAME_ADDRESS64 0x8A
+#define ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 0x8B
+#define ACPI_RESOURCE_NAME_LARGE_MAX 0x8B
/*****************************************************************************
*
@@ -795,7 +788,7 @@ struct acpi_bit_register_info {
*
****************************************************************************/
-#define ACPI_ASCII_ZERO 0x30
+#define ACPI_ASCII_ZERO 0x30
/*****************************************************************************
*
diff --git a/include/acpi/acmacros.h b/include/acpi/acmacros.h
index 702cc4e57f5..258cfe5e2aa 100644
--- a/include/acpi/acmacros.h
+++ b/include/acpi/acmacros.h
@@ -525,6 +525,9 @@
* bad form, but having a separate exit macro is very ugly and difficult to maintain.
* One of the FUNCTION_TRACE macros above must be used in conjunction with these macros
* so that "_acpi_function_name" is defined.
+ *
+ * Note: the DO_WHILE0 macro is used to prevent some compilers from complaining
+ * about these constructs.
*/
#ifdef ACPI_USE_DO_WHILE_0
#define ACPI_DO_WHILE0(a) do a while(0)
@@ -532,10 +535,55 @@
#define ACPI_DO_WHILE0(a) a
#endif
-#define return_VOID ACPI_DO_WHILE0 ({acpi_ut_exit(ACPI_DEBUG_PARAMETERS);return;})
-#define return_ACPI_STATUS(s) ACPI_DO_WHILE0 ({acpi_ut_status_exit(ACPI_DEBUG_PARAMETERS,(s));return((s));})
-#define return_VALUE(s) ACPI_DO_WHILE0 ({acpi_ut_value_exit(ACPI_DEBUG_PARAMETERS,(acpi_integer)(s));return((s));})
-#define return_PTR(s) ACPI_DO_WHILE0 ({acpi_ut_ptr_exit(ACPI_DEBUG_PARAMETERS,(u8 *)(s));return((s));})
+#define return_VOID ACPI_DO_WHILE0 ({ \
+ acpi_ut_exit (ACPI_DEBUG_PARAMETERS); \
+ return;})
+/*
+ * There are two versions of most of the return macros. The default version is
+ * safer, since it avoids side-effects by guaranteeing that the argument will
+ * not be evaluated twice.
+ *
+ * A less-safe version of the macros is provided for optional use if the
+ * compiler uses excessive CPU stack (for example, this may happen in the
+ * debug case if code optimzation is disabled.)
+ */
+#ifndef ACPI_SIMPLE_RETURN_MACROS
+
+#define return_ACPI_STATUS(s) ACPI_DO_WHILE0 ({ \
+ register acpi_status _s = (s); \
+ acpi_ut_status_exit (ACPI_DEBUG_PARAMETERS, _s); \
+ return (_s); })
+#define return_PTR(s) ACPI_DO_WHILE0 ({ \
+ register void *_s = (void *) (s); \
+ acpi_ut_ptr_exit (ACPI_DEBUG_PARAMETERS, (u8 *) _s); \
+ return (_s); })
+#define return_VALUE(s) ACPI_DO_WHILE0 ({ \
+ register acpi_integer _s = (s); \
+ acpi_ut_value_exit (ACPI_DEBUG_PARAMETERS, _s); \
+ return (_s); })
+#define return_UINT8(s) ACPI_DO_WHILE0 ({ \
+ register u8 _s = (u8) (s); \
+ acpi_ut_value_exit (ACPI_DEBUG_PARAMETERS, _s); \
+ return (_s); })
+#define return_UINT32(s) ACPI_DO_WHILE0 ({ \
+ register u32 _s = (u32) (s); \
+ acpi_ut_value_exit (ACPI_DEBUG_PARAMETERS, _s); \
+ return (_s); })
+#else /* Use original less-safe macros */
+
+#define return_ACPI_STATUS(s) ACPI_DO_WHILE0 ({ \
+ acpi_ut_status_exit (ACPI_DEBUG_PARAMETERS, (s)); \
+ return((s)); })
+#define return_PTR(s) ACPI_DO_WHILE0 ({ \
+ acpi_ut_ptr_exit (ACPI_DEBUG_PARAMETERS, (u8 *) (s)); \
+ return((s)); })
+#define return_VALUE(s) ACPI_DO_WHILE0 ({ \
+ acpi_ut_value_exit (ACPI_DEBUG_PARAMETERS, (acpi_integer) (s)); \
+ return((s)); })
+#define return_UINT8(s) return_VALUE(s)
+#define return_UINT32(s) return_VALUE(s)
+
+#endif /* ACPI_SIMPLE_RETURN_MACROS */
/* Conditional execution */
@@ -612,6 +660,8 @@
#define return_VOID return
#define return_ACPI_STATUS(s) return(s)
#define return_VALUE(s) return(s)
+#define return_UINT8(s) return(s)
+#define return_UINT32(s) return(s)
#define return_PTR(s) return(s)
#endif
diff --git a/include/acpi/acpi_drivers.h b/include/acpi/acpi_drivers.h
index c1b4e1f882e..b425f9bb6d4 100644
--- a/include/acpi/acpi_drivers.h
+++ b/include/acpi/acpi_drivers.h
@@ -52,8 +52,8 @@
/* ACPI PCI Interrupt Link (pci_link.c) */
int acpi_irq_penalty_init(void);
-int acpi_pci_link_allocate_irq(acpi_handle handle, int index, int *edge_level,
- int *active_high_low, char **name);
+int acpi_pci_link_allocate_irq(acpi_handle handle, int index, int *triggering,
+ int *polarity, char **name);
int acpi_pci_link_free_irq(acpi_handle handle);
/* ACPI PCI Interrupt Routing (pci_irq.c) */
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h
index 2a9dbc13b0f..02f00a8fee0 100644
--- a/include/acpi/acpixf.h
+++ b/include/acpi/acpixf.h
@@ -149,6 +149,9 @@ acpi_detach_data(acpi_handle obj_handle, acpi_object_handler handler);
acpi_status
acpi_get_data(acpi_handle obj_handle, acpi_object_handler handler, void **data);
+acpi_status
+acpi_debug_trace(char *name, u32 debug_level, u32 debug_layer, u32 flags);
+
/*
* Object manipulation and enumeration
*/
diff --git a/include/acpi/acresrc.h b/include/acpi/acresrc.h
index ce2cf72fd4c..b66994e9e4e 100644
--- a/include/acpi/acresrc.h
+++ b/include/acpi/acresrc.h
@@ -44,6 +44,51 @@
#ifndef __ACRESRC_H__
#define __ACRESRC_H__
+/* Need the AML resource descriptor structs */
+
+#include "amlresrc.h"
+
+/*
+ * Resource dispatch and info tables
+ */
+struct acpi_resource_info {
+ u8 length_type;
+ u8 minimum_aml_resource_length;
+ u8 minimum_internal_struct_length;
+};
+
+/* Types for length_type above */
+
+#define ACPI_FIXED_LENGTH 0
+#define ACPI_VARIABLE_LENGTH 1
+#define ACPI_SMALL_VARIABLE_LENGTH 2
+
+/* Handlers */
+
+typedef acpi_status(*ACPI_SET_RESOURCE_HANDLER) (struct acpi_resource *
+ resource,
+ union aml_resource * aml);
+
+typedef acpi_status(*ACPI_GET_RESOURCE_HANDLER) (union aml_resource * aml,
+ u16 aml_resource_length,
+ struct acpi_resource *
+ resource);
+
+typedef void (*ACPI_DUMP_RESOURCE_HANDLER) (union acpi_resource_data * data);
+
+/* Tables indexed by internal resource type */
+
+extern u8 acpi_gbl_aml_resource_sizes[];
+extern ACPI_SET_RESOURCE_HANDLER acpi_gbl_set_resource_dispatch[];
+extern ACPI_DUMP_RESOURCE_HANDLER acpi_gbl_dump_resource_dispatch[];
+
+/* Tables indexed by raw AML resource descriptor type */
+
+extern struct acpi_resource_info acpi_gbl_sm_resource_info[];
+extern struct acpi_resource_info acpi_gbl_lg_resource_info[];
+extern ACPI_GET_RESOURCE_HANDLER acpi_gbl_sm_get_resource_dispatch[];
+extern ACPI_GET_RESOURCE_HANDLER acpi_gbl_lg_get_resource_dispatch[];
+
/*
* Function prototypes called from Acpi* APIs
*/
@@ -66,12 +111,12 @@ acpi_status
acpi_rs_set_srs_method_data(acpi_handle handle, struct acpi_buffer *ret_buffer);
acpi_status
-acpi_rs_create_resource_list(union acpi_operand_object *byte_stream_buffer,
+acpi_rs_create_resource_list(union acpi_operand_object *aml_buffer,
struct acpi_buffer *output_buffer);
acpi_status
-acpi_rs_create_byte_stream(struct acpi_resource *linked_list_buffer,
- struct acpi_buffer *output_buffer);
+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,
@@ -90,184 +135,240 @@ void acpi_rs_dump_irq_list(u8 * route_table);
* rscalc
*/
acpi_status
-acpi_rs_get_byte_stream_start(u8 * byte_stream_buffer,
- u8 ** byte_stream_start, u32 * size);
-
-acpi_status
-acpi_rs_get_list_length(u8 * byte_stream_buffer,
- u32 byte_stream_buffer_length, acpi_size * size_needed);
+acpi_rs_get_list_length(u8 * aml_buffer,
+ u32 aml_buffer_length, acpi_size * size_needed);
acpi_status
-acpi_rs_get_byte_stream_length(struct acpi_resource *linked_list_buffer,
- acpi_size * size_needed);
+acpi_rs_get_aml_length(struct acpi_resource *linked_list_buffer,
+ acpi_size * size_needed);
acpi_status
acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object,
acpi_size * buffer_size_needed);
acpi_status
-acpi_rs_byte_stream_to_list(u8 * byte_stream_buffer,
- u32 byte_stream_buffer_length, u8 * output_buffer);
+acpi_rs_convert_aml_to_resources(u8 * aml_buffer,
+ u32 aml_buffer_length, u8 * output_buffer);
acpi_status
-acpi_rs_list_to_byte_stream(struct acpi_resource *resource,
- acpi_size byte_stream_size_needed,
- u8 * output_buffer);
+acpi_rs_convert_resources_to_aml(struct acpi_resource *resource,
+ acpi_size aml_size_needed, u8 * output_buffer);
+/*
+ * rsio
+ */
acpi_status
-acpi_rs_io_resource(u8 * byte_stream_buffer,
- acpi_size * bytes_consumed,
- u8 ** output_buffer, acpi_size * structure_size);
+acpi_rs_get_io(union aml_resource *aml,
+ u16 aml_resource_length, struct acpi_resource *resource);
acpi_status
-acpi_rs_fixed_io_resource(u8 * byte_stream_buffer,
- acpi_size * bytes_consumed,
- u8 ** output_buffer, acpi_size * structure_size);
+acpi_rs_set_io(struct acpi_resource *resource, union aml_resource *aml);
acpi_status
-acpi_rs_io_stream(struct acpi_resource *resource,
- u8 ** output_buffer, acpi_size * bytes_consumed);
+acpi_rs_get_fixed_io(union aml_resource *aml,
+ u16 aml_resource_length, struct acpi_resource *resource);
acpi_status
-acpi_rs_fixed_io_stream(struct acpi_resource *resource,
- u8 ** output_buffer, acpi_size * bytes_consumed);
+acpi_rs_set_fixed_io(struct acpi_resource *resource, union aml_resource *aml);
acpi_status
-acpi_rs_irq_resource(u8 * byte_stream_buffer,
- acpi_size * bytes_consumed,
- u8 ** output_buffer, acpi_size * structure_size);
+acpi_rs_get_dma(union aml_resource *aml,
+ u16 aml_resource_length, struct acpi_resource *resource);
acpi_status
-acpi_rs_irq_stream(struct acpi_resource *resource,
- u8 ** output_buffer, acpi_size * bytes_consumed);
+acpi_rs_set_dma(struct acpi_resource *resource, union aml_resource *aml);
+/*
+ * rsirq
+ */
acpi_status
-acpi_rs_dma_resource(u8 * byte_stream_buffer,
- acpi_size * bytes_consumed,
- u8 ** output_buffer, acpi_size * structure_size);
+acpi_rs_get_irq(union aml_resource *aml,
+ u16 aml_resource_length, struct acpi_resource *resource);
acpi_status
-acpi_rs_dma_stream(struct acpi_resource *resource,
- u8 ** output_buffer, acpi_size * bytes_consumed);
+acpi_rs_set_irq(struct acpi_resource *resource, union aml_resource *aml);
acpi_status
-acpi_rs_address16_resource(u8 * byte_stream_buffer,
- acpi_size * bytes_consumed,
- u8 ** output_buffer, acpi_size * structure_size);
+acpi_rs_get_ext_irq(union aml_resource *aml,
+ u16 aml_resource_length, struct acpi_resource *resource);
acpi_status
-acpi_rs_address16_stream(struct acpi_resource *resource,
- u8 ** output_buffer, acpi_size * bytes_consumed);
+acpi_rs_set_ext_irq(struct acpi_resource *resource, union aml_resource *aml);
+
+/*
+ * rsaddr
+ */
+acpi_status
+acpi_rs_get_address16(union aml_resource *aml,
+ u16 aml_resource_length, struct acpi_resource *resource);
acpi_status
-acpi_rs_address32_resource(u8 * byte_stream_buffer,
- acpi_size * bytes_consumed,
- u8 ** output_buffer, acpi_size * structure_size);
+acpi_rs_set_address16(struct acpi_resource *resource, union aml_resource *aml);
acpi_status
-acpi_rs_address32_stream(struct acpi_resource *resource,
- u8 ** output_buffer, acpi_size * bytes_consumed);
+acpi_rs_get_address32(union aml_resource *aml,
+ u16 aml_resource_length, struct acpi_resource *resource);
acpi_status
-acpi_rs_address64_resource(u8 * byte_stream_buffer,
- acpi_size * bytes_consumed,
- u8 ** output_buffer, acpi_size * structure_size);
+acpi_rs_set_address32(struct acpi_resource *resource, union aml_resource *aml);
acpi_status
-acpi_rs_address64_stream(struct acpi_resource *resource,
- u8 ** output_buffer, acpi_size * bytes_consumed);
+acpi_rs_get_address64(union aml_resource *aml,
+ u16 aml_resource_length, struct acpi_resource *resource);
acpi_status
-acpi_rs_start_depend_fns_resource(u8 * byte_stream_buffer,
- acpi_size * bytes_consumed,
- u8 ** output_buffer,
- acpi_size * structure_size);
+acpi_rs_set_address64(struct acpi_resource *resource, union aml_resource *aml);
+
+acpi_status
+acpi_rs_get_ext_address64(union aml_resource *aml,
+ u16 aml_resource_length,
+ struct acpi_resource *resource);
+
+acpi_status
+acpi_rs_set_ext_address64(struct acpi_resource *resource,
+ union aml_resource *aml);
+
+/*
+ * rsmemory
+ */
+acpi_status
+acpi_rs_get_memory24(union aml_resource *aml,
+ u16 aml_resource_length, struct acpi_resource *resource);
acpi_status
-acpi_rs_end_depend_fns_resource(u8 * byte_stream_buffer,
- acpi_size * bytes_consumed,
- u8 ** output_buffer,
- acpi_size * structure_size);
+acpi_rs_set_memory24(struct acpi_resource *resource, union aml_resource *aml);
acpi_status
-acpi_rs_start_depend_fns_stream(struct acpi_resource *resource,
- u8 ** output_buffer,
- acpi_size * bytes_consumed);
+acpi_rs_get_memory32(union aml_resource *aml,
+ u16 aml_resource_length, struct acpi_resource *resource);
acpi_status
-acpi_rs_end_depend_fns_stream(struct acpi_resource *resource,
- u8 ** output_buffer, acpi_size * bytes_consumed);
+acpi_rs_set_memory32(struct acpi_resource *resource, union aml_resource *aml);
acpi_status
-acpi_rs_memory24_resource(u8 * byte_stream_buffer,
- acpi_size * bytes_consumed,
- u8 ** output_buffer, acpi_size * structure_size);
+acpi_rs_get_fixed_memory32(union aml_resource *aml,
+ u16 aml_resource_length,
+ struct acpi_resource *resource);
acpi_status
-acpi_rs_memory24_stream(struct acpi_resource *resource,
- u8 ** output_buffer, acpi_size * bytes_consumed);
+acpi_rs_set_fixed_memory32(struct acpi_resource *resource,
+ union aml_resource *aml);
+/*
+ * rsmisc
+ */
acpi_status
-acpi_rs_memory32_range_resource(u8 * byte_stream_buffer,
- acpi_size * bytes_consumed,
- u8 ** output_buffer,
- acpi_size * structure_size);
+acpi_rs_get_generic_reg(union aml_resource *aml,
+ u16 aml_resource_length,
+ struct acpi_resource *resource);
acpi_status
-acpi_rs_fixed_memory32_resource(u8 * byte_stream_buffer,
- acpi_size * bytes_consumed,
- u8 ** output_buffer,
- acpi_size * structure_size);
+acpi_rs_set_generic_reg(struct acpi_resource *resource,
+ union aml_resource *aml);
acpi_status
-acpi_rs_memory32_range_stream(struct acpi_resource *resource,
- u8 ** output_buffer, acpi_size * bytes_consumed);
+acpi_rs_get_vendor(union aml_resource *aml,
+ u16 aml_resource_length, struct acpi_resource *resource);
acpi_status
-acpi_rs_fixed_memory32_stream(struct acpi_resource *resource,
- u8 ** output_buffer, acpi_size * bytes_consumed);
+acpi_rs_set_vendor(struct acpi_resource *resource, union aml_resource *aml);
acpi_status
-acpi_rs_extended_irq_resource(u8 * byte_stream_buffer,
- acpi_size * bytes_consumed,
- u8 ** output_buffer, acpi_size * structure_size);
+acpi_rs_get_start_dpf(union aml_resource *aml,
+ u16 aml_resource_length, struct acpi_resource *resource);
acpi_status
-acpi_rs_extended_irq_stream(struct acpi_resource *resource,
- u8 ** output_buffer, acpi_size * bytes_consumed);
+acpi_rs_set_start_dpf(struct acpi_resource *resource, union aml_resource *aml);
acpi_status
-acpi_rs_end_tag_resource(u8 * byte_stream_buffer,
- acpi_size * bytes_consumed,
- u8 ** output_buffer, acpi_size * structure_size);
+acpi_rs_get_end_dpf(union aml_resource *aml,
+ u16 aml_resource_length, struct acpi_resource *resource);
acpi_status
-acpi_rs_end_tag_stream(struct acpi_resource *resource,
- u8 ** output_buffer, acpi_size * bytes_consumed);
+acpi_rs_set_end_dpf(struct acpi_resource *resource, union aml_resource *aml);
acpi_status
-acpi_rs_vendor_resource(u8 * byte_stream_buffer,
- acpi_size * bytes_consumed,
- u8 ** output_buffer, acpi_size * structure_size);
+acpi_rs_get_end_tag(union aml_resource *aml,
+ u16 aml_resource_length, struct acpi_resource *resource);
acpi_status
-acpi_rs_vendor_stream(struct acpi_resource *resource,
- u8 ** output_buffer, acpi_size * bytes_consumed);
+acpi_rs_set_end_tag(struct acpi_resource *resource, union aml_resource *aml);
+
+/*
+ * rsutils
+ */
+void
+acpi_rs_move_data(void *destination,
+ void *source, u16 item_count, u8 move_type);
+
+/* Types used in move_type above */
+
+#define ACPI_MOVE_TYPE_16_TO_32 0
+#define ACPI_MOVE_TYPE_32_TO_16 1
+#define ACPI_MOVE_TYPE_32_TO_32 2
+#define ACPI_MOVE_TYPE_64_TO_64 3
+
+u16
+acpi_rs_get_resource_source(u16 resource_length,
+ acpi_size minimum_length,
+ struct acpi_resource_source *resource_source,
+ union aml_resource *aml, char *string_ptr);
+
+acpi_size
+acpi_rs_set_resource_source(union aml_resource *aml,
+ acpi_size minimum_length,
+ struct acpi_resource_source *resource_source);
u8 acpi_rs_get_resource_type(u8 resource_start_byte);
+u32 acpi_rs_get_descriptor_length(union aml_resource *aml);
+
+u16 acpi_rs_get_resource_length(union aml_resource *aml);
+
+void
+acpi_rs_set_resource_header(u8 descriptor_type,
+ acpi_size total_length, union aml_resource *aml);
+
+struct acpi_resource_info *acpi_rs_get_resource_info(u8 resource_type);
+
+#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
/*
- * rsmisc
+ * rsdump
*/
-acpi_status
-acpi_rs_generic_register_resource(u8 * byte_stream_buffer,
- acpi_size * bytes_consumed,
- u8 ** output_buffer,
- acpi_size * structure_size);
+void acpi_rs_dump_irq(union acpi_resource_data *resource);
-acpi_status
-acpi_rs_generic_register_stream(struct acpi_resource *resource,
- u8 ** output_buffer,
- acpi_size * bytes_consumed);
+void acpi_rs_dump_address16(union acpi_resource_data *resource);
+
+void acpi_rs_dump_address32(union acpi_resource_data *resource);
+
+void acpi_rs_dump_address64(union acpi_resource_data *resource);
+
+void acpi_rs_dump_ext_address64(union acpi_resource_data *resource);
+
+void acpi_rs_dump_dma(union acpi_resource_data *resource);
+
+void acpi_rs_dump_io(union acpi_resource_data *resource);
+
+void acpi_rs_dump_ext_irq(union acpi_resource_data *resource);
+
+void acpi_rs_dump_fixed_io(union acpi_resource_data *resource);
+
+void acpi_rs_dump_fixed_memory32(union acpi_resource_data *resource);
+
+void acpi_rs_dump_memory24(union acpi_resource_data *resource);
+
+void acpi_rs_dump_memory32(union acpi_resource_data *resource);
+
+void acpi_rs_dump_start_dpf(union acpi_resource_data *resource);
+
+void acpi_rs_dump_vendor(union acpi_resource_data *resource);
+
+void acpi_rs_dump_generic_reg(union acpi_resource_data *resource);
+
+void acpi_rs_dump_end_dpf(union acpi_resource_data *resource);
+
+void acpi_rs_dump_end_tag(union acpi_resource_data *resource);
+
+#endif
#endif /* __ACRESRC_H__ */
diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h
index 1dfa64fae4e..43f7c509317 100644
--- a/include/acpi/actypes.h
+++ b/include/acpi/actypes.h
@@ -978,10 +978,10 @@ struct acpi_mem_space_context {
* Structures used to describe device resources
*/
struct acpi_resource_irq {
- u32 edge_level;
- u32 active_high_low;
- u32 shared_exclusive;
- u32 number_of_interrupts;
+ u32 triggering;
+ u32 polarity;
+ u32 sharable;
+ u32 interrupt_count;
u32 interrupts[1];
};
@@ -989,11 +989,11 @@ struct acpi_resource_dma {
u32 type;
u32 bus_master;
u32 transfer;
- u32 number_of_channels;
+ u32 channel_count;
u32 channels[1];
};
-struct acpi_resource_start_dpf {
+struct acpi_resource_start_dependent {
u32 compatibility_priority;
u32 performance_robustness;
};
@@ -1005,46 +1005,46 @@ struct acpi_resource_start_dpf {
struct acpi_resource_io {
u32 io_decode;
- u32 min_base_address;
- u32 max_base_address;
+ u32 minimum;
+ u32 maximum;
u32 alignment;
- u32 range_length;
+ u32 address_length;
};
struct acpi_resource_fixed_io {
- u32 base_address;
- u32 range_length;
+ u32 address;
+ u32 address_length;
};
struct acpi_resource_vendor {
- u32 length;
- u8 reserved[1];
+ u32 byte_length;
+ u8 byte_data[1];
};
struct acpi_resource_end_tag {
u8 checksum;
};
-struct acpi_resource_mem24 {
+struct acpi_resource_memory24 {
u32 read_write_attribute;
- u32 min_base_address;
- u32 max_base_address;
+ u32 minimum;
+ u32 maximum;
u32 alignment;
- u32 range_length;
+ u32 address_length;
};
-struct acpi_resource_mem32 {
+struct acpi_resource_memory32 {
u32 read_write_attribute;
- u32 min_base_address;
- u32 max_base_address;
+ u32 minimum;
+ u32 maximum;
u32 alignment;
- u32 range_length;
+ u32 address_length;
};
-struct acpi_resource_fixed_mem32 {
+struct acpi_resource_fixed_memory32 {
u32 read_write_attribute;
- u32 range_base_address;
- u32 range_length;
+ u32 address;
+ u32 address_length;
};
struct acpi_memory_attribute {
@@ -1089,93 +1089,105 @@ ACPI_RESOURCE_ADDRESS_COMMON};
struct acpi_resource_address16 {
ACPI_RESOURCE_ADDRESS_COMMON u32 granularity;
- u32 min_address_range;
- u32 max_address_range;
- u32 address_translation_offset;
+ u32 minimum;
+ u32 maximum;
+ u32 translation_offset;
u32 address_length;
struct acpi_resource_source resource_source;
};
struct acpi_resource_address32 {
ACPI_RESOURCE_ADDRESS_COMMON u32 granularity;
- u32 min_address_range;
- u32 max_address_range;
- u32 address_translation_offset;
+ u32 minimum;
+ u32 maximum;
+ u32 translation_offset;
u32 address_length;
struct acpi_resource_source resource_source;
};
struct acpi_resource_address64 {
ACPI_RESOURCE_ADDRESS_COMMON u64 granularity;
- u64 min_address_range;
- u64 max_address_range;
- u64 address_translation_offset;
+ u64 minimum;
+ u64 maximum;
+ u64 translation_offset;
u64 address_length;
- u64 type_specific_attributes;
struct acpi_resource_source resource_source;
};
-struct acpi_resource_ext_irq {
+struct acpi_resource_extended_address64 {
+ ACPI_RESOURCE_ADDRESS_COMMON u64 granularity;
+ u64 minimum;
+ u64 maximum;
+ u64 translation_offset;
+ u64 address_length;
+ u64 type_specific_attributes;
+ u8 revision_iD;
+};
+
+struct acpi_resource_extended_irq {
u32 producer_consumer;
- u32 edge_level;
- u32 active_high_low;
- u32 shared_exclusive;
- u32 number_of_interrupts;
+ u32 triggering;
+ u32 polarity;
+ u32 sharable;
+ u32 interrupt_count;
struct acpi_resource_source resource_source;
u32 interrupts[1];
};
-struct acpi_resource_generic_reg {