diff options
Diffstat (limited to 'drivers/acpi/resources')
-rw-r--r-- | drivers/acpi/resources/Makefile | 10 | ||||
-rw-r--r-- | drivers/acpi/resources/rsaddr.c | 380 | ||||
-rw-r--r-- | drivers/acpi/resources/rscalc.c | 617 | ||||
-rw-r--r-- | drivers/acpi/resources/rscreate.c | 467 | ||||
-rw-r--r-- | drivers/acpi/resources/rsdump.c | 770 | ||||
-rw-r--r-- | drivers/acpi/resources/rsinfo.c | 205 | ||||
-rw-r--r-- | drivers/acpi/resources/rsio.c | 289 | ||||
-rw-r--r-- | drivers/acpi/resources/rsirq.c | 265 | ||||
-rw-r--r-- | drivers/acpi/resources/rslist.c | 202 | ||||
-rw-r--r-- | drivers/acpi/resources/rsmemory.c | 235 | ||||
-rw-r--r-- | drivers/acpi/resources/rsmisc.c | 560 | ||||
-rw-r--r-- | drivers/acpi/resources/rsutils.c | 726 | ||||
-rw-r--r-- | drivers/acpi/resources/rsxface.c | 570 |
13 files changed, 0 insertions, 5296 deletions
diff --git a/drivers/acpi/resources/Makefile b/drivers/acpi/resources/Makefile deleted file mode 100644 index 8de4f69dfa09..000000000000 --- a/drivers/acpi/resources/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -# -# Makefile for all Linux ACPI interpreter subdirectories -# - -obj-y := rsaddr.o rscreate.o rsinfo.o rsio.o rslist.o rsmisc.o rsxface.o \ - rscalc.o rsirq.o rsmemory.o rsutils.o - -obj-$(ACPI_FUTURE_USAGE) += rsdump.o - -EXTRA_CFLAGS += $(ACPI_CFLAGS) diff --git a/drivers/acpi/resources/rsaddr.c b/drivers/acpi/resources/rsaddr.c deleted file mode 100644 index 7f96332822bf..000000000000 --- a/drivers/acpi/resources/rsaddr.c +++ /dev/null @@ -1,380 +0,0 @@ -/******************************************************************************* - * - * Module Name: rsaddr - Address resource descriptors (16/32/64) - * - ******************************************************************************/ - -/* - * Copyright (C) 2000 - 2008, Intel Corp. - * 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. - */ - -#include <acpi/acpi.h> -#include <acpi/acresrc.h> - -#define _COMPONENT ACPI_RESOURCES -ACPI_MODULE_NAME("rsaddr") - -/******************************************************************************* - * - * acpi_rs_convert_address16 - All WORD (16-bit) address resources - * - ******************************************************************************/ -struct acpi_rsconvert_info acpi_rs_convert_address16[5] = { - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_ADDRESS16, - ACPI_RS_SIZE(struct acpi_resource_address16), - ACPI_RSC_TABLE_SIZE(acpi_rs_convert_address16)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_ADDRESS16, - sizeof(struct aml_resource_address16), - 0}, - - /* Resource Type, General Flags, and Type-Specific Flags */ - - {ACPI_RSC_ADDRESS, 0, 0, 0}, - - /* - * These fields are contiguous in both the source and destination: - * Address Granularity - * Address Range Minimum - * Address Range Maximum - * Address Translation Offset - * Address Length - */ - {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.address16.granularity), - AML_OFFSET(address16.granularity), - 5}, - - /* Optional resource_source (Index and String) */ - - {ACPI_RSC_SOURCE, ACPI_RS_OFFSET(data.address16.resource_source), - 0, - sizeof(struct aml_resource_address16)} -}; - -/******************************************************************************* - * - * acpi_rs_convert_address32 - All DWORD (32-bit) address resources - * - ******************************************************************************/ - -struct acpi_rsconvert_info acpi_rs_convert_address32[5] = { - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_ADDRESS32, - ACPI_RS_SIZE(struct acpi_resource_address32), - ACPI_RSC_TABLE_SIZE(acpi_rs_convert_address32)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_ADDRESS32, - sizeof(struct aml_resource_address32), - 0}, - - /* Resource Type, General Flags, and Type-Specific Flags */ - - {ACPI_RSC_ADDRESS, 0, 0, 0}, - - /* - * These fields are contiguous in both the source and destination: - * Address Granularity - * Address Range Minimum - * Address Range Maximum - * Address Translation Offset - * Address Length - */ - {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.address32.granularity), - AML_OFFSET(address32.granularity), - 5}, - - /* Optional resource_source (Index and String) */ - - {ACPI_RSC_SOURCE, ACPI_RS_OFFSET(data.address32.resource_source), - 0, - sizeof(struct aml_resource_address32)} -}; - -/******************************************************************************* - * - * acpi_rs_convert_address64 - All QWORD (64-bit) address resources - * - ******************************************************************************/ - -struct acpi_rsconvert_info acpi_rs_convert_address64[5] = { - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_ADDRESS64, - ACPI_RS_SIZE(struct acpi_resource_address64), - ACPI_RSC_TABLE_SIZE(acpi_rs_convert_address64)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_ADDRESS64, - sizeof(struct aml_resource_address64), - 0}, - - /* Resource Type, General Flags, and Type-Specific Flags */ - - {ACPI_RSC_ADDRESS, 0, 0, 0}, - - /* - * These fields are contiguous in both the source and destination: - * Address Granularity - * Address Range Minimum - * Address Range Maximum - * Address Translation Offset - * Address Length - */ - {ACPI_RSC_MOVE64, ACPI_RS_OFFSET(data.address64.granularity), - AML_OFFSET(address64.granularity), - 5}, - - /* Optional resource_source (Index and String) */ - - {ACPI_RSC_SOURCE, ACPI_RS_OFFSET(data.address64.resource_source), - 0, - sizeof(struct aml_resource_address64)} -}; - -/******************************************************************************* - * - * acpi_rs_convert_ext_address64 - All Extended (64-bit) address resources - * - ******************************************************************************/ - -struct acpi_rsconvert_info acpi_rs_convert_ext_address64[5] = { - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64, - ACPI_RS_SIZE(struct acpi_resource_extended_address64), - ACPI_RSC_TABLE_SIZE(acpi_rs_convert_ext_address64)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64, - sizeof(struct aml_resource_extended_address64), - 0}, - - /* Resource Type, General Flags, and Type-Specific Flags */ - - {ACPI_RSC_ADDRESS, 0, 0, 0}, - - /* Revision ID */ - - {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.ext_address64.revision_iD), - AML_OFFSET(ext_address64.revision_iD), - 1}, - /* - * These fields are contiguous in both the source and destination: - * Address Granularity - * Address Range Minimum - * Address Range Maximum - * Address Translation Offset - * Address Length - * Type-Specific Attribute - */ - {ACPI_RSC_MOVE64, ACPI_RS_OFFSET(data.ext_address64.granularity), - AML_OFFSET(ext_address64.granularity), - 6} -}; - -/******************************************************************************* - * - * acpi_rs_convert_general_flags - Flags common to all address descriptors - * - ******************************************************************************/ - -static struct acpi_rsconvert_info acpi_rs_convert_general_flags[6] = { - {ACPI_RSC_FLAGINIT, 0, AML_OFFSET(address.flags), - ACPI_RSC_TABLE_SIZE(acpi_rs_convert_general_flags)}, - - /* Resource Type (Memory, Io, bus_number, etc.) */ - - {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.address.resource_type), - AML_OFFSET(address.resource_type), - 1}, - - /* General Flags - Consume, Decode, min_fixed, max_fixed */ - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.address.producer_consumer), - AML_OFFSET(address.flags), - 0}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.address.decode), - AML_OFFSET(address.flags), - 1}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.address.min_address_fixed), - AML_OFFSET(address.flags), - 2}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.address.max_address_fixed), - AML_OFFSET(address.flags), - 3} -}; - -/******************************************************************************* - * - * acpi_rs_convert_mem_flags - Flags common to Memory address descriptors - * - ******************************************************************************/ - -static struct acpi_rsconvert_info acpi_rs_convert_mem_flags[5] = { - {ACPI_RSC_FLAGINIT, 0, AML_OFFSET(address.specific_flags), - ACPI_RSC_TABLE_SIZE(acpi_rs_convert_mem_flags)}, - - /* Memory-specific flags */ - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.address.info.mem.write_protect), - AML_OFFSET(address.specific_flags), - 0}, - - {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.address.info.mem.caching), - AML_OFFSET(address.specific_flags), - 1}, - - {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.address.info.mem.range_type), - AML_OFFSET(address.specific_flags), - 3}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.address.info.mem.translation), - AML_OFFSET(address.specific_flags), - 5} -}; - -/******************************************************************************* - * - * acpi_rs_convert_io_flags - Flags common to I/O address descriptors - * - ******************************************************************************/ - -static struct acpi_rsconvert_info acpi_rs_convert_io_flags[4] = { - {ACPI_RSC_FLAGINIT, 0, AML_OFFSET(address.specific_flags), - ACPI_RSC_TABLE_SIZE(acpi_rs_convert_io_flags)}, - - /* I/O-specific flags */ - - {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.address.info.io.range_type), - AML_OFFSET(address.specific_flags), - 0}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.address.info.io.translation), - AML_OFFSET(address.specific_flags), - 4}, - - {ACPI_RSC_1BITFLAG, - ACPI_RS_OFFSET(data.address.info.io.translation_type), - AML_OFFSET(address.specific_flags), - 5} -}; - -/******************************************************************************* - * - * FUNCTION: acpi_rs_get_address_common - * - * PARAMETERS: Resource - Pointer to the internal resource struct - * Aml - Pointer to the AML resource descriptor - * - * RETURN: TRUE if the resource_type field is OK, FALSE otherwise - * - * DESCRIPTION: Convert common flag fields from a raw AML resource descriptor - * to an internal resource descriptor - * - ******************************************************************************/ - -u8 -acpi_rs_get_address_common(struct acpi_resource *resource, - union aml_resource *aml) -{ - ACPI_FUNCTION_ENTRY(); - - /* Validate the Resource Type */ - - if ((aml->address.resource_type > 2) - && (aml->address.resource_type < 0xC0)) { - return (FALSE); - } - - /* Get the Resource Type and General Flags */ - - (void)acpi_rs_convert_aml_to_resource(resource, aml, - acpi_rs_convert_general_flags); - - /* Get the Type-Specific Flags (Memory and I/O descriptors only) */ - - if (resource->data.address.resource_type == ACPI_MEMORY_RANGE) { - (void)acpi_rs_convert_aml_to_resource(resource, aml, - acpi_rs_convert_mem_flags); - } else if (resource->data.address.resource_type == ACPI_IO_RANGE) { - (void)acpi_rs_convert_aml_to_resource(resource, aml, - acpi_rs_convert_io_flags); - } else { - /* Generic resource type, just grab the type_specific byte */ - - resource->data.address.info.type_specific = - aml->address.specific_flags; - } - - return (TRUE); -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_set_address_common - * - * PARAMETERS: Aml - Pointer to the AML resource descriptor - * Resource - Pointer to the internal resource struct - * - * RETURN: None - * - * DESCRIPTION: Convert common flag fields from a resource descriptor to an - * AML descriptor - * - ******************************************************************************/ - -void -acpi_rs_set_address_common(union aml_resource *aml, - struct acpi_resource *resource) -{ - ACPI_FUNCTION_ENTRY(); - - /* Set the Resource Type and General Flags */ - - (void)acpi_rs_convert_resource_to_aml(resource, aml, - acpi_rs_convert_general_flags); - - /* Set the Type-Specific Flags (Memory and I/O descriptors only) */ - - if (resource->data.address.resource_type == ACPI_MEMORY_RANGE) { - (void)acpi_rs_convert_resource_to_aml(resource, aml, - acpi_rs_convert_mem_flags); - } else if (resource->data.address.resource_type == ACPI_IO_RANGE) { - (void)acpi_rs_convert_resource_to_aml(resource, aml, - acpi_rs_convert_io_flags); - } else { - /* Generic resource type, just copy the type_specific byte */ - - aml->address.specific_flags = - resource->data.address.info.type_specific; - } -} diff --git a/drivers/acpi/resources/rscalc.c b/drivers/acpi/resources/rscalc.c deleted file mode 100644 index 8eaaecf92009..000000000000 --- a/drivers/acpi/resources/rscalc.c +++ /dev/null @@ -1,617 +0,0 @@ -/******************************************************************************* - * - * Module Name: rscalc - Calculate stream and list lengths - * - ******************************************************************************/ - -/* - * Copyright (C) 2000 - 2008, Intel Corp. - * 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. - */ - -#include <acpi/acpi.h> -#include <acpi/acresrc.h> -#include <acpi/acnamesp.h> - -#define _COMPONENT ACPI_RESOURCES -ACPI_MODULE_NAME("rscalc") - -/* Local prototypes */ -static u8 acpi_rs_count_set_bits(u16 bit_field); - -static acpi_rs_length -acpi_rs_struct_option_length(struct acpi_resource_source *resource_source); - -static u32 -acpi_rs_stream_option_length(u32 resource_length, u32 minimum_total_length); - -/******************************************************************************* - * - * FUNCTION: acpi_rs_count_set_bits - * - * PARAMETERS: bit_field - Field in which to count bits - * - * RETURN: Number of bits set within the field - * - * DESCRIPTION: Count the number of bits set in a resource field. Used for - * (Short descriptor) interrupt and DMA lists. - * - ******************************************************************************/ - -static u8 acpi_rs_count_set_bits(u16 bit_field) -{ - u8 bits_set; - - ACPI_FUNCTION_ENTRY(); - - for (bits_set = 0; bit_field; bits_set++) { - - /* Zero the least significant bit that is set */ - - bit_field &= (u16) (bit_field - 1); - } - - return bits_set; -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_struct_option_length - * - * PARAMETERS: resource_source - Pointer to optional descriptor field - * - * RETURN: Status - * - * DESCRIPTION: Common code to handle optional resource_source_index and - * resource_source fields in some Large descriptors. Used during - * list-to-stream conversion - * - ******************************************************************************/ - -static acpi_rs_length -acpi_rs_struct_option_length(struct acpi_resource_source *resource_source) -{ - ACPI_FUNCTION_ENTRY(); - - /* - * If the resource_source string is valid, return the size of the string - * (string_length includes the NULL terminator) plus the size of the - * resource_source_index (1). - */ - if (resource_source->string_ptr) { - return ((acpi_rs_length) (resource_source->string_length + 1)); - } - - return (0); -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_stream_option_length - * - * PARAMETERS: resource_length - Length from the resource header - * minimum_total_length - Minimum length of this resource, before - * any optional fields. Includes header size - * - * RETURN: Length of optional string (0 if no string present) - * - * DESCRIPTION: Common code to handle optional resource_source_index and - * resource_source fields in some Large descriptors. Used during - * stream-to-list conversion - * - ******************************************************************************/ - -static u32 -acpi_rs_stream_option_length(u32 resource_length, - u32 minimum_aml_resource_length) -{ - u32 string_length = 0; - - ACPI_FUNCTION_ENTRY(); - - /* - * The resource_source_index and resource_source are optional elements of some - * Large-type resource descriptors. - */ - - /* - * If the length of the actual resource descriptor is greater than the ACPI - * spec-defined minimum length, it means that a resource_source_index exists - * and is followed by a (required) null terminated string. The string length - * (including the null terminator) is the resource length minus the minimum - * length, minus one byte for the resource_source_index itself. - */ - if (resource_length > minimum_aml_resource_length) { - - /* Compute the length of the optional string */ - - string_length = - resource_length - minimum_aml_resource_length - 1; - } - - /* - * Round the length up to a multiple of the native word in order to - * guarantee that the entire resource descriptor is native word aligned - */ - return ((u32) ACPI_ROUND_UP_TO_NATIVE_WORD(string_length)); -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_get_aml_length - * - * PARAMETERS: Resource - Pointer to the resource linked list - * size_needed - Where the required size is returned - * - * RETURN: Status - * - * DESCRIPTION: Takes a linked list of internal resource descriptors and - * calculates the size buffer needed to hold the corresponding - * external resource byte stream. - * - ******************************************************************************/ - -acpi_status -acpi_rs_get_aml_length(struct acpi_resource * resource, acpi_size * size_needed) -{ - acpi_size aml_size_needed = 0; - acpi_rs_length total_size; - - ACPI_FUNCTION_TRACE(rs_get_aml_length); - - /* Traverse entire list of internal resource descriptors */ - - while (resource) { - - /* Validate the descriptor type */ - - if (resource->type > ACPI_RESOURCE_TYPE_MAX) { - return_ACPI_STATUS(AE_AML_INVALID_RESOURCE_TYPE); - } - - /* Get the base size of the (external stream) resource descriptor */ - - total_size = acpi_gbl_aml_resource_sizes[resource->type]; - - /* - * Augment the base size for descriptors with optional and/or - * variable-length fields - */ - switch (resource->type) { - case ACPI_RESOURCE_TYPE_IRQ: - - /* Length can be 3 or 2 */ - - if (resource->data.irq.descriptor_length == 2) { - total_size--; - } - break; - - case ACPI_RESOURCE_TYPE_START_DEPENDENT: - - /* Length can be 1 or 0 */ - - if (resource->data.irq.descriptor_length == 0) { - total_size--; - } - break; - - case ACPI_RESOURCE_TYPE_VENDOR: - /* - * Vendor Defined Resource: - * For a Vendor Specific resource, if the Length is between 1 and 7 - * it will be created as a Small Resource data type, otherwise it - * is a Large Resource data type. - */ - if (resource->data.vendor.byte_length > 7) { - - /* Base size of a Large resource descriptor */ - - total_size = - sizeof(struct aml_resource_large_header); - } - - /* Add the size of the vendor-specific data */ - - total_size = (acpi_rs_length) - (total_size + resource->data.vendor.byte_length); - break; - - case ACPI_RESOURCE_TYPE_END_TAG: - /* - * End Tag: - * We are done -- return the accumulated total size. - */ - *size_needed = aml_size_needed + total_size; - - /* Normal exit */ - - return_ACPI_STATUS(AE_OK); - - case ACPI_RESOURCE_TYPE_ADDRESS16: - /* - * 16-Bit Address Resource: - * Add the size of the optional resource_source info - */ - total_size = (acpi_rs_length) - (total_size + - acpi_rs_struct_option_length(&resource->data. - address16. - resource_source)); - break; - - case ACPI_RESOURCE_TYPE_ADDRESS32: - /* - * 32-Bit Address Resource: - * Add the size of the optional resource_source info - */ - total_size = (acpi_rs_length) - (total_size + - acpi_rs_struct_option_length(&resource->data. - address32. - resource_source)); - break; - - case ACPI_RESOURCE_TYPE_ADDRESS64: - /* - * 64-Bit Address Resource: - * Add the size of the optional resource_source info - */ - total_size = (acpi_rs_length) - (total_size + - acpi_rs_struct_option_length(&resource->data. - address64. - resource_source)); - break; - - case ACPI_RESOURCE_TYPE_EXTENDED_IRQ: - /* - * Extended IRQ Resource: - * Add the size of each additional optional interrupt beyond the - * required 1 (4 bytes for each u32 interrupt number) - */ - total_size = (acpi_rs_length) - (total_size + - ((resource->data.extended_irq.interrupt_count - - 1) * 4) + - /* Add the size of the optional resource_source info */ - acpi_rs_struct_option_length(&resource->data. - extended_irq. - resource_source)); - break; - - default: - break; - } - - /* Update the total */ - - aml_size_needed += total_size; - - /* Point to the next object */ - - resource = - ACPI_ADD_PTR(struct acpi_resource, resource, - resource->length); - } - - /* Did not find an end_tag resource descriptor */ - - return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG); -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_get_list_length - * - * PARAMETERS: aml_buffer - Pointer to the resource byte stream - * aml_buffer_length - Size of aml_buffer - * size_needed - Where the size needed is returned - * - * RETURN: Status - * - * DESCRIPTION: Takes an external resource byte stream and calculates the size - * buffer needed to hold the corresponding internal resource - * descriptor linked list. - * - ******************************************************************************/ - -acpi_status -acpi_rs_get_list_length(u8 * aml_buffer, - u32 aml_buffer_length, acpi_size * size_needed) -{ - acpi_status status; - u8 *end_aml; - u8 *buffer; - u32 buffer_size; - u16 temp16; - u16 resource_length; - u32 extra_struct_bytes; - u8 resource_index; - u8 minimum_aml_resource_length; - - ACPI_FUNCTION_TRACE(rs_get_list_length); - - *size_needed = 0; - end_aml = aml_buffer + aml_buffer_length; - - /* Walk the list of AML resource descriptors */ - - while (aml_buffer < end_aml) { - - /* Validate the Resource Type and Resource Length */ - - status = acpi_ut_validate_resource(aml_buffer, &resource_index); - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); - } - - /* Get the resource length and base (minimum) AML size */ - - resource_length = acpi_ut_get_resource_length(aml_buffer); - minimum_aml_resource_length = - acpi_gbl_resource_aml_sizes[resource_index]; - - /* - * Augment the size for descriptors with optional - * and/or variable length fields - */ - extra_struct_bytes = 0; - buffer = - aml_buffer + acpi_ut_get_resource_header_length(aml_buffer); - - switch (acpi_ut_get_resource_type(aml_buffer)) { - case ACPI_RESOURCE_NAME_IRQ: - /* - * IRQ Resource: - * Get the number of bits set in the 16-bit IRQ mask - */ - ACPI_MOVE_16_TO_16(&temp16, buffer); - extra_struct_bytes = acpi_rs_count_set_bits(temp16); - break; - - case ACPI_RESOURCE_NAME_DMA: - /* - * DMA Resource: - * Get the number of bits set in the 8-bit DMA mask - */ - extra_struct_bytes = acpi_rs_count_set_bits(*buffer); - break; - - case ACPI_RESOURCE_NAME_VENDOR_SMALL: - case ACPI_RESOURCE_NAME_VENDOR_LARGE: - /* - * Vendor Resource: - * Get the number of vendor data bytes - */ - extra_struct_bytes = resource_length; - break; - - case ACPI_RESOURCE_NAME_END_TAG: - /* - * End Tag: - * This is the normal exit, add size of end_tag - */ - *size_needed += ACPI_RS_SIZE_MIN; - return_ACPI_STATUS(AE_OK); - - case ACPI_RESOURCE_NAME_ADDRESS32: - case ACPI_RESOURCE_NAME_ADDRESS16: - case ACPI_RESOURCE_NAME_ADDRESS64: - /* - * Address Resource: - * Add the size of the optional resource_source - */ - extra_struct_bytes = - acpi_rs_stream_option_length(resource_length, - minimum_aml_resource_length); - break; - - case ACPI_RESOURCE_NAME_EXTENDED_IRQ: - /* - * Extended IRQ Resource: - * Using the interrupt_table_length, add 4 bytes for each additional - * interrupt. Note: at least one interrupt is required and is - * included in the minimum descriptor size (reason for the -1) - */ - extra_struct_bytes = (buffer[1] - 1) * sizeof(u32); - - /* Add the size of the optional resource_source */ - - extra_struct_bytes += - acpi_rs_stream_option_length(resource_length - - extra_struct_bytes, - minimum_aml_resource_length); - break; - - default: - break; - } - - /* - * Update the required buffer size for the internal descriptor structs - * - * Important: Round the size up for the appropriate alignment. This - * is a requirement on IA64. - */ - buffer_size = acpi_gbl_resource_struct_sizes[resource_index] + - extra_struct_bytes; - buffer_size = (u32) ACPI_ROUND_UP_TO_NATIVE_WORD(buffer_size); - - *size_needed += buffer_size; - - ACPI_DEBUG_PRINT((ACPI_DB_RESOURCES, - "Type %.2X, AmlLength %.2X InternalLength %.2X\n", - acpi_ut_get_resource_type(aml_buffer), - acpi_ut_get_descriptor_length(aml_buffer), - buffer_size)); - - /* - * Point to the next resource within the AML stream using the length - * contained in the resource descriptor header - */ - aml_buffer += acpi_ut_get_descriptor_length(aml_buffer); - } - - /* Did not find an end_tag resource descriptor */ - - return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG); -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_get_pci_routing_table_length - * - * PARAMETERS: package_object - Pointer to the package object - * buffer_size_needed - u32 pointer of the size buffer - * needed to properly return the - * parsed data - * - * RETURN: Status - * - * DESCRIPTION: Given a package representing a PCI routing table, this - * calculates the size of the corresponding linked list of - * descriptions. - * - ******************************************************************************/ - -acpi_status -acpi_rs_get_pci_routing_table_length(union acpi_operand_object *package_object, - acpi_size * buffer_size_needed) -{ - u32 number_of_elements; - acpi_size temp_size_needed = 0; - union acpi_operand_object **top_object_list; - u32 index; - union acpi_operand_object *package_element; - union acpi_operand_object **sub_object_list; - u8 name_found; - u32 table_index; - - ACPI_FUNCTION_TRACE(rs_get_pci_routing_table_length); - - number_of_elements = package_object->package.count; - - /* - * Calculate the size of the return buffer. - * The base size is the number of elements * the sizes of the - * structures. Additional space for the strings is added below. - * The minus one is to subtract the size of the u8 Source[1] - * member because it is added below. - * - * But each PRT_ENTRY structure has a pointer to a string and - * the size of that string must be found. - */ - top_object_list = package_object->package.elements; - - for (index = 0; index < number_of_elements; index++) { - - /* Dereference the sub-package */ - - package_element = *top_object_list; - - /* - * The sub_object_list will now point to an array of the - * four IRQ elements: Address, Pin, Source and source_index - */ - sub_object_list = package_element->package.elements; - - /* Scan the irq_table_elements for the Source Name String */ - - name_found = FALSE; - - for (table_index = 0; table_index < 4 && !name_found; - table_index++) { - if (*sub_object_list && /* Null object allowed */ - ((ACPI_TYPE_STRING == - ACPI_GET_OBJECT_TYPE(*sub_object_list)) || - ((ACPI_TYPE_LOCAL_REFERENCE == - ACPI_GET_OBJECT_TYPE(*sub_object_list)) && - ((*sub_object_list)->reference.class == - ACPI_REFCLASS_NAME)))) { - name_found = TRUE; - } else { - /* Look at the next element */ - - sub_object_list++; - } - } - - temp_size_needed += (sizeof(struct acpi_pci_routing_table) - 4); - - /* Was a String type found? */ - - if (name_found) { - if (ACPI_GET_OBJECT_TYPE(*sub_object_list) == - ACPI_TYPE_STRING) { - /* - * The length String.Length field does not include the - * terminating NULL, add 1 - */ - temp_size_needed += ((acpi_size) - (*sub_object_list)->string. - length + 1); - } else { - temp_size_needed += - acpi_ns_get_pathname_length((*sub_object_list)->reference.node); - if (!temp_size_needed) { - return_ACPI_STATUS(AE_BAD_PARAMETER); - } - } - } else { - /* - * If no name was found, then this is a NULL, which is - * translated as a u32 zero. - */ - temp_size_needed += sizeof(u32); - } - - /* Round up the size since each element must be aligned */ - - temp_size_needed = ACPI_ROUND_UP_TO_64BIT(temp_size_needed); - - /* Point to the next union acpi_operand_object */ - - top_object_list++; - } - - /* - * Add an extra element to the end of the list, essentially a - * NULL terminator - */ - *buffer_size_needed = - temp_size_needed + sizeof(struct acpi_pci_routing_table); - return_ACPI_STATUS(AE_OK); -} diff --git a/drivers/acpi/resources/rscreate.c b/drivers/acpi/resources/rscreate.c deleted file mode 100644 index 08b8d73e6ee5..000000000000 --- a/drivers/acpi/resources/rscreate.c +++ /dev/null @@ -1,467 +0,0 @@ -/******************************************************************************* - * - * Module Name: rscreate - Create resource lists/tables - * - ******************************************************************************/ - -/* - * Copyright (C) 2000 - 2008, Intel Corp. - * 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. - */ - -#include <acpi/acpi.h> -#include <acpi/acresrc.h> -#include <acpi/acnamesp.h> - -#define _COMPONENT ACPI_RESOURCES -ACPI_MODULE_NAME("rscreate") - -/******************************************************************************* - * - * FUNCTION: acpi_rs_create_resource_list - * - * PARAMETERS: aml_buffer - Pointer to the resource byte stream - * output_buffer - Pointer to the user's buffer - * - * RETURN: Status: AE_OK if okay, else a valid acpi_status code - * If output_buffer is not large enough, output_buffer_length - * indicates how large output_buffer should be, else it - * indicates how may u8 elements of output_buffer are valid. - * - * DESCRIPTION: Takes the byte stream returned from a _CRS, _PRS control method - * execution and parses the stream to create a linked list - * of device resources. - * - ******************************************************************************/ -acpi_status -acpi_rs_create_resource_list(union acpi_operand_object *aml_buffer, - struct acpi_buffer *output_buffer) -{ - - acpi_status status; - u8 *aml_start; - acpi_size list_size_needed = 0; - u32 aml_buffer_length; - void *resource; - - ACPI_FUNCTION_TRACE(rs_create_resource_list); - - ACPI_DEBUG_PRINT((ACPI_DB_INFO, "AmlBuffer = %p\n", aml_buffer)); - - /* Params already validated, so we don't re-validate here */ - - aml_buffer_length = aml_buffer->buffer.length; - aml_start = aml_buffer->buffer.pointer; - - /* - * Pass the aml_buffer into a module that can calculate - * the buffer size needed for the linked list - */ - status = acpi_rs_get_list_length(aml_start, aml_buffer_length, - &list_size_needed); - - ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Status=%X ListSizeNeeded=%X\n", - status, (u32) list_size_needed)); - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); - } - - /* Validate/Allocate/Clear caller buffer */ - - status = acpi_ut_initialize_buffer(output_buffer, list_size_needed); - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); - } - - /* Do the conversion */ - - resource = output_buffer->pointer; - status = acpi_ut_walk_aml_resources(aml_start, aml_buffer_length, - acpi_rs_convert_aml_to_resources, - &resource); - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); - } - - ACPI_DEBUG_PRINT((ACPI_DB_INFO, "OutputBuffer %p Length %X\n", - output_buffer->pointer, (u32) output_buffer->length)); - return_ACPI_STATUS(AE_OK); -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_create_pci_routing_table - * - * PARAMETERS: package_object - Pointer to a union acpi_operand_object - * package - * output_buffer - Pointer to the user's buffer - * - * RETURN: Status AE_OK if okay, else a valid acpi_status code. - * If the output_buffer is too small, the error will be - * AE_BUFFER_OVERFLOW and output_buffer->Length will point - * to the size buffer needed. - * - * DESCRIPTION: Takes the union acpi_operand_object package and creates a - * linked list of PCI interrupt descriptions - * - * NOTE: It is the caller's responsibility to ensure that the start of the - * output buffer is aligned properly (if necessary). - * - ******************************************************************************/ - -acpi_status -acpi_rs_create_pci_routing_table(union acpi_operand_object *package_object, - struct acpi_buffer *output_buffer) -{ - u8 *buffer; - union acpi_operand_object **top_object_list; - union acpi_operand_object **sub_object_list; - union acpi_operand_object *obj_desc; - acpi_size buffer_size_needed = 0; - u32 number_of_elements; - u32 index; - struct acpi_pci_routing_table *user_prt; - struct acpi_namespace_node *node; - acpi_status status; - struct acpi_buffer path_buffer; - - ACPI_FUNCTION_TRACE(rs_create_pci_routing_table); - - /* Params already validated, so we don't re-validate here */ - - /* Get the required buffer length */ - - status = acpi_rs_get_pci_routing_table_length(package_object, - &buffer_size_needed); - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); - } - - ACPI_DEBUG_PRINT((ACPI_DB_INFO, "BufferSizeNeeded = %X\n", - (u32) buffer_size_needed)); - - /* Validate/Allocate/Clear caller buffer */ - - status = acpi_ut_initialize_buffer(output_buffer, buffer_size_needed); - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); - } - - /* - * Loop through the ACPI_INTERNAL_OBJECTS - Each object should be a - * package that in turn contains an acpi_integer Address, a u8 Pin, - * a Name, and a u8 source_index. - */ - top_object_list = package_object->package.elements; - number_of_elements = package_object->package.count; - buffer = output_buffer->pointer; - user_prt = ACPI_CAST_PTR(struct acpi_pci_routing_table, buffer); - - for (index = 0; index < number_of_elements; index++) { - int source_name_index = 2; - int source_index_index = 3; - - /* - * Point user_prt past this current structure - * - * NOTE: On the first iteration, user_prt->Length will - * be zero because we cleared the return buffer earlier - */ - buffer += user_prt->length; - user_prt = ACPI_CAST_PTR(struct acpi_pci_routing_table, buffer); - - /* - * Fill in the Length field with the information we have at this point. - * The minus four is to subtract the size of the u8 Source[4] member - * because it is added below. - */ - user_prt->length = (sizeof(struct acpi_pci_routing_table) - 4); - - /* Each element of the top-level package must also be a package */ - - if (ACPI_GET_OBJECT_TYPE(*top_object_list) != ACPI_TYPE_PACKAGE) { - ACPI_ERROR((AE_INFO, - "(PRT[%X]) Need sub-package, found %s", - index, - acpi_ut_get_object_type_name - (*top_object_list))); - return_ACPI_STATUS(AE_AML_OPERAND_TYPE); - } - - /* Each sub-package must be of length 4 */ - - if ((*top_object_list)->package.count != 4) { - ACPI_ERROR((AE_INFO, - "(PRT[%X]) Need package of length 4, found length %d", - index, (*top_object_list)->package.count)); - return_ACPI_STATUS(AE_AML_PACKAGE_LIMIT); - } - - /* - * Dereference the sub-package. - * The sub_object_list will now point to an array of the four IRQ - * elements: [Address, Pin, Source, source_index] - */ - sub_object_list = (*top_object_list)->package.elements; - - /* 1) First subobject: Dereference the PRT.Address */ - - obj_desc = sub_object_list[0]; - if (ACPI_GET_OBJECT_TYPE(obj_desc) != ACPI_TYPE_INTEGER) { - ACPI_ERROR((AE_INFO, - "(PRT[%X].Address) Need Integer, found %s", - index, - acpi_ut_get_object_type_name(obj_desc))); - return_ACPI_STATUS(AE_BAD_DATA); - } - - user_prt->address = obj_desc->integer.value; - - /* 2) Second subobject: Dereference the PRT.Pin */ - - obj_desc = sub_object_list[1]; - if (ACPI_GET_OBJECT_TYPE(obj_desc) != ACPI_TYPE_INTEGER) { - ACPI_ERROR((AE_INFO, - "(PRT[%X].Pin) Need Integer, found %s", - index, - acpi_ut_get_object_type_name(obj_desc))); - return_ACPI_STATUS(AE_BAD_DATA); - } - - /* - * If BIOS erroneously reversed the _PRT source_name and source_index, - * then reverse them back. - */ - if (ACPI_GET_OBJECT_TYPE(sub_object_list[3]) != - ACPI_TYPE_INTEGER) { - if (acpi_gbl_enable_interpreter_slack) { - source_name_index = 3; - source_index_index = 2; - printk(KERN_WARNING - "ACPI: Handling Garbled _PRT entry\n"); - } else { - ACPI_ERROR((AE_INFO, - "(PRT[%X].source_index) Need Integer, found %s", - index, - acpi_ut_get_object_type_name - (sub_object_list[3]))); - return_ACPI_STATUS(AE_BAD_DATA); - } - } - - user_prt->pin = (u32) obj_desc->integer.value; - - /* - * If the BIOS has erroneously reversed the _PRT source_name (index 2) - * and the source_index (index 3), fix it. _PRT is important enough to - * workaround this BIOS error. This also provides compatibility with - * other ACPI implementations. - */ - obj_desc = sub_object_list[3]; - if (!obj_desc - || (ACPI_GET_OBJECT_TYPE(obj_desc) != ACPI_TYPE_INTEGER)) { - sub_object_list[3] = sub_object_list[2]; - sub_object_list[2] = obj_desc; - - ACPI_WARNING((AE_INFO, - "(PRT[%X].Source) SourceName and SourceIndex are reversed, fixed", - index)); - } - - /* - * 3) Third subobject: Dereference the PRT.source_name - * The name may be unresolved (slack mode), so allow a null object - */ - obj_desc = sub_object_list[source_name_index]; - if (obj_desc) { - switch (ACPI_GET_OBJECT_TYPE(obj_desc)) { - case ACPI_TYPE_LOCAL_REFERENCE: - - if (obj_desc->reference.class != - ACPI_REFCLASS_NAME) { - ACPI_ERROR((AE_INFO, - "(PRT[%X].Source) Need name, found Reference Class %X", - index, - obj_desc->reference.class)); - return_ACPI_STATUS(AE_BAD_DATA); - } - - node = obj_desc->reference.node; - - /* Use *remaining* length of the buffer as max for pathname */ - - path_buffer.length = output_buffer->length - - (u32) ((u8 *) user_prt->source - - (u8 *) output_buffer->pointer); - path_buffer.pointer = user_prt->source; - - status = - acpi_ns_handle_to_pathname((acpi_handle) - node, - &path_buffer); - - /* +1 to include null terminator */ - - user_prt->length += - (u32) ACPI_STRLEN(user_prt->source) + 1; - break; - - case ACPI_TYPE_STRING: - - ACPI_STRCPY(user_prt->source, - obj_desc->string.pointer); - - /* - * Add to the Length field the length of the string - * (add 1 for terminator) - */ - user_prt->length += obj_desc->string.length + 1; - break; - - case ACPI_TYPE_INTEGER: - /* - * If this is a number, then the Source Name is NULL, since the - * entire buffer was zeroed out, we can leave this alone. - * - * Add to the Length field the length of the u32 NULL - */ - user_prt->length += sizeof(u32); - break; - - default: - - ACPI_ERROR((AE_INFO, - "(PRT[%X].Source) Need Ref/String/Integer, found %s", - index, - acpi_ut_get_object_type_name - (obj_desc))); - return_ACPI_STATUS(AE_BAD_DATA); - } - } - - /* Now align the current length */ - - user_prt->length = - (u32) ACPI_ROUND_UP_TO_64BIT(user_prt->length); - - /* 4) Fourth subobject: Dereference the PRT.source_index */ - - obj_desc = sub_object_list[source_index_index]; - if (ACPI_GET_OBJECT_TYPE(obj_desc) != ACPI_TYPE_INTEGER) { - ACPI_ERROR((AE_INFO, - "(PRT[%X].SourceIndex) Need Integer, found %s", - index, - acpi_ut_get_object_type_name(obj_desc))); - return_ACPI_STATUS(AE_BAD_DATA); - } - - user_prt->source_index = (u32) obj_desc->integer.value; - - /* Point to the next union acpi_operand_object in the top level package */ - - top_object_list++; - } - - ACPI_DEBUG_PRINT((ACPI_DB_INFO, "OutputBuffer %p Length %X\n", - output_buffer->pointer, (u32) output_buffer->length)); - return_ACPI_STATUS(AE_OK); -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_create_aml_resources - * - * PARAMETERS: linked_list_buffer - Pointer to the resource linked list - * output_buffer - Pointer to the user's buffer - * - * RETURN: Status AE_OK if okay, else a valid acpi_status code. - * If the output_buffer is too small, the error will be - * AE_BUFFER_OVERFLOW and output_buffer->Length will point - * to the size buffer needed. - * - * DESCRIPTION: Takes the linked list of device resources and - * creates a bytestream to be used as input for the - * _SRS control method. - * - ******************************************************************************/ - -acpi_status -acpi_rs_create_aml_resources(struct acpi_resource *linked_list_buffer, - struct acpi_buffer *output_buffer) -{ - acpi_status status; - acpi_size aml_size_needed = 0; - - ACPI_FUNCTION_TRACE(rs_create_aml_resources); - - ACPI_DEBUG_PRINT((ACPI_DB_INFO, "LinkedListBuffer = %p\n", - linked_list_buffer)); - - /* - * Params already validated, so we don't re-validate here - * - * Pass the linked_list_buffer into a module that calculates - * the buffer size needed for the byte stream. - */ - status = acpi_rs_get_aml_length(linked_list_buffer, &aml_size_needed); - - ACPI_DEBUG_PRINT((ACPI_DB_INFO, "AmlSizeNeeded=%X, %s\n", - (u32) aml_size_needed, - acpi_format_exception(status))); - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); - } - - /* Validate/Allocate/Clear caller buffer */ - - status = acpi_ut_initialize_buffer(output_buffer, aml_size_needed); - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); - } - - /* Do the conversion */ - - status = - acpi_rs_convert_resources_to_aml(linked_list_buffer, - aml_size_needed, - output_buffer->pointer); - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); - } - - ACPI_DEBUG_PRINT((ACPI_DB_INFO, "OutputBuffer %p Length %X\n", - output_buffer->pointer, (u32) output_buffer->length)); - return_ACPI_STATUS(AE_OK); -} diff --git a/drivers/acpi/resources/rsdump.c b/drivers/acpi/resources/rsdump.c deleted file mode 100644 index 6bbbb7b8941a..000000000000 --- a/drivers/acpi/resources/rsdump.c +++ /dev/null @@ -1,770 +0,0 @@ -/******************************************************************************* - * - * Module Name: rsdump - Functions to display the resource structures. - * - ******************************************************************************/ - -/* - * Copyright (C) 2000 - 2008, Intel Corp. - * 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. - */ - -#include <acpi/acpi.h> -#include <acpi/acresrc.h> - -#define _COMPONENT ACPI_RESOURCES -ACPI_MODULE_NAME("rsdump") -#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) -/* Local prototypes */ -static void acpi_rs_out_string(char *title, char *value); - -static void acpi_rs_out_integer8(char *title, u8 value); - -static void acpi_rs_out_integer16(char *title, u16 value); - -static void acpi_rs_out_integer32(char *title, u32 value); - -static void acpi_rs_out_integer64(char *title, u64 value); - -static void acpi_rs_out_title(char *title); - -static void acpi_rs_dump_byte_list(u16 length, u8 * data); - -static void acpi_rs_dump_dword_list(u8 length, u32 * data); - -static void acpi_rs_dump_short_byte_list(u8 length, u8 * data); - -static void -acpi_rs_dump_resource_source(struct acpi_resource_source *resource_source); - -static void acpi_rs_dump_address_common(union acpi_resource_data *resource); - -static void -acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table); - -#define ACPI_RSD_OFFSET(f) (u8) ACPI_OFFSET (union acpi_resource_data,f) -#define ACPI_PRT_OFFSET(f) (u8) ACPI_OFFSET (struct acpi_pci_routing_table,f) -#define ACPI_RSD_TABLE_SIZE(name) (sizeof(name) / sizeof (struct acpi_rsdump_info)) - -/******************************************************************************* - * - * Resource Descriptor info tables - * - * Note: The first table entry must be a Title or Literal and must contain - * the table length (number of table entries) - * - ******************************************************************************/ - -struct acpi_rsdump_info acpi_rs_dump_irq[7] = { - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_irq), "IRQ", NULL}, - {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(irq.descriptor_length), - "Descriptor Length", NULL}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(irq.triggering), "Triggering", - acpi_gbl_he_decode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(irq.polarity), "Polarity", - acpi_gbl_ll_decode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(irq.sharable), "Sharing", - acpi_gbl_shr_decode}, - {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(irq.interrupt_count), - "Interrupt Count", NULL}, - {ACPI_RSD_SHORTLIST, ACPI_RSD_OFFSET(irq.interrupts[0]), - "Interrupt List", NULL} -}; - -struct acpi_rsdump_info acpi_rs_dump_dma[6] = { - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_dma), "DMA", NULL}, - {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(dma.type), "Speed", - acpi_gbl_typ_decode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(dma.bus_master), "Mastering", - acpi_gbl_bm_decode}, - {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(dma.transfer), "Transfer Type", - acpi_gbl_siz_decode}, - {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(dma.channel_count), "Channel Count", - NULL}, - {ACPI_RSD_SHORTLIST, ACPI_RSD_OFFSET(dma.channels[0]), "Channel List", - NULL} -}; - -struct acpi_rsdump_info acpi_rs_dump_start_dpf[4] = { - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_start_dpf), - "Start-Dependent-Functions", NULL}, - {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(start_dpf.descriptor_length), - "Descriptor Length", NULL}, - {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(start_dpf.compatibility_priority), - "Compatibility Priority", acpi_gbl_config_decode}, - {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(start_dpf.performance_robustness), - "Performance/Robustness", acpi_gbl_config_decode} -}; - -struct acpi_rsdump_info acpi_rs_dump_end_dpf[1] = { - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_end_dpf), - "End-Dependent-Functions", NULL} -}; - -struct acpi_rsdump_info acpi_rs_dump_io[6] = { - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_io), "I/O", NULL}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(io.io_decode), "Address Decoding", - acpi_gbl_io_decode}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(io.minimum), "Address Minimum", NULL}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(io.maximum), "Address Maximum", NULL}, - {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(io.alignment), "Alignment", NULL}, - {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(io.address_length), "Address Length", - NULL} -}; - -struct acpi_rsdump_info acpi_rs_dump_fixed_io[3] = { - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_fixed_io), - "Fixed I/O", NULL}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(fixed_io.address), "Address", NULL}, - {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(fixed_io.address_length), - "Address Length", NULL} -}; - -struct acpi_rsdump_info acpi_rs_dump_vendor[3] = { - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_vendor), - "Vendor Specific", NULL}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(vendor.byte_length), "Length", NULL}, - {ACPI_RSD_LONGLIST, ACPI_RSD_OFFSET(vendor.byte_data[0]), "Vendor Data", - NULL} -}; - -struct acpi_rsdump_info acpi_rs_dump_end_tag[1] = { - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_end_tag), "EndTag", - NULL} -}; - -struct acpi_rsdump_info acpi_rs_dump_memory24[6] = { - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_memory24), - "24-Bit Memory Range", NULL}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(memory24.write_protect), - "Write Protect", acpi_gbl_rw_decode}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(memory24.minimum), "Address Minimum", - NULL}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(memory24.maximum), "Address Maximum", - NULL}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(memory24.alignment), "Alignment", - NULL}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(memory24.address_length), - "Address Length", NULL} -}; - -struct acpi_rsdump_info acpi_rs_dump_memory32[6] = { - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_memory32), - "32-Bit Memory Range", NULL}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(memory32.write_protect), - "Write Protect", acpi_gbl_rw_decode}, - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(memory32.minimum), "Address Minimum", - NULL}, - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(memory32.maximum), "Address Maximum", - NULL}, - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(memory32.alignment), "Alignment", - NULL}, - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(memory32.address_length), - "Address Length", NULL} -}; - -struct acpi_rsdump_info acpi_rs_dump_fixed_memory32[4] = { - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_fixed_memory32), - "32-Bit Fixed Memory Range", NULL}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(fixed_memory32.write_protect), - "Write Protect", acpi_gbl_rw_decode}, - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(fixed_memory32.address), "Address", - NULL}, - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(fixed_memory32.address_length), - "Address Length", NULL} -}; - -struct acpi_rsdump_info acpi_rs_dump_address16[8] = { - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_address16), - "16-Bit WORD Address Space", NULL}, - {ACPI_RSD_ADDRESS, 0, NULL, NULL}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.granularity), "Granularity", - NULL}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.minimum), "Address Minimum", - NULL}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.maximum), "Address Maximum", - NULL}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.translation_offset), - "Translation Offset", NULL}, - {ACPI_RSD_UINT16, ACPI_RSD_OFFSET(address16.address_length), - "Address Length", NULL}, - {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(address16.resource_source), NULL, NULL} -}; - -struct acpi_rsdump_info acpi_rs_dump_address32[8] = { - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_address32), - "32-Bit DWORD Address Space", NULL}, - {ACPI_RSD_ADDRESS, 0, NULL, NULL}, - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.granularity), "Granularity", - NULL}, - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.minimum), "Address Minimum", - NULL}, - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.maximum), "Address Maximum", - NULL}, - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.translation_offset), - "Translation Offset", NULL}, - {ACPI_RSD_UINT32, ACPI_RSD_OFFSET(address32.address_length), - "Address Length", NULL}, - {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(address32.resource_source), NULL, NULL} -}; - -struct acpi_rsdump_info acpi_rs_dump_address64[8] = { - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_address64), - "64-Bit QWORD Address Space", NULL}, - {ACPI_RSD_ADDRESS, 0, NULL, NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.granularity), "Granularity", - NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.minimum), "Address Minimum", - NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.maximum), "Address Maximum", - NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.translation_offset), - "Translation Offset", NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(address64.address_length), - "Address Length", NULL}, - {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(address64.resource_source), NULL, NULL} -}; - -struct acpi_rsdump_info acpi_rs_dump_ext_address64[8] = { - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_ext_address64), - "64-Bit Extended Address Space", NULL}, - {ACPI_RSD_ADDRESS, 0, NULL, NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.granularity), - "Granularity", NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.minimum), - "Address Minimum", NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.maximum), - "Address Maximum", NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.translation_offset), - "Translation Offset", NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.address_length), - "Address Length", NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(ext_address64.type_specific), - "Type-Specific Attribute", NULL} -}; - -struct acpi_rsdump_info acpi_rs_dump_ext_irq[8] = { - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_ext_irq), - "Extended IRQ", NULL}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(extended_irq.producer_consumer), - "Type", acpi_gbl_consume_decode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(extended_irq.triggering), - "Triggering", acpi_gbl_he_decode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(extended_irq.polarity), "Polarity", - acpi_gbl_ll_decode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(extended_irq.sharable), "Sharing", - acpi_gbl_shr_decode}, - {ACPI_RSD_SOURCE, ACPI_RSD_OFFSET(extended_irq.resource_source), NULL, - NULL}, - {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(extended_irq.interrupt_count), - "Interrupt Count", NULL}, - {ACPI_RSD_DWORDLIST, ACPI_RSD_OFFSET(extended_irq.interrupts[0]), - "Interrupt List", NULL} -}; - -struct acpi_rsdump_info acpi_rs_dump_generic_reg[6] = { - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_generic_reg), - "Generic Register", NULL}, - {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(generic_reg.space_id), "Space ID", - NULL}, - {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(generic_reg.bit_width), "Bit Width", - NULL}, - {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(generic_reg.bit_offset), "Bit Offset", - NULL}, - {ACPI_RSD_UINT8, ACPI_RSD_OFFSET(generic_reg.access_size), - "Access Size", NULL}, - {ACPI_RSD_UINT64, ACPI_RSD_OFFSET(generic_reg.address), "Address", NULL} -}; - -/* - * Tables used for common address descriptor flag fields - */ -static struct acpi_rsdump_info acpi_rs_dump_general_flags[5] = { - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_general_flags), NULL, - NULL}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.producer_consumer), - "Consumer/Producer", acpi_gbl_consume_decode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.decode), "Address Decode", - acpi_gbl_dec_decode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.min_address_fixed), - "Min Relocatability", acpi_gbl_min_decode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.max_address_fixed), - "Max Relocatability", acpi_gbl_max_decode} -}; - -static struct acpi_rsdump_info acpi_rs_dump_memory_flags[5] = { - {ACPI_RSD_LITERAL, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_memory_flags), - "Resource Type", (void *)"Memory Range"}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.info.mem.write_protect), - "Write Protect", acpi_gbl_rw_decode}, - {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(address.info.mem.caching), - "Caching", acpi_gbl_mem_decode}, - {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(address.info.mem.range_type), - "Range Type", acpi_gbl_mtp_decode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.info.mem.translation), - "Translation", acpi_gbl_ttp_decode} -}; - -static struct acpi_rsdump_info acpi_rs_dump_io_flags[4] = { - {ACPI_RSD_LITERAL, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_io_flags), - "Resource Type", (void *)"I/O Range"}, - {ACPI_RSD_2BITFLAG, ACPI_RSD_OFFSET(address.info.io.range_type), - "Range Type", acpi_gbl_rng_decode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.info.io.translation), - "Translation", acpi_gbl_ttp_decode}, - {ACPI_RSD_1BITFLAG, ACPI_RSD_OFFSET(address.info.io.translation_type), - "Translation Type", acpi_gbl_trs_decode} -}; - -/* - * Table used to dump _PRT contents - */ -static struct acpi_rsdump_info acpi_rs_dump_prt[5] = { - {ACPI_RSD_TITLE, ACPI_RSD_TABLE_SIZE(acpi_rs_dump_prt), NULL, NULL}, - {ACPI_RSD_UINT64, ACPI_PRT_OFFSET(address), "Address", NULL}, - {ACPI_RSD_UINT32, ACPI_PRT_OFFSET(pin), "Pin", NULL}, - {ACPI_RSD_STRING, ACPI_PRT_OFFSET(source[0]), "Source", NULL}, - {ACPI_RSD_UINT32, ACPI_PRT_OFFSET(source_index), "Source Index", NULL} -}; - -/******************************************************************************* - * - * FUNCTION: acpi_rs_dump_descriptor - * - * PARAMETERS: Resource - * - * RETURN: None - * - * DESCRIPTION: - * - ******************************************************************************/ - -static void -acpi_rs_dump_descriptor(void *resource, struct acpi_rsdump_info *table) -{ - u8 *target = NULL; - u8 *previous_target; - char *name; - u8 count; - - /* First table entry must contain the table length (# of table entries) */ - - count = table->offset; - - while (count) { - previous_target = target; - target = ACPI_ADD_PTR(u8, resource, table->offset); - name = table->name; - - switch (table->opcode) { - case ACPI_RSD_TITLE: - /* - * Optional resource title - */ - if (table->name) { - acpi_os_printf("%s Resource\n", name); - } - break; - - /* Strings */ - - case ACPI_RSD_LITERAL: - acpi_rs_out_string(name, - ACPI_CAST_PTR(char, table->pointer)); - break; - - case ACPI_RSD_STRING: - acpi_rs_out_string(name, ACPI_CAST_PTR(char, target)); - break; - - /* Data items, 8/16/32/64 bit */ - - case ACPI_RSD_UINT8: - acpi_rs_out_integer8(name, ACPI_GET8(target)); - break; - - case ACPI_RSD_UINT16: - acpi_rs_out_integer16(name, ACPI_GET16(target)); - break; - - case ACPI_RSD_UINT32: - acpi_rs_out_integer32(name, ACPI_GET32(target)); - break; - - case ACPI_RSD_UINT64: - acpi_rs_out_integer64(name, ACPI_GET64(target)); - break; - - /* Flags: 1-bit and 2-bit flags supported */ - - case ACPI_RSD_1BITFLAG: - acpi_rs_out_string(name, ACPI_CAST_PTR(char, - table-> - pointer[*target & - 0x01])); - break; - - case ACPI_RSD_2BITFLAG: - acpi_rs_out_string(name, ACPI_CAST_PTR(char, - table-> - pointer[*target & - 0x03])); - break; - - case ACPI_RSD_SHORTLIST: - /* - * Short byte list (single line output) for DMA and IRQ resources - * Note: The list length is obtained from the previous table entry - */ - if (previous_target) { - acpi_rs_out_title(name); - acpi_rs_dump_short_byte_list(*previous_target, - target); - } - break; - - case ACPI_RSD_LONGLIST: - /* - * Long byte list for Vendor resource data - * Note: The list length is obtained from the previous table entry - */ - if (previous_target) { - acpi_rs_dump_byte_list(ACPI_GET16 - (previous_target), - target); - } - break; - - case ACPI_RSD_DWORDLIST: - /* - * Dword list for Extended Interrupt resources - * Note: The list length is obtained from the previous table entry - */ - if (previous_target) { - acpi_rs_dump_dword_list(*previous_target, - ACPI_CAST_PTR(u32, - target)); - } - break; - - case ACPI_RSD_ADDRESS: - /* - * Common flags for all Address resources - */ - acpi_rs_dump_address_common(ACPI_CAST_PTR - (union acpi_resource_data, - target)); - break; - - case ACPI_RSD_SOURCE: - /* - * Optional resource_source for Address resources - */ - acpi_rs_dump_resource_source(ACPI_CAST_PTR(struct - acpi_resource_source, - target)); - break; - - default: - acpi_os_printf("**** Invalid table opcode [%X] ****\n", - table->opcode); - return; - } - - table++; - count--; - } -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_dump_resource_source - * - * PARAMETERS: resource_source - Pointer to a Resource Source struct - * - * RETURN: None - * - * DESCRIPTION: Common routine for dumping the optional resource_source and the - * corresponding resource_source_index. - * - ******************************************************************************/ - -static void -acpi_rs_dump_resource_source(struct acpi_resource_source *resource_source) -{ - ACPI_FUNCTION_ENTRY(); - - if (resource_source->index == 0xFF) { - return; - } - - acpi_rs_out_integer8("Resource Source Index", resource_source->index); - - acpi_rs_out_string("Resource Source", - resource_source->string_ptr ? - resource_source->string_ptr : "[Not Specified]"); -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_dump_address_common - * - * PARAMETERS: Resource - Pointer to an internal resource descriptor - * - * RETURN: None - * - * DESCRIPTION: Dump the fields that are common to all Address resource - * descriptors - * - ******************************************************************************/ - -static void acpi_rs_dump_address_common(union acpi_resource_data *resource) -{ - ACPI_FUNCTION_ENTRY(); - - /* Decode the type-specific flags */ - - switch (resource->address.resource_type) { - case ACPI_MEMORY_RANGE: - - acpi_rs_dump_descriptor(resource, acpi_rs_dump_memory_flags); - break; - - case ACPI_IO_RANGE: - - acpi_rs_dump_descriptor(resource, acpi_rs_dump_io_flags); - break; - - case ACPI_BUS_NUMBER_RANGE: - - acpi_rs_out_string("Resource Type", "Bus Number Range"); - break; - - default: - - acpi_rs_out_integer8("Resource Type", - (u8) resource->address.resource_type); - break; - } - - /* Decode the general flags */ - - acpi_rs_dump_descriptor(resource, acpi_rs_dump_general_flags); -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_dump_resource_list - * - * PARAMETERS: resource_list - Pointer to a resource descriptor list - * - * RETURN: None - * - * DESCRIPTION: Dispatches the structure to the correct dump routine. - * - ******************************************************************************/ - -void acpi_rs_dump_resource_list(struct acpi_resource *resource_list) -{ - u32 count = 0; - u32 type; - - ACPI_FUNCTION_ENTRY(); - - if (!(acpi_dbg_level & ACPI_LV_RESOURCES) - || !(_COMPONENT & acpi_dbg_layer)) { - return; - } - - /* Walk list and dump all resource descriptors (END_TAG terminates) */ - - do { - acpi_os_printf("\n[%02X] ", count); - count++; - - /* Validate Type before dispatch */ - - type = resource_list->type; - if (type > ACPI_RESOURCE_TYPE_MAX) { - acpi_os_printf - ("Invalid descriptor type (%X) in resource list\n", - resource_list->type); - return; - } - - /* Dump the resource descriptor */ - - acpi_rs_dump_descriptor(&resource_list->data, - acpi_gbl_dump_resource_dispatch[type]); - - /* Point to the next resource structure */ - - resource_list = - ACPI_ADD_PTR(struct acpi_resource, resource_list, - resource_list->length); - - /* Exit when END_TAG descriptor is reached */ - - } while (type != ACPI_RESOURCE_TYPE_END_TAG); -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_dump_irq_list - * - * PARAMETERS: route_table - Pointer to the routing table to dump. - * - * RETURN: None - * - * DESCRIPTION: Print IRQ routing table - * - ******************************************************************************/ - -void acpi_rs_dump_irq_list(u8 * route_table) -{ - struct acpi_pci_routing_table *prt_element; - u8 count; - - ACPI_FUNCTION_ENTRY(); - - if (!(acpi_dbg_level & ACPI_LV_RESOURCES) - || !(_COMPONENT & acpi_dbg_layer)) { - return; - } - - prt_element = ACPI_CAST_PTR(struct acpi_pci_routing_table, route_table); - - /* Dump all table elements, Exit on zero length element */ - - for (count = 0; prt_element->length; count++) { - acpi_os_printf("\n[%02X] PCI IRQ Routing Table Package\n", - count); - acpi_rs_dump_descriptor(prt_element, acpi_rs_dump_prt); - - prt_element = ACPI_ADD_PTR(struct acpi_pci_routing_table, - prt_element, prt_element->length); - } -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_out* - * - * PARAMETERS: Title - Name of the resource field - * Value - Value of the resource field - * - * RETURN: None - * - * DESCRIPTION: Miscellaneous helper functions to consistently format the - * output of the resource dump routines - * - ******************************************************************************/ - -static void acpi_rs_out_string(char *title, char *value) -{ - acpi_os_printf("%27s : %s", title, value); - if (!*value) { - acpi_os_printf("[NULL NAMESTRING]"); - } - acpi_os_printf("\n"); -} - -static void acpi_rs_out_integer8(char *title, u8 value) -{ - acpi_os_printf("%27s : %2.2X\n", title, value); -} - -static void acpi_rs_out_integer16(char *title, u16 value) -{ - acpi_os_printf("%27s : %4.4X\n", title, value); -} - -static void acpi_rs_out_integer32(char *title, u32 value) -{ - acpi_os_printf("%27s : %8.8X\n", title, value); -} - -static void acpi_rs_out_integer64(char *title, u64 value) -{ - acpi_os_printf("%27s : %8.8X%8.8X\n", title, ACPI_FORMAT_UINT64(value)); -} - -static void acpi_rs_out_title(char *title) -{ - acpi_os_printf("%27s : ", title); -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_dump*List - * - * PARAMETERS: Length - Number of elements in the list - * Data - Start of the list - * - * RETURN: None - * - * DESCRIPTION: Miscellaneous functions to dump lists of raw data - * - ******************************************************************************/ - -static void acpi_rs_dump_byte_list(u16 length, u8 * data) -{ - u8 i; - - for (i = 0; i < length; i++) { - acpi_os_printf("%25s%2.2X : %2.2X\n", "Byte", i, data[i]); - } -} - -static void acpi_rs_dump_short_byte_list(u8 length, u8 * data) -{ - u8 i; - - for (i = 0; i < length; i++) { - acpi_os_printf("%X ", data[i]); - } - acpi_os_printf("\n"); -} - -static void acpi_rs_dump_dword_list(u8 length, u32 * data) -{ - u8 i; - - for (i = 0; i < length; i++) { - acpi_os_printf("%25s%2.2X : %8.8X\n", "Dword", i, data[i]); - } -} - -#endif diff --git a/drivers/acpi/resources/rsinfo.c b/drivers/acpi/resources/rsinfo.c deleted file mode 100644 index 3f0a1fedbe0e..000000000000 --- a/drivers/acpi/resources/rsinfo.c +++ /dev/null @@ -1,205 +0,0 @@ -/******************************************************************************* - * - * Module Name: rsinfo - Dispatch and Info tables - * - ******************************************************************************/ - -/* - * Copyright (C) 2000 - 2008, Intel Corp. - * 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. - */ - -#include <acpi/acpi.h> -#include <acpi/acresrc.h> - -#define _COMPONENT ACPI_RESOURCES -ACPI_MODULE_NAME("rsinfo") - -/* - * Resource dispatch and information tables. Any new resource types (either - * Large or Small) must be reflected in each of these tables, so they are here - * in one place. - * - * The tables for Large descriptors are indexed by bits 6:0 of the AML - * descriptor type byte. The tables for Small descriptors are indexed by - * bits 6:3 of the descriptor byte. The tables for internal resource - * descriptors are indexed by the acpi_resource_type field. - */ -/* Dispatch table for resource-to-AML (Set Resource) conversion functions */ -struct acpi_rsconvert_info *acpi_gbl_set_resource_dispatch[] = { - acpi_rs_set_irq, /* 0x00, ACPI_RESOURCE_TYPE_IRQ */ - acpi_rs_convert_dma, /* 0x01, ACPI_RESOURCE_TYPE_DMA */ - acpi_rs_set_start_dpf, /* 0x02, ACPI_RESOURCE_TYPE_START_DEPENDENT */ - acpi_rs_convert_end_dpf, /* 0x03, ACPI_RESOURCE_TYPE_END_DEPENDENT */ - acpi_rs_convert_io, /* 0x04, ACPI_RESOURCE_TYPE_IO */ - acpi_rs_convert_fixed_io, /* 0x05, ACPI_RESOURCE_TYPE_FIXED_IO */ - acpi_rs_set_vendor, /* 0x06, ACPI_RESOURCE_TYPE_VENDOR */ - acpi_rs_convert_end_tag, /* 0x07, ACPI_RESOURCE_TYPE_END_TAG */ - acpi_rs_convert_memory24, /* 0x08, ACPI_RESOURCE_TYPE_MEMORY24 */ - acpi_rs_convert_memory32, /* 0x09, ACPI_RESOURCE_TYPE_MEMORY32 */ - acpi_rs_convert_fixed_memory32, /* 0x0A, ACPI_RESOURCE_TYPE_FIXED_MEMORY32 */ - acpi_rs_convert_address16, /* 0x0B, ACPI_RESOURCE_TYPE_ADDRESS16 */ - acpi_rs_convert_address32, /* 0x0C, ACPI_RESOURCE_TYPE_ADDRESS32 */ - acpi_rs_convert_address64, /* 0x0D, ACPI_RESOURCE_TYPE_ADDRESS64 */ - acpi_rs_convert_ext_address64, /* 0x0E, ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64 */ - acpi_rs_convert_ext_irq, /* 0x0F, ACPI_RESOURCE_TYPE_EXTENDED_IRQ */ - acpi_rs_convert_generic_reg /* 0x10, ACPI_RESOURCE_TYPE_GENERIC_REGISTER */ -}; - -/* Dispatch tables for AML-to-resource (Get Resource) conversion functions */ - -struct acpi_rsconvert_info *acpi_gbl_get_resource_dispatch[] = { - /* Small descriptors */ - - NULL, /* 0x00, Reserved */ - NULL, /* 0x01, Reserved */ - NULL, /* 0x02, Reserved */ - NULL, /* 0x03, Reserved */ - acpi_rs_get_irq, /* 0x04, ACPI_RESOURCE_NAME_IRQ */ - acpi_rs_convert_dma, /* 0x05, ACPI_RESOURCE_NAME_DMA */ - acpi_rs_get_start_dpf, /* 0x06, ACPI_RESOURCE_NAME_START_DEPENDENT */ - acpi_rs_convert_end_dpf, /* 0x07, ACPI_RESOURCE_NAME_END_DEPENDENT */ - acpi_rs_convert_io, /* 0x08, ACPI_RESOURCE_NAME_IO */ - acpi_rs_convert_fixed_io, /* 0x09, ACPI_RESOURCE_NAME_FIXED_IO */ - NULL, /* 0x0A, Reserved */ - NULL, /* 0x0B, Reserved */ - NULL, /* 0x0C, Reserved */ - NULL, /* 0x0D, Reserved */ - acpi_rs_get_vendor_small, /* 0x0E, ACPI_RESOURCE_NAME_VENDOR_SMALL */ - acpi_rs_convert_end_tag, /* 0x0F, ACPI_RESOURCE_NAME_END_TAG */ - - /* Large descriptors */ - - NULL, /* 0x00, Reserved */ - acpi_rs_convert_memory24, /* 0x01, ACPI_RESOURCE_NAME_MEMORY24 */ - acpi_rs_convert_generic_reg, /* 0x02, ACPI_RESOURCE_NAME_GENERIC_REGISTER */ - NULL, /* 0x03, Reserved */ - acpi_rs_get_vendor_large, /* 0x04, ACPI_RESOURCE_NAME_VENDOR_LARGE */ - acpi_rs_convert_memory32, /* 0x05, ACPI_RESOURCE_NAME_MEMORY32 */ - acpi_rs_convert_fixed_memory32, /* 0x06, ACPI_RESOURCE_NAME_FIXED_MEMORY32 */ - acpi_rs_convert_address32, /* 0x07, ACPI_RESOURCE_NAME_ADDRESS32 */ - acpi_rs_convert_address16, /* 0x08, ACPI_RESOURCE_NAME_ADDRESS16 */ - acpi_rs_convert_ext_irq, /* 0x09, ACPI_RESOURCE_NAME_EXTENDED_IRQ */ - acpi_rs_convert_address64, /* 0x0A, ACPI_RESOURCE_NAME_ADDRESS64 */ - acpi_rs_convert_ext_address64 /* 0x0B, ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64 */ -}; - -#ifdef ACPI_FUTURE_USAGE -#if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) - -/* Dispatch table for resource dump functions */ - -struct acpi_rsdump_info *acpi_gbl_dump_resource_dispatch[] = { - acpi_rs_dump_irq, /* ACPI_RESOURCE_TYPE_IRQ */ - acpi_rs_dump_dma, /* ACPI_RESOURCE_TYPE_DMA */ - acpi_rs_dump_start_dpf, /* ACPI_RESOURCE_TYPE_START_DEPENDENT */ - acpi_rs_dump_end_dpf, /* ACPI_RESOURCE_TYPE_END_DEPENDENT */ - acpi_rs_dump_io, /* ACPI_RESOURCE_TYPE_IO */ - acpi_rs_dump_fixed_io, /* ACPI_RESOURCE_TYPE_FIXED_IO */ - acpi_rs_dump_vendor, /* ACPI_RESOURCE_TYPE_VENDOR */ - acpi_rs_dump_end_tag, /* ACPI_RESOURCE_TYPE_END_TAG */ - acpi_rs_dump_memory24, /* ACPI_RESOURCE_TYPE_MEMORY24 */ - acpi_rs_dump_memory32, /* ACPI_RESOURCE_TYPE_MEMORY32 */ - acpi_rs_dump_fixed_memory32, /* ACPI_RESOURCE_TYPE_FIXED_MEMORY32 */ - acpi_rs_dump_address16, /* ACPI_RESOURCE_TYPE_ADDRESS16 */ - acpi_rs_dump_address32, /* ACPI_RESOURCE_TYPE_ADDRESS32 */ - acpi_rs_dump_address64, /* ACPI_RESOURCE_TYPE_ADDRESS64 */ - acpi_rs_dump_ext_address64, /* ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64 */ - acpi_rs_dump_ext_irq, /* ACPI_RESOURCE_TYPE_EXTENDED_IRQ */ - acpi_rs_dump_generic_reg, /* ACPI_RESOURCE_TYPE_GENERIC_REGISTER */ -}; -#endif - -#endif /* ACPI_FUTURE_USAGE */ -/* - * Base sizes for external AML resource descriptors, indexed by internal type. - * Includes size of the descriptor header (1 byte for small descriptors, - * 3 bytes for large descriptors) - */ -const u8 acpi_gbl_aml_resource_sizes[] = { - sizeof(struct aml_resource_irq), /* ACPI_RESOURCE_TYPE_IRQ (optional Byte 3 always created) */ - sizeof(struct aml_resource_dma), /* ACPI_RESOURCE_TYPE_DMA */ - sizeof(struct aml_resource_start_dependent), /* ACPI_RESOURCE_TYPE_START_DEPENDENT (optional Byte 1 always created) */ - sizeof(struct aml_resource_end_dependent), /* ACPI_RESOURCE_TYPE_END_DEPENDENT */ - sizeof(struct aml_resource_io), /* ACPI_RESOURCE_TYPE_IO */ - sizeof(struct aml_resource_fixed_io), /* ACPI_RESOURCE_TYPE_FIXED_IO */ - sizeof(struct aml_resource_vendor_small), /* ACPI_RESOURCE_TYPE_VENDOR */ - sizeof(struct aml_resource_end_tag), /* ACPI_RESOURCE_TYPE_END_TAG */ - sizeof(struct aml_resource_memory24), /* ACPI_RESOURCE_TYPE_MEMORY24 */ - sizeof(struct aml_resource_memory32), /* ACPI_RESOURCE_TYPE_MEMORY32 */ - sizeof(struct aml_resource_fixed_memory32), /* ACPI_RESOURCE_TYPE_FIXED_MEMORY32 */ - sizeof(struct aml_resource_address16), /* ACPI_RESOURCE_TYPE_ADDRESS16 */ - sizeof(struct aml_resource_address32), /* ACPI_RESOURCE_TYPE_ADDRESS32 */ - sizeof(struct aml_resource_address64), /* ACPI_RESOURCE_TYPE_ADDRESS64 */ - sizeof(struct aml_resource_extended_address64), /*ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64 */ - sizeof(struct aml_resource_extended_irq), /* ACPI_RESOURCE_TYPE_EXTENDED_IRQ */ - sizeof(struct aml_resource_generic_register) /* ACPI_RESOURCE_TYPE_GENERIC_REGISTER */ -}; - -const u8 acpi_gbl_resource_struct_sizes[] = { - /* Small descriptors */ - - 0, - 0, - 0, - 0, - ACPI_RS_SIZE(struct acpi_resource_irq), - ACPI_RS_SIZE(struct acpi_resource_dma), - ACPI_RS_SIZE(struct acpi_resource_start_dependent), - ACPI_RS_SIZE_MIN, - ACPI_RS_SIZE(struct acpi_resource_io), - ACPI_RS_SIZE(struct acpi_resource_fixed_io), - 0, - 0, - 0, - 0, - ACPI_RS_SIZE(struct acpi_resource_vendor), - ACPI_RS_SIZE_MIN, - - /* Large descriptors */ - - 0, - ACPI_RS_SIZE(struct acpi_resource_memory24), - ACPI_RS_SIZE(struct acpi_resource_generic_register), - 0, - ACPI_RS_SIZE(struct acpi_resource_vendor), - ACPI_RS_SIZE(struct acpi_resource_memory32), - ACPI_RS_SIZE(struct acpi_resource_fixed_memory32), - ACPI_RS_SIZE(struct acpi_resource_address32), - ACPI_RS_SIZE(struct acpi_resource_address16), - ACPI_RS_SIZE(struct acpi_resource_extended_irq), - ACPI_RS_SIZE(struct acpi_resource_address64), - ACPI_RS_SIZE(struct acpi_resource_extended_address64) -}; diff --git a/drivers/acpi/resources/rsio.c b/drivers/acpi/resources/rsio.c deleted file mode 100644 index b66d42e7402e..000000000000 --- a/drivers/acpi/resources/rsio.c +++ /dev/null @@ -1,289 +0,0 @@ -/******************************************************************************* - * - * Module Name: rsio - IO and DMA resource descriptors - * - ******************************************************************************/ - -/* - * Copyright (C) 2000 - 2008, Intel Corp. - * 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. - */ - -#include <acpi/acpi.h> -#include <acpi/acresrc.h> - -#define _COMPONENT ACPI_RESOURCES -ACPI_MODULE_NAME("rsio") - -/******************************************************************************* - * - * acpi_rs_convert_io - * - ******************************************************************************/ -struct acpi_rsconvert_info acpi_rs_convert_io[5] = { - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_IO, - ACPI_RS_SIZE(struct acpi_resource_io), - ACPI_RSC_TABLE_SIZE(acpi_rs_convert_io)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_IO, - sizeof(struct aml_resource_io), - 0}, - - /* Decode flag */ - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.io.io_decode), - AML_OFFSET(io.flags), - 0}, - /* - * These fields are contiguous in both the source and destination: - * Address Alignment - * Length - * Minimum Base Address - * Maximum Base Address - */ - {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.io.alignment), - AML_OFFSET(io.alignment), - 2}, - - {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.io.minimum), - AML_OFFSET(io.minimum), - 2} -}; - -/******************************************************************************* - * - * acpi_rs_convert_fixed_io - * - ******************************************************************************/ - -struct acpi_rsconvert_info acpi_rs_convert_fixed_io[4] = { - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_FIXED_IO, - ACPI_RS_SIZE(struct acpi_resource_fixed_io), - ACPI_RSC_TABLE_SIZE(acpi_rs_convert_fixed_io)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_FIXED_IO, - sizeof(struct aml_resource_fixed_io), - 0}, - /* - * These fields are contiguous in both the source and destination: - * Base Address - * Length - */ - {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.fixed_io.address_length), - AML_OFFSET(fixed_io.address_length), - 1}, - - {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.fixed_io.address), - AML_OFFSET(fixed_io.address), - 1} -}; - -/******************************************************************************* - * - * acpi_rs_convert_generic_reg - * - ******************************************************************************/ - -struct acpi_rsconvert_info acpi_rs_convert_generic_reg[4] = { - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_GENERIC_REGISTER, - ACPI_RS_SIZE(struct acpi_resource_generic_register), - ACPI_RSC_TABLE_SIZE(acpi_rs_convert_generic_reg)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_GENERIC_REGISTER, - sizeof(struct aml_resource_generic_register), - 0}, - /* - * These fields are contiguous in both the source and destination: - * Address Space ID - * Register Bit Width - * Register Bit Offset - * Access Size - */ - {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.generic_reg.space_id), - AML_OFFSET(generic_reg.address_space_id), - 4}, - - /* Get the Register Address */ - - {ACPI_RSC_MOVE64, ACPI_RS_OFFSET(data.generic_reg.address), - AML_OFFSET(generic_reg.address), - 1} -}; - -/******************************************************************************* - * - * acpi_rs_convert_end_dpf - * - ******************************************************************************/ - -struct acpi_rsconvert_info acpi_rs_convert_end_dpf[2] = { - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_END_DEPENDENT, - ACPI_RS_SIZE_MIN, - ACPI_RSC_TABLE_SIZE(acpi_rs_convert_end_dpf)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_END_DEPENDENT, - sizeof(struct aml_resource_end_dependent), - 0} -}; - -/******************************************************************************* - * - * acpi_rs_convert_end_tag - * - ******************************************************************************/ - -struct acpi_rsconvert_info acpi_rs_convert_end_tag[2] = { - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_END_TAG, - ACPI_RS_SIZE_MIN, - ACPI_RSC_TABLE_SIZE(acpi_rs_convert_end_tag)}, - - /* - * Note: The checksum field is set to zero, meaning that the resource - * data is treated as if the checksum operation succeeded. - * (ACPI Spec 1.0b Section 6.4.2.8) - */ - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_END_TAG, - sizeof(struct aml_resource_end_tag), - 0} -}; - -/******************************************************************************* - * - * acpi_rs_get_start_dpf - * - ******************************************************************************/ - -struct acpi_rsconvert_info acpi_rs_get_start_dpf[6] = { - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_START_DEPENDENT, - ACPI_RS_SIZE(struct acpi_resource_start_dependent), - ACPI_RSC_TABLE_SIZE(acpi_rs_get_start_dpf)}, - - /* Defaults for Compatibility and Performance priorities */ - - {ACPI_RSC_SET8, ACPI_RS_OFFSET(data.start_dpf.compatibility_priority), - ACPI_ACCEPTABLE_CONFIGURATION, - 2}, - - /* Get the descriptor length (0 or 1 for Start Dpf descriptor) */ - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.start_dpf.descriptor_length), - AML_OFFSET(start_dpf.descriptor_type), - 0}, - - /* All done if there is no flag byte present in the descriptor */ - - {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_AML_LENGTH, 0, 1}, - - /* Flag byte is present, get the flags */ - - {ACPI_RSC_2BITFLAG, - ACPI_RS_OFFSET(data.start_dpf.compatibility_priority), - AML_OFFSET(start_dpf.flags), - 0}, - - {ACPI_RSC_2BITFLAG, - ACPI_RS_OFFSET(data.start_dpf.performance_robustness), - AML_OFFSET(start_dpf.flags), - 2} -}; - -/******************************************************************************* - * - * acpi_rs_set_start_dpf - * - ******************************************************************************/ - -struct acpi_rsconvert_info acpi_rs_set_start_dpf[10] = { - /* Start with a default descriptor of length 1 */ - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_START_DEPENDENT, - sizeof(struct aml_resource_start_dependent), - ACPI_RSC_TABLE_SIZE(acpi_rs_set_start_dpf)}, - - /* Set the default flag values */ - - {ACPI_RSC_2BITFLAG, - ACPI_RS_OFFSET(data.start_dpf.compatibility_priority), - AML_OFFSET(start_dpf.flags), - 0}, - - {ACPI_RSC_2BITFLAG, - ACPI_RS_OFFSET(data.start_dpf.performance_robustness), - AML_OFFSET(start_dpf.flags), - 2}, - /* - * All done if the output descriptor length is required to be 1 - * (i.e., optimization to 0 bytes cannot be attempted) - */ - {ACPI_RSC_EXIT_EQ, ACPI_RSC_COMPARE_VALUE, - ACPI_RS_OFFSET(data.start_dpf.descriptor_length), - 1}, - - /* Set length to 0 bytes (no flags byte) */ - - {ACPI_RSC_LENGTH, 0, 0, - sizeof(struct aml_resource_start_dependent_noprio)}, - - /* - * All done if the output descriptor length is required to be 0. - * - * TBD: Perhaps we should check for error if input flags are not - * compatible with a 0-byte descriptor. - */ - {ACPI_RSC_EXIT_EQ, ACPI_RSC_COMPARE_VALUE, - ACPI_RS_OFFSET(data.start_dpf.descriptor_length), - 0}, - - /* Reset length to 1 byte (descriptor with flags byte) */ - - {ACPI_RSC_LENGTH, 0, 0, sizeof(struct aml_resource_start_dependent)}, - - /* - * All done if flags byte is necessary -- if either priority value - * is not ACPI_ACCEPTABLE_CONFIGURATION - */ - {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE, - ACPI_RS_OFFSET(data.start_dpf.compatibility_priority), - ACPI_ACCEPTABLE_CONFIGURATION}, - - {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE, - ACPI_RS_OFFSET(data.start_dpf.performance_robustness), - ACPI_ACCEPTABLE_CONFIGURATION}, - - /* Flag byte is not necessary */ - - {ACPI_RSC_LENGTH, 0, 0, - sizeof(struct aml_resource_start_dependent_noprio)} -}; diff --git a/drivers/acpi/resources/rsirq.c b/drivers/acpi/resources/rsirq.c deleted file mode 100644 index a8805efc0366..000000000000 --- a/drivers/acpi/resources/rsirq.c +++ /dev/null @@ -1,265 +0,0 @@ -/******************************************************************************* - * - * Module Name: rsirq - IRQ resource descriptors - * - ******************************************************************************/ - -/* - * Copyright (C) 2000 - 2008, Intel Corp. - * 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. - */ - -#include <acpi/acpi.h> -#include <acpi/acresrc.h> - -#define _COMPONENT ACPI_RESOURCES -ACPI_MODULE_NAME("rsirq") - -/******************************************************************************* - * - * acpi_rs_get_irq - * - ******************************************************************************/ -struct acpi_rsconvert_info acpi_rs_get_irq[8] = { - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_IRQ, - ACPI_RS_SIZE(struct acpi_resource_irq), - ACPI_RSC_TABLE_SIZE(acpi_rs_get_irq)}, - - /* Get the IRQ mask (bytes 1:2) */ - - {ACPI_RSC_BITMASK16, ACPI_RS_OFFSET(data.irq.interrupts[0]), - AML_OFFSET(irq.irq_mask), - ACPI_RS_OFFSET(data.irq.interrupt_count)}, - - /* Set default flags (others are zero) */ - - {ACPI_RSC_SET8, ACPI_RS_OFFSET(data.irq.triggering), - ACPI_EDGE_SENSITIVE, - 1}, - - /* Get the descriptor length (2 or 3 for IRQ descriptor) */ - - {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.irq.descriptor_length), - AML_OFFSET(irq.descriptor_type), - 0}, - - /* All done if no flag byte present in descriptor */ - - {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_AML_LENGTH, 0, 3}, - - /* Get flags: Triggering[0], Polarity[3], Sharing[4] */ - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.irq.triggering), - AML_OFFSET(irq.flags), - 0}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.irq.polarity), - AML_OFFSET(irq.flags), - 3}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.irq.sharable), - AML_OFFSET(irq.flags), - 4} -}; - -/******************************************************************************* - * - * acpi_rs_set_irq - * - ******************************************************************************/ - -struct acpi_rsconvert_info acpi_rs_set_irq[13] = { - /* Start with a default descriptor of length 3 */ - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_IRQ, - sizeof(struct aml_resource_irq), - ACPI_RSC_TABLE_SIZE(acpi_rs_set_irq)}, - - /* Convert interrupt list to 16-bit IRQ bitmask */ - - {ACPI_RSC_BITMASK16, ACPI_RS_OFFSET(data.irq.interrupts[0]), - AML_OFFSET(irq.irq_mask), - ACPI_RS_OFFSET(data.irq.interrupt_count)}, - - /* Set the flags byte */ - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.irq.triggering), - AML_OFFSET(irq.flags), - 0}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.irq.polarity), - AML_OFFSET(irq.flags), - 3}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.irq.sharable), - AML_OFFSET(irq.flags), - 4}, - - /* - * All done if the output descriptor length is required to be 3 - * (i.e., optimization to 2 bytes cannot be attempted) - */ - {ACPI_RSC_EXIT_EQ, ACPI_RSC_COMPARE_VALUE, - ACPI_RS_OFFSET(data.irq.descriptor_length), - 3}, - - /* Set length to 2 bytes (no flags byte) */ - - {ACPI_RSC_LENGTH, 0, 0, sizeof(struct aml_resource_irq_noflags)}, - - /* - * All done if the output descriptor length is required to be 2. - * - * TBD: Perhaps we should check for error if input flags are not - * compatible with a 2-byte descriptor. - */ - {ACPI_RSC_EXIT_EQ, ACPI_RSC_COMPARE_VALUE, - ACPI_RS_OFFSET(data.irq.descriptor_length), - 2}, - - /* Reset length to 3 bytes (descriptor with flags byte) */ - - {ACPI_RSC_LENGTH, 0, 0, sizeof(struct aml_resource_irq)}, - - /* - * Check if the flags byte is necessary. Not needed if the flags are: - * ACPI_EDGE_SENSITIVE, ACPI_ACTIVE_HIGH, ACPI_EXCLUSIVE - */ - {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE, - ACPI_RS_OFFSET(data.irq.triggering), - ACPI_EDGE_SENSITIVE}, - - {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE, - ACPI_RS_OFFSET(data.irq.polarity), - ACPI_ACTIVE_HIGH}, - - {ACPI_RSC_EXIT_NE, ACPI_RSC_COMPARE_VALUE, - ACPI_RS_OFFSET(data.irq.sharable), - ACPI_EXCLUSIVE}, - - /* We can optimize to a 2-byte irq_no_flags() descriptor */ - - {ACPI_RSC_LENGTH, 0, 0, sizeof(struct aml_resource_irq_noflags)} -}; - -/******************************************************************************* - * - * acpi_rs_convert_ext_irq - * - ******************************************************************************/ - -struct acpi_rsconvert_info acpi_rs_convert_ext_irq[9] = { - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_EXTENDED_IRQ, - ACPI_RS_SIZE(struct acpi_resource_extended_irq), - ACPI_RSC_TABLE_SIZE(acpi_rs_convert_ext_irq)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_EXTENDED_IRQ, - sizeof(struct aml_resource_extended_irq), - 0}, - - /* Flag bits */ - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.extended_irq.producer_consumer), - AML_OFFSET(extended_irq.flags), - 0}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.extended_irq.triggering), - AML_OFFSET(extended_irq.flags), - 1}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.extended_irq.polarity), - AML_OFFSET(extended_irq.flags), - 2}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.extended_irq.sharable), - AML_OFFSET(extended_irq.flags), - 3}, - - /* IRQ Table length (Byte4) */ - - {ACPI_RSC_COUNT, ACPI_RS_OFFSET(data.extended_irq.interrupt_count), - AML_OFFSET(extended_irq.interrupt_count), - sizeof(u32)} - , - - /* Copy every IRQ in the table, each is 32 bits */ - - {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.extended_irq.interrupts[0]), - AML_OFFSET(extended_irq.interrupts[0]), - 0} - , - - /* Optional resource_source (Index and String) */ - - {ACPI_RSC_SOURCEX, ACPI_RS_OFFSET(data.extended_irq.resource_source), - ACPI_RS_OFFSET(data.extended_irq.interrupts[0]), - sizeof(struct aml_resource_extended_irq)} -}; - -/******************************************************************************* - * - * acpi_rs_convert_dma - * - ******************************************************************************/ - -struct acpi_rsconvert_info acpi_rs_convert_dma[6] = { - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_DMA, - ACPI_RS_SIZE(struct acpi_resource_dma), - ACPI_RSC_TABLE_SIZE(acpi_rs_convert_dma)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_DMA, - sizeof(struct aml_resource_dma), - 0}, - - /* Flags: transfer preference, bus mastering, channel speed */ - - {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.dma.transfer), - AML_OFFSET(dma.flags), - 0}, - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.dma.bus_master), - AML_OFFSET(dma.flags), - 2}, - - {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.dma.type), - AML_OFFSET(dma.flags), - 5}, - - /* DMA channel mask bits */ - - {ACPI_RSC_BITMASK, ACPI_RS_OFFSET(data.dma.channels[0]), - AML_OFFSET(dma.dma_channel_mask), - ACPI_RS_OFFSET(data.dma.channel_count)} -}; diff --git a/drivers/acpi/resources/rslist.c b/drivers/acpi/resources/rslist.c deleted file mode 100644 index b78c7e797a19..000000000000 --- a/drivers/acpi/resources/rslist.c +++ /dev/null @@ -1,202 +0,0 @@ -/******************************************************************************* - * - * Module Name: rslist - Linked list utilities - * - ******************************************************************************/ - -/* - * Copyright (C) 2000 - 2008, Intel Corp. - * 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. - */ - -#include <acpi/acpi.h> -#include <acpi/acresrc.h> - -#define _COMPONENT ACPI_RESOURCES -ACPI_MODULE_NAME("rslist") - -/******************************************************************************* - * - * FUNCTION: acpi_rs_convert_aml_to_resources - * - * PARAMETERS: acpi_walk_aml_callback - * resource_ptr - Pointer to the buffer that will - * contain the output structures - * - * RETURN: Status - * - * DESCRIPTION: Convert an AML resource to an internal representation of the - * resource that is aligned and easier to access. - * - ******************************************************************************/ -acpi_status -acpi_rs_convert_aml_to_resources(u8 * aml, - u32 length, - u32 offset, u8 resource_index, void **context) -{ - struct acpi_resource **resource_ptr = - ACPI_CAST_INDIRECT_PTR(struct acpi_resource, context); - struct acpi_resource *resource; - acpi_status status; - - ACPI_FUNCTION_TRACE(rs_convert_aml_to_resources); - - /* - * Check that the input buffer and all subsequent pointers into it - * are aligned on a native word boundary. Most important on IA64 - */ - resource = *resource_ptr; - if (ACPI_IS_MISALIGNED(resource)) { - ACPI_WARNING((AE_INFO, - "Misaligned resource pointer %p", resource)); - } - - /* Convert the AML byte stream resource to a local resource struct */ - - status = - acpi_rs_convert_aml_to_resource(resource, - ACPI_CAST_PTR(union aml_resource, - aml), - acpi_gbl_get_resource_dispatch - [resource_index]); - if (ACPI_FAILURE(status)) { - ACPI_EXCEPTION((AE_INFO, status, - "Could not convert AML resource (Type %X)", - *aml)); - return_ACPI_STATUS(status); - } - - ACPI_DEBUG_PRINT((ACPI_DB_RESOURCES, - "Type %.2X, AmlLength %.2X InternalLength %.2X\n", - acpi_ut_get_resource_type(aml), length, - resource->length)); - - /* Point to the next structure in the output buffer */ - - *resource_ptr = ACPI_ADD_PTR(void, resource, resource->length); - return_ACPI_STATUS(AE_OK); -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_convert_resources_to_aml - * - * PARAMETERS: Resource - Pointer to the resource linked list - * aml_size_needed - Calculated size of the byte stream - * needed from calling acpi_rs_get_aml_length() - * The size of the output_buffer is - * guaranteed to be >= aml_size_needed - * output_buffer - Pointer to the buffer that will - * contain the byte stream - * - * RETURN: Status - * - * DESCRIPTION: Takes the resource linked list and parses it, creating a - * byte stream of resources in the caller's output buffer - * - ******************************************************************************/ - -acpi_status -acpi_rs_convert_resources_to_aml(struct acpi_resource *resource, - acpi_size aml_size_needed, u8 * output_buffer) -{ - u8 *aml = output_buffer; - u8 *end_aml = output_buffer + aml_size_needed; - acpi_status status; - - ACPI_FUNCTION_TRACE(rs_convert_resources_to_aml); - - /* Walk the resource descriptor list, convert each descriptor */ - - while (aml < end_aml) { - - /* Validate the (internal) Resource Type */ - - if (resource->type > ACPI_RESOURCE_TYPE_MAX) { - ACPI_ERROR((AE_INFO, - "Invalid descriptor type (%X) in resource list", - resource->type)); - return_ACPI_STATUS(AE_BAD_DATA); - } - - /* Perform the conversion */ - - status = acpi_rs_convert_resource_to_aml(resource, ACPI_CAST_PTR(union - aml_resource, - aml), - acpi_gbl_set_resource_dispatch - [resource->type]); - if (ACPI_FAILURE(status)) { - ACPI_EXCEPTION((AE_INFO, status, - "Could not convert resource (type %X) to AML", - resource->type)); - return_ACPI_STATUS(status); - } - - /* Perform final sanity check on the new AML resource descriptor */ - - status = - acpi_ut_validate_resource(ACPI_CAST_PTR - (union aml_resource, aml), NULL); - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); - } - - /* Check for end-of-list, normal exit */ - - if (resource->type == ACPI_RESOURCE_TYPE_END_TAG) { - - /* An End Tag indicates the end of the input Resource Template */ - - return_ACPI_STATUS(AE_OK); - } - - /* - * Extract the total length of the new descriptor and set the - * Aml to point to the next (output) resource descriptor - */ - aml += acpi_ut_get_descriptor_length(aml); - - /* Point to the next input resource descriptor */ - - resource = - ACPI_ADD_PTR(struct acpi_resource, resource, - resource->length); - } - - /* Completed buffer, but did not find an end_tag resource descriptor */ - - return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG); -} diff --git a/drivers/acpi/resources/rsmemory.c b/drivers/acpi/resources/rsmemory.c deleted file mode 100644 index 63b21abd90bb..000000000000 --- a/drivers/acpi/resources/rsmemory.c +++ /dev/null @@ -1,235 +0,0 @@ -/******************************************************************************* - * - * Module Name: rsmem24 - Memory resource descriptors - * - ******************************************************************************/ - -/* - * Copyright (C) 2000 - 2008, Intel Corp. - * 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. - */ - -#include <acpi/acpi.h> -#include <acpi/acresrc.h> - -#define _COMPONENT ACPI_RESOURCES -ACPI_MODULE_NAME("rsmemory") - -/******************************************************************************* - * - * acpi_rs_convert_memory24 - * - ******************************************************************************/ -struct acpi_rsconvert_info acpi_rs_convert_memory24[4] = { - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_MEMORY24, - ACPI_RS_SIZE(struct acpi_resource_memory24), - ACPI_RSC_TABLE_SIZE(acpi_rs_convert_memory24)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_MEMORY24, - sizeof(struct aml_resource_memory24), - 0}, - - /* Read/Write bit */ - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.memory24.write_protect), - AML_OFFSET(memory24.flags), - 0}, - /* - * These fields are contiguous in both the source and destination: - * Minimum Base Address - * Maximum Base Address - * Address Base Alignment - * Range Length - */ - {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.memory24.minimum), - AML_OFFSET(memory24.minimum), - 4} -}; - -/******************************************************************************* - * - * acpi_rs_convert_memory32 - * - ******************************************************************************/ - -struct acpi_rsconvert_info acpi_rs_convert_memory32[4] = { - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_MEMORY32, - ACPI_RS_SIZE(struct acpi_resource_memory32), - ACPI_RSC_TABLE_SIZE(acpi_rs_convert_memory32)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_MEMORY32, - sizeof(struct aml_resource_memory32), - 0}, - - /* Read/Write bit */ - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.memory32.write_protect), - AML_OFFSET(memory32.flags), - 0}, - /* - * These fields are contiguous in both the source and destination: - * Minimum Base Address - * Maximum Base Address - * Address Base Alignment - * Range Length - */ - {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.memory32.minimum), - AML_OFFSET(memory32.minimum), - 4} -}; - -/******************************************************************************* - * - * acpi_rs_convert_fixed_memory32 - * - ******************************************************************************/ - -struct acpi_rsconvert_info acpi_rs_convert_fixed_memory32[4] = { - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_FIXED_MEMORY32, - ACPI_RS_SIZE(struct acpi_resource_fixed_memory32), - ACPI_RSC_TABLE_SIZE(acpi_rs_convert_fixed_memory32)}, - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_FIXED_MEMORY32, - sizeof(struct aml_resource_fixed_memory32), - 0}, - - /* Read/Write bit */ - - {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.fixed_memory32.write_protect), - AML_OFFSET(fixed_memory32.flags), - 0}, - /* - * These fields are contiguous in both the source and destination: - * Base Address - * Range Length - */ - {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.fixed_memory32.address), - AML_OFFSET(fixed_memory32.address), - 2} -}; - -/******************************************************************************* - * - * acpi_rs_get_vendor_small - * - ******************************************************************************/ - -struct acpi_rsconvert_info acpi_rs_get_vendor_small[3] = { - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_VENDOR, - ACPI_RS_SIZE(struct acpi_resource_vendor), - ACPI_RSC_TABLE_SIZE(acpi_rs_get_vendor_small)}, - - /* Length of the vendor data (byte count) */ - - {ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length), - 0, - sizeof(u8)} - , - - /* Vendor data */ - - {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]), - sizeof(struct aml_resource_small_header), - 0} -}; - -/******************************************************************************* - * - * acpi_rs_get_vendor_large - * - ******************************************************************************/ - -struct acpi_rsconvert_info acpi_rs_get_vendor_large[3] = { - {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_VENDOR, - ACPI_RS_SIZE(struct acpi_resource_vendor), - ACPI_RSC_TABLE_SIZE(acpi_rs_get_vendor_large)}, - - /* Length of the vendor data (byte count) */ - - {ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length), - 0, - sizeof(u8)} - , - - /* Vendor data */ - - {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]), - sizeof(struct aml_resource_large_header), - 0} -}; - -/******************************************************************************* - * - * acpi_rs_set_vendor - * - ******************************************************************************/ - -struct acpi_rsconvert_info acpi_rs_set_vendor[7] = { - /* Default is a small vendor descriptor */ - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_VENDOR_SMALL, - sizeof(struct aml_resource_small_header), - ACPI_RSC_TABLE_SIZE(acpi_rs_set_vendor)}, - - /* Get the length and copy the data */ - - {ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length), - 0, - 0}, - - {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]), - sizeof(struct aml_resource_small_header), - 0}, - - /* - * All done if the Vendor byte length is 7 or less, meaning that it will - * fit within a small descriptor - */ - {ACPI_RSC_EXIT_LE, 0, 0, 7}, - - /* Must create a large vendor descriptor */ - - {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_VENDOR_LARGE, - sizeof(struct aml_resource_large_header), - 0}, - - {ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length), - 0, - 0}, - - {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]), - sizeof(struct aml_resource_large_header), - 0} -}; diff --git a/drivers/acpi/resources/rsmisc.c b/drivers/acpi/resources/rsmisc.c deleted file mode 100644 index 96a6c0353255..000000000000 --- a/drivers/acpi/resources/rsmisc.c +++ /dev/null @@ -1,560 +0,0 @@ -/******************************************************************************* - * - * Module Name: rsmisc - Miscellaneous resource descriptors - * - ******************************************************************************/ - -/* - * Copyright (C) 2000 - 2008, Intel Corp. - * 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. - */ - -#include <acpi/acpi.h> -#include <acpi/acresrc.h> - -#define _COMPONENT ACPI_RESOURCES -ACPI_MODULE_NAME("rsmisc") -#define INIT_RESOURCE_TYPE(i) i->resource_offset -#define INIT_RESOURCE_LENGTH(i) i->aml_offset -#define INIT_TABLE_LENGTH(i) i->value -#define COMPARE_OPCODE(i) i->resource_offset -#define COMPARE_TARGET(i) i->aml_offset -#define COMPARE_VALUE(i) i->value -/******************************************************************************* - * - * FUNCTION: acpi_rs_convert_aml_to_resource - * - * PARAMETERS: Resource - Pointer to the resource descriptor - * Aml - Where the AML descriptor is returned - * Info - Pointer to appropriate conversion table - * - * RETURN: Status - * - * DESCRIPTION: Convert an external AML resource descriptor to the corresponding - * internal resource descriptor - * - ******************************************************************************/ -acpi_status -acpi_rs_convert_aml_to_resource(struct acpi_resource *resource, - union aml_resource *aml, - struct acpi_rsconvert_info *info) -{ - acpi_rs_length aml_resource_length; - void *source; - void *destination; - char *target; - u8 count; - u8 flags_mode = FALSE; - u16 item_count = 0; - u16 temp16 = 0; - - ACPI_FUNCTION_TRACE(rs_convert_aml_to_resource); - - if (((acpi_size) resource) & 0x3) { - - /* Each internal resource struct is expected to be 32-bit aligned */ - - ACPI_WARNING((AE_INFO, - "Misaligned resource pointer (get): %p Type %2.2X Len %X", - resource, resource->type, resource->length)); - } - - /* Extract the resource Length field (does not include header length) */ - - aml_resource_length = acpi_ut_get_resource_length(aml); - - /* - * First table entry must be ACPI_RSC_INITxxx and must contain the - * table length (# of table entries) - */ - count = INIT_TABLE_LENGTH(info); - - while (count) { - /* - * Source is the external AML byte stream buffer, - * destination is the internal resource descriptor - */ - source = ACPI_ADD_PTR(void, aml, info->aml_offset); - destination = - ACPI_ADD_PTR(void, resource, info->resource_offset); - - switch (info->opcode) { - case ACPI_RSC_INITGET: - /* - * Get the resource type and the initial (minimum) length - */ - ACPI_MEMSET(resource, 0, INIT_RESOURCE_LENGTH(info)); - resource->type = INIT_RESOURCE_TYPE(info); - resource->length = INIT_RESOURCE_LENGTH(info); - break; - - case ACPI_RSC_INITSET: - break; - - case ACPI_RSC_FLAGINIT: - - flags_mode = TRUE; - break; - - case ACPI_RSC_1BITFLAG: - /* - * Mask and shift the flag bit - */ - ACPI_SET8(destination) = (u8) - ((ACPI_GET8(source) >> info->value) & 0x01); - break; - - case ACPI_RSC_2BITFLAG: - /* - * Mask and shift the flag bits - */ - ACPI_SET8(destination) = (u8) - ((ACPI_GET8(source) >> info->value) & 0x03); - break; - - case ACPI_RSC_COUNT: - - item_count = ACPI_GET8(source); - ACPI_SET8(destination) = (u8) item_count; - - resource->length = resource->length + - (info->value * (item_count - 1)); - break; - - case ACPI_RSC_COUNT16: - - item_count = aml_resource_length; - ACPI_SET16(destination) = item_count; - - resource->length = resource->length + - (info->value * (item_count - 1)); - break; - - case ACPI_RSC_LENGTH: - - resource->length = resource->length + info->value; - break; - - case ACPI_RSC_MOVE8: - case ACPI_RSC_MOVE16: - case ACPI_RSC_MOVE32: - case ACPI_RSC_MOVE64: - /* - * Raw data move. Use the Info value field unless item_count has - * been previously initialized via a COUNT opcode - */ - if (info->value) { - item_count = info->value; - } - acpi_rs_move_data(destination, source, item_count, - info->opcode); - break; - - case ACPI_RSC_SET8: - - ACPI_MEMSET(destination, info->aml_offset, info->value); - break; - - case ACPI_RSC_DATA8: - - target = ACPI_ADD_PTR(char, resource, info->value); - ACPI_MEMCPY(destination, source, ACPI_GET16(target)); - break; - - case ACPI_RSC_ADDRESS: - /* - * Common handler for address descriptor flags - */ - if (!acpi_rs_get_address_common(resource, aml)) { - return_ACPI_STATUS - (AE_AML_INVALID_RESOURCE_TYPE); - } - break; - - case ACPI_RSC_SOURCE: - /* - * Optional resource_source (Index and String) - */ - resource->length += - acpi_rs_get_resource_source(aml_resource_length, - info->value, - destination, aml, NULL); - break; - - case ACPI_RSC_SOURCEX: - /* - * Optional resource_source (Index and String). This is the more - * complicated case used by the Interrupt() macro - */ - target = - ACPI_ADD_PTR(char, resource, - info->aml_offset + (item_count * 4)); - - resource->length += - acpi_rs_get_resource_source(aml_resource_length, - (acpi_rs_length) (((item_count - 1) * sizeof(u32)) + info->value), destination, aml, target); - break; - - case ACPI_RSC_BITMASK: - /* - * 8-bit encoded bitmask (DMA macro) - */ - item_count = - acpi_rs_decode_bitmask(ACPI_GET8(source), - destination); - if (item_count) { - resource->length += (item_count - 1); - } - - target = ACPI_ADD_PTR(char, resource, info->value); - ACPI_SET8(target) = (u8) item_count; - break; - - case ACPI_RSC_BITMASK16: - /* - * 16-bit encoded bitmask (IRQ macro) - */ - ACPI_MOVE_16_TO_16(&temp16, source); - - item_count = - acpi_rs_decode_bitmask(temp16, destination); - if (item_count) { - resource->length += (item_count - 1); - } - - target = ACPI_ADD_PTR(char, resource, info->value); - ACPI_SET8(target) = (u8) item_count; - break; - - case ACPI_RSC_EXIT_NE: - /* - * Control - Exit conversion if not equal - */ - switch (info->resource_offset) { - case ACPI_RSC_COMPARE_AML_LENGTH: - if (aml_resource_length != info->value) { - goto exit; - } - break; - - case ACPI_RSC_COMPARE_VALUE: - if (ACPI_GET8(source) != info->value) { - goto exit; - } - break; - - default: - - ACPI_ERROR((AE_INFO, - "Invalid conversion sub-opcode")); - return_ACPI_STATUS(AE_BAD_PARAMETER); - } - break; - - default: - - ACPI_ERROR((AE_INFO, "Invalid conversion opcode")); - return_ACPI_STATUS(AE_BAD_PARAMETER); - } - - count--; - info++; - } - - exit: - if (!flags_mode) { - - /* Round the resource struct length up to the next boundary (32 or 64) */ - - resource->length = - (u32) ACPI_ROUND_UP_TO_NATIVE_WORD(resource->length); - } - return_ACPI_STATUS(AE_OK); -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_convert_resource_to_aml - * - * PARAMETERS: Resource - Pointer to the resource descriptor - * Aml - Where the AML descriptor is returned - * Info - Pointer to appropriate conversion table - * - * RETURN: Status - * - * DESCRIPTION: Convert an internal resource descriptor to the corresponding - * external AML resource descriptor. - * - ******************************************************************************/ - -acpi_status -acpi_rs_convert_resource_to_aml(struct acpi_resource *resource, - union aml_resource *aml, - struct acpi_rsconvert_info *info) -{ - void *source = NULL; - void *destination; - acpi_rsdesc_size aml_length = 0; - u8 count; - u16 temp16 = 0; - u16 item_count = 0; - - ACPI_FUNCTION_TRACE(rs_convert_resource_to_aml); - - /* - * First table entry must be ACPI_RSC_INITxxx and must contain the - * table length (# of table entries) - */ - count = INIT_TABLE_LENGTH(info); - - while (count) { - /* - * Source is the internal resource descriptor, - * destination is the external AML byte stream buffer - */ - source = ACPI_ADD_PTR(void, resource, info->resource_offset); - destination = ACPI_ADD_PTR(void, aml, info->aml_offset); - - switch (info->opcode) { - case ACPI_RSC_INITSET: - - ACPI_MEMSET(aml, 0, INIT_RESOURCE_LENGTH(info)); - aml_length = INIT_RESOURCE_LENGTH(info); - acpi_rs_set_resource_header(INIT_RESOURCE_TYPE(info), - aml_length, aml); - break; - - case ACPI_RSC_INITGET: - break; - - case ACPI_RSC_FLAGINIT: - /* - * Clear the flag byte - */ - ACPI_SET8(destination) = 0; - break; - - case ACPI_RSC_1BITFLAG: - /* - * Mask and shift the flag bit - */ - ACPI_SET8(destination) |= (u8) - ((ACPI_GET8(source) & 0x01) << info->value); - break; - - case ACPI_RSC_2BITFLAG: - /* - * Mask and shift the flag bits - */ - ACPI_SET8(destination) |= (u8) - ((ACPI_GET8(source) & 0x03) << info->value); - break; - - case ACPI_RSC_COUNT: - - item_count = ACPI_GET8(source); - ACPI_SET8(destination) = (u8) item_count; - - aml_length = - (u16) (aml_length + - (info->value * (item_count - 1))); - break; - - case ACPI_RSC_COUNT16: - - item_count = ACPI_GET16(source); - aml_length = (u16) (aml_length + item_count); - acpi_rs_set_resource_length(aml_length, aml); - break; - - case ACPI_RSC_LENGTH: - - acpi_rs_set_resource_length(info->value, aml); - break; - - case ACPI_RSC_MOVE8: - case ACPI_RSC_MOVE16: - case ACPI_RSC_MOVE32: - case ACPI_RSC_MOVE64: - - if (info->value) { - item_count = info->value; - } - acpi_rs_move_data(destination, source, item_count, - info->opcode); - break; - - case ACPI_RSC_ADDRESS: - - /* Set the Resource Type, General Flags, and Type-Specific Flags */ - - acpi_rs_set_address_common(aml, resource); - break; - - case ACPI_RSC_SOURCEX: - /* - * Optional resource_source (Index and String) - */ - aml_length = - acpi_rs_set_resource_source(aml, (acpi_rs_length) - aml_length, source); - acpi_rs_set_resource_length(aml_length, aml); - break; - - case ACPI_RSC_SOURCE: - /* - * Optional resource_source (Index and String). This is the more - * complicated case used by the Interrupt() macro - */ - aml_length = - acpi_rs_set_resource_source(aml, info->value, - source); - acpi_rs_set_resource_length(aml_length, aml); - break; - - case ACPI_RSC_BITMASK: - /* - * 8-bit encoded bitmask (DMA macro) - */ - ACPI_SET8(destination) = (u8) - acpi_rs_encode_bitmask(source, - *ACPI_ADD_PTR(u8, resource, - info->value)); - break; - - case ACPI_RSC_BITMASK16: - /* - * 16-bit encoded bitmask (IRQ macro) - */ - temp16 = acpi_rs_encode_bitmask(source, - *ACPI_ADD_PTR(u8, - resource, - info-> - value)); - ACPI_MOVE_16_TO_16(destination, &temp16); - break; - - case ACPI_RSC_EXIT_LE: - /* - * Control - Exit conversion if less than or equal - */ - if (item_count <= info->value) { - goto exit; - } - break; - - case ACPI_RSC_EXIT_NE: - /* - * Control - Exit conversion if not equal - */ - switch (COMPARE_OPCODE(info)) { - case ACPI_RSC_COMPARE_VALUE: - - if (*ACPI_ADD_PTR(u8, resource, - COMPARE_TARGET(info)) != - COMPARE_VALUE(info)) { - goto exit; - } - break; - - default: - - ACPI_ERROR((AE_INFO, - "Invalid conversion sub-opcode")); - return_ACPI_STATUS(AE_BAD_PARAMETER); - } - break; - - case ACPI_RSC_EXIT_EQ: - /* - * Control - Exit conversion if equal - */ - if (*ACPI_ADD_PTR(u8, resource, - COMPARE_TARGET(info)) == - COMPARE_VALUE(info)) { - goto exit; - } - break; - - default: - - ACPI_ERROR((AE_INFO, "Invalid conversion opcode")); - return_ACPI_STATUS(AE_BAD_PARAMETER); - } - - count--; - info++; - } - - exit: - return_ACPI_STATUS(AE_OK); -} - -#if 0 -/* Previous resource validations */ - -if (aml->ext_address64.revision_iD != AML_RESOURCE_EXTENDED_ADDRESS_REVISION) { - return_ACPI_STATUS(AE_SUPPORT); -} - -if (resource->data.start_dpf.performance_robustness >= 3) { - return_ACPI_STATUS(AE_AML_BAD_RESOURCE_VALUE); -} - -if (((aml->irq.flags & 0x09) == 0x00) || ((aml->irq.flags & 0x09) == 0x09)) { - /* - * Only [active_high, edge_sensitive] or [active_low, level_sensitive] - * polarity/trigger interrupts are allowed (ACPI spec, section - * "IRQ Format"), so 0x00 and 0x09 are illegal. - */ - ACPI_ERROR((AE_INFO, - "Invalid interrupt polarity/trigger in resource list, %X", - aml->irq.flags)); - return_ACPI_STATUS(AE_BAD_DATA); -} - -resource->data.extended_irq.interrupt_count = temp8; -if (temp8 < 1) { - - /* Must have at least one IRQ */ - - return_ACPI_STATUS(AE_AML_BAD_RESOURCE_LENGTH); -} - -if (resource->data.dma.transfer == 0x03) { - ACPI_ERROR((AE_INFO, "Invalid DMA.Transfer preference (3)")); - return_ACPI_STATUS(AE_BAD_DATA); -} -#endif diff --git a/drivers/acpi/resources/rsutils.c b/drivers/acpi/resources/rsutils.c deleted file mode 100644 index f7b3bcd59ba7..000000000000 --- a/drivers/acpi/resources/rsutils.c +++ /dev/null @@ -1,726 +0,0 @@ -/******************************************************************************* - * - * Module Name: rsutils - Utilities for the resource manager - * - ******************************************************************************/ - -/* - * Copyright (C) 2000 - 2008, Intel Corp. - * 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. - */ - -#include <acpi/acpi.h> -#include <acpi/acnamesp.h> -#include <acpi/acresrc.h> - -#define _COMPONENT ACPI_RESOURCES -ACPI_MODULE_NAME("rsutils") - -/******************************************************************************* - * - * FUNCTION: acpi_rs_decode_bitmask - * - * PARAMETERS: Mask - Bitmask to decode - * List - Where the converted list is returned - * - * RETURN: Count of bits set (length of list) - * - * DESCRIPTION: Convert a bit mask into a list of values - * - ******************************************************************************/ -u8 acpi_rs_decode_bitmask(u16 mask, u8 * list) -{ - u8 i; - u8 bit_count; - - ACPI_FUNCTION_ENTRY(); - - /* Decode the mask bits */ - - for (i = 0, bit_count = 0; mask; i++) { - if (mask & 0x0001) { - list[bit_count] = i; - bit_count++; - } - - mask >>= 1; - } - - return (bit_count); -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_encode_bitmask - * - * PARAMETERS: List - List of values to encode - * Count - Length of list - * - * RETURN: Encoded bitmask - * - * DESCRIPTION: Convert a list of values to an encoded bitmask - * - ******************************************************************************/ - -u16 acpi_rs_encode_bitmask(u8 * list, u8 count) -{ - u32 i; - u16 mask; - - ACPI_FUNCTION_ENTRY(); - - /* Encode the list into a single bitmask */ - - for (i = 0, mask = 0; i < count; i++) { - mask |= (0x1 << list[i]); - } - - return mask; -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_move_data - * - * PARAMETERS: Destination - Pointer to the destination descriptor - * Source - Pointer to the source descriptor - * item_count - How many items to move - * move_type - Byte width - * - * RETURN: None - * - * DESCRIPTION: Move multiple data items from one descriptor to another. Handles - * alignment issues and endian issues if necessary, as configured - * via the ACPI_MOVE_* macros. (This is why a memcpy is not used) - * - ******************************************************************************/ - -void -acpi_rs_move_data(void *destination, void *source, u16 item_count, u8 move_type) -{ - u32 i; - - ACPI_FUNCTION_ENTRY(); - - /* One move per item */ - - for (i = 0; i < item_count; i++) { - switch (move_type) { - /* - * For the 8-bit case, we can perform the move all at once - * since there are no alignment or endian issues - */ - case ACPI_RSC_MOVE8: - ACPI_MEMCPY(destination, source, item_count); - return; - - /* - * 16-, 32-, and 64-bit cases must use the move macros that perform - * endian conversion and/or accomodate hardware that cannot perform - * misaligned memory transfers - */ - case ACPI_RSC_MOVE16: - ACPI_MOVE_16_TO_16(&ACPI_CAST_PTR(u16, destination)[i], - &ACPI_CAST_PTR(u16, source)[i]); - break; - - case ACPI_RSC_MOVE32: - ACPI_MOVE_32_TO_32(&ACPI_CAST_PTR(u32, destination)[i], - &ACPI_CAST_PTR(u32, source)[i]); - break; - - case ACPI_RSC_MOVE64: - ACPI_MOVE_64_TO_64(&ACPI_CAST_PTR(u64, destination)[i], - &ACPI_CAST_PTR(u64, source)[i]); - break; - - default: - return; - } - } -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_set_resource_length - * - * PARAMETERS: total_length - Length of the AML descriptor, including - * the header and length fields. - * Aml - Pointer to the raw AML descriptor - * - * RETURN: None - * - * DESCRIPTION: Set the resource_length field of an AML - * resource descriptor, both Large and Small descriptors are - * supported automatically. Note: Descriptor Type field must - * be valid. - * - ******************************************************************************/ - -void -acpi_rs_set_resource_length(acpi_rsdesc_size total_length, - union aml_resource *aml) -{ - acpi_rs_length resource_length; - - ACPI_FUNCTION_ENTRY(); - - /* Length is the total descriptor length minus the header length */ - - resource_length = (acpi_rs_length) - (total_length - acpi_ut_get_resource_header_length(aml)); - - /* Length is stored differently for large and small descriptors */ - - if (aml->small_header.descriptor_type & ACPI_RESOURCE_NAME_LARGE) { - - /* Large descriptor -- bytes 1-2 contain the 16-bit length */ - - ACPI_MOVE_16_TO_16(&aml->large_header.resource_length, - &resource_length); - } else { - /* Small descriptor -- bits 2:0 of byte 0 contain the length */ - - aml->small_header.descriptor_type = (u8) - - /* Clear any existing length, preserving descriptor type bits */ - ((aml->small_header. - descriptor_type & ~ACPI_RESOURCE_NAME_SMALL_LENGTH_MASK) - - | resource_length); - } -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_set_resource_header - * - * PARAMETERS: descriptor_type - Byte to be inserted as the type - * total_length - Length of the AML descriptor, including - * the header and length fields. - * Aml - Pointer to the raw AML descriptor - * - * RETURN: None - * - * DESCRIPTION: Set the descriptor_type and resource_length fields of an AML - * resource descriptor, both Large and Small descriptors are - * supported automatically - * - ******************************************************************************/ - -void -acpi_rs_set_resource_header(u8 descriptor_type, - acpi_rsdesc_size total_length, - union aml_resource *aml) -{ - ACPI_FUNCTION_ENTRY(); - - /* Set the Resource Type */ - - aml->small_header.descriptor_type = descriptor_type; - - /* Set the Resource Length */ - - acpi_rs_set_resource_length(total_length, aml); -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_strcpy - * - * PARAMETERS: Destination - Pointer to the destination string - * Source - Pointer to the source string - * - * RETURN: String length, including NULL terminator - * - * DESCRIPTION: Local string copy that returns the string length, saving a - * strcpy followed by a strlen. - * - ******************************************************************************/ - -static u16 acpi_rs_strcpy(char *destination, char *source) -{ - u16 i; - - ACPI_FUNCTION_ENTRY(); - - for (i = 0; source[i]; i++) { - destination[i] = source[i]; - } - - destination[i] = 0; - - /* Return string length including the NULL terminator */ - - return ((u16) (i + 1)); -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_get_resource_source - * - * PARAMETERS: resource_length - Length field of the descriptor - * minimum_length - Minimum length of the descriptor (minus - * any optional fields) - * resource_source - Where the resource_source is returned - * Aml - Pointer to the raw AML descriptor - * string_ptr - (optional) where to store the actual - * resource_source string - * - * RETURN: Length of the string plus NULL terminator, rounded up to native - * word boundary - * - * DESCRIPTION: Copy the optional resource_source data from a raw AML descriptor - * to an internal resource descriptor - * - ******************************************************************************/ - -acpi_rs_length -acpi_rs_get_resource_source(acpi_rs_length resource_length, - acpi_rs_length minimum_length, - struct acpi_resource_source * resource_source, - union aml_resource * aml, char *string_ptr) -{ - acpi_rsdesc_size total_length; - u8 *aml_resource_source; - - ACPI_FUNCTION_ENTRY(); - - total_length = - resource_length + sizeof(struct aml_resource_large_header); - aml_resource_source = ACPI_ADD_PTR(u8, aml, minimum_length); - - /* - * resource_source is present if the length of the descriptor is longer than - * the minimum length. - * - * Note: Some resource descriptors will have an additional null, so - * we add 1 to the minimum length. - */ - if (total_length > (acpi_rsdesc_size) (minimum_length + 1)) { - - /* Get the resource_source_index */ - - resource_source->index = aml_resource_source[0]; - - resource_source->string_ptr = string_ptr; - if (!string_ptr) { - /* - * String destination pointer is not specified; Set the String - * pointer to the end of the current resource_source structure. - */ - resource_source->string_ptr = - ACPI_ADD_PTR(char, resource_source, - sizeof(struct acpi_resource_source)); - } - - /* - * In order for the Resource length to be a multiple of the native - * word, calculate the length of the string (+1 for NULL terminator) - * and expand to the next word multiple. - * - * Zero the entire area of the buffer. - */ - total_length = (u32) - ACPI_STRLEN(ACPI_CAST_PTR(char, &aml_resource_source[1])) + 1; - total_length = (u32) ACPI_ROUND_UP_TO_NATIVE_WORD(total_length); - - ACPI_MEMSET(resource_source->string_ptr, 0, total_length); - - /* Copy the resource_source string to the destination */ - - resource_source->string_length = - acpi_rs_strcpy(resource_source->string_ptr, - ACPI_CAST_PTR(char, - &aml_resource_source[1])); - - return ((acpi_rs_length) total_length); - } - - /* resource_source is not present */ - - resource_source->index = 0; - resource_source->string_length = 0; - resource_source->string_ptr = NULL; - return (0); -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_set_resource_source - * - * PARAMETERS: Aml - Pointer to the raw AML descriptor - * minimum_length - Minimum length of the descriptor (minus - * any optional fields) - * resource_source - Internal resource_source - - * - * RETURN: Total length of the AML descriptor - * - * DESCRIPTION: Convert an optional resource_source from internal format to a - * raw AML resource descriptor - * - ******************************************************************************/ - -acpi_rsdesc_size -acpi_rs_set_resource_source(union aml_resource * aml, - acpi_rs_length minimum_length, - struct acpi_resource_source * resource_source) -{ - u8 *aml_resource_source; - acpi_rsdesc_size descriptor_length; - - ACPI_FUNCTION_ENTRY(); - - descriptor_length = minimum_length; - - /* Non-zero string length indicates presence of a resource_source */ - - if (resource_source->string_length) { - - /* Point to the end of the AML descriptor */ - - aml_resource_source = ACPI_ADD_PTR(u8, aml, minimum_length); - - /* Copy the resource_source_index */ - - aml_resource_source[0] = (u8) resource_source->index; - - /* Copy the resource_source string */ - - ACPI_STRCPY(ACPI_CAST_PTR(char, &aml_resource_source[1]), - resource_source->string_ptr); - - /* - * Add the length of the string (+ 1 for null terminator) to the - * final descriptor length - */ - descriptor_length += - ((acpi_rsdesc_size) resource_source->string_length + 1); - } - - /* Return the new total length of the AML descriptor */ - - return (descriptor_length); -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_get_prt_method_data - * - * PARAMETERS: Node - Device node - * ret_buffer - Pointer to a buffer structure for the - * results - * - * RETURN: Status - * - * DESCRIPTION: This function is called to get the _PRT value of an object - * contained in an object specified by the handle passed in - * - * If the function fails an appropriate status will be returned - * and the contents of the callers buffer is undefined. - * - ******************************************************************************/ - -acpi_status -acpi_rs_get_prt_method_data(struct acpi_namespace_node * node, - struct acpi_buffer * ret_buffer) -{ - union acpi_operand_object *obj_desc; - acpi_status status; - - ACPI_FUNCTION_TRACE(rs_get_prt_method_data); - - /* Parameters guaranteed valid by caller */ - - /* Execute the method, no parameters */ - - status = acpi_ut_evaluate_object(node, METHOD_NAME__PRT, - ACPI_BTYPE_PACKAGE, &obj_desc); - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); - } - - /* - * Create a resource linked list from the byte stream buffer that comes - * back from the _CRS method execution. - */ - status = acpi_rs_create_pci_routing_table(obj_desc, ret_buffer); - - /* On exit, we must delete the object returned by evaluate_object */ - - acpi_ut_remove_reference(obj_desc); - return_ACPI_STATUS(status); -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_get_crs_method_data - * - * PARAMETERS: Node - Device node - * ret_buffer - Pointer to a buffer structure for the - * results - * - * RETURN: Status - * - * DESCRIPTION: This function is called to get the _CRS value of an object - * contained in an object specified by the handle passed in - * - * If the function fails an appropriate status will be returned - * and the contents of the callers buffer is undefined. - * - ******************************************************************************/ - -acpi_status -acpi_rs_get_crs_method_data(struct acpi_namespace_node *node, - struct acpi_buffer *ret_buffer) -{ - union acpi_operand_object *obj_desc; - acpi_status status; - - ACPI_FUNCTION_TRACE(rs_get_crs_method_data); - - /* Parameters guaranteed valid by caller */ - - /* Execute the method, no parameters */ - - status = acpi_ut_evaluate_object(node, METHOD_NAME__CRS, - ACPI_BTYPE_BUFFER, &obj_desc); - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); - } - - /* - * Make the call to create a resource linked list from the - * byte stream buffer that comes back from the _CRS method - * execution. - */ - status = acpi_rs_create_resource_list(obj_desc, ret_buffer); - - /* On exit, we must delete the object returned by evaluate_object */ - - acpi_ut_remove_reference(obj_desc); - return_ACPI_STATUS(status); -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_get_prs_method_data - * - * PARAMETERS: Node - Device node - * ret_buffer - Pointer to a buffer structure for the - * results - * - * RETURN: Status - * - * DESCRIPTION: This function is called to get the _PRS value of an object - * contained in an object specified by the handle passed in - * - * If the function fails an appropriate status will be returned - * and the contents of the callers buffer is undefined. - * - ******************************************************************************/ - -#ifdef ACPI_FUTURE_USAGE -acpi_status -acpi_rs_get_prs_method_data(struct acpi_namespace_node *node, - struct acpi_buffer *ret_buffer) -{ - union acpi_operand_object *obj_desc; - acpi_status status; - - ACPI_FUNCTION_TRACE(rs_get_prs_method_data); - - /* Parameters guaranteed valid by caller */ - - /* Execute the method, no parameters */ - - status = acpi_ut_evaluate_object(node, METHOD_NAME__PRS, - ACPI_BTYPE_BUFFER, &obj_desc); - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); - } - - /* - * Make the call to create a resource linked list from the - * byte stream buffer that comes back from the _CRS method - * execution. - */ - status = acpi_rs_create_resource_list(obj_desc, ret_buffer); - - /* On exit, we must delete the object returned by evaluate_object */ - - acpi_ut_remove_reference(obj_desc); - return_ACPI_STATUS(status); -} -#endif /* ACPI_FUTURE_USAGE */ - -/******************************************************************************* - * - * FUNCTION: acpi_rs_get_method_data - * - * PARAMETERS: Handle - Handle to the containing object - * Path - Path to method, relative to Handle - * ret_buffer - Pointer to a buffer structure for the - * results - * - * RETURN: Status - * - * DESCRIPTION: This function is called to get the _CRS or _PRS value of an - * object contained in an object specified by the handle passed in - * - * If the function fails an appropriate status will be returned - * and the contents of the callers buffer is undefined. - * - ******************************************************************************/ - -acpi_status -acpi_rs_get_method_data(acpi_handle handle, - char *path, struct acpi_buffer *ret_buffer) -{ - union acpi_operand_object *obj_desc; - acpi_status status; - - ACPI_FUNCTION_TRACE(rs_get_method_data); - - /* Parameters guaranteed valid by caller */ - - /* Execute the method, no parameters */ - - status = - acpi_ut_evaluate_object(handle, path, ACPI_BTYPE_BUFFER, &obj_desc); - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); - } - - /* - * Make the call to create a resource linked list from the - * byte stream buffer that comes back from the method - * execution. - */ - status = acpi_rs_create_resource_list(obj_desc, ret_buffer); - - /* On exit, we must delete the object returned by evaluate_object */ - - acpi_ut_remove_reference(obj_desc); - return_ACPI_STATUS(status); -} - -/******************************************************************************* - * - * FUNCTION: acpi_rs_set_srs_method_data - * - * PARAMETERS: Node - Device node - * in_buffer - Pointer to a buffer structure of the - * parameter - * - * RETURN: Status - * - * DESCRIPTION: This function is called to set the _SRS of an object contained - * in an object specified by the handle passed in - * - * If the function fails an appropriate status will be returned - * and the contents of the callers buffer is undefined. - * - * Note: Parameters guaranteed valid by caller - * - ******************************************************************************/ - -acpi_status -acpi_rs_set_srs_method_data(struct acpi_namespace_node *node, - struct acpi_buffer *in_buffer) -{ - struct acpi_evaluate_info *info; - union acpi_operand_object *args[2]; - acpi_status status; - struct acpi_buffer buffer; - - ACPI_FUNCTION_TRACE(rs_set_srs_method_data); - - /* Allocate and initialize the evaluation information block */ - - info = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_evaluate_info)); - if (!info) { - return_ACPI_STATUS(AE_NO_MEMORY); - } - - info->prefix_node = node; - info->pathname = METHOD_NAME__SRS; - info->parameters = args; - info->flags = ACPI_IGNORE_RETURN_VALUE; - - /* - * The in_buffer parameter will point to a linked list of - * resource parameters. It needs to be formatted into a - * byte stream to be sent in as an input parameter to _SRS - * - * Convert the linked list into a byte stream - */ - buffer.length = ACPI_ALLOCATE_LOCAL_BUFFER; - status = acpi_rs_create_aml_resources(in_buffer->pointer, &buffer); - if (ACPI_FAILURE(status)) { - goto cleanup; - } - - /* Create and initialize the method parameter object */ - - args[0] = acpi_ut_create_internal_object(ACPI_TYPE_BUFFER); - if (!args[0]) { - /* - * Must free the buffer allocated above (otherwise it is freed - * later) - */ - ACPI_FREE(buffer.pointer); - status = AE_NO_MEMORY; - goto cleanup; - } - - args[0]->buffer.length = (u32) buffer.length; - args[0]->buffer.pointer = buffer.pointer; - args[0]->common.flags = AOPOBJ_DATA_VALID; - args[1] = NULL; - - /* Execute the method, no return value is expected */ - - status = acpi_ns_evaluate(info); - - /* Clean up and return the status from acpi_ns_evaluate */ - - acpi_ut_remove_reference(args[0]); - - cleanup: - ACPI_FREE(info); - return_ACPI_STATUS(status); -} diff --git a/drivers/acpi/resources/rsxface.c b/drivers/acpi/resources/rsxface.c deleted file mode 100644 index f59f4c4e034c..000000000000 --- a/drivers/acpi/resources/rsxface.c +++ /dev/null @@ -1,570 +0,0 @@ -/******************************************************************************* - * - * Module Name: rsxface - Public interfaces to the resource manager - * - ******************************************************************************/ - -/* - * Copyright (C) 2000 - 2008, Intel Corp. - * 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. - */ - -#include <acpi/acpi.h> -#include <acpi/acresrc.h> -#include <acpi/acnamesp.h> - -#define _COMPONENT ACPI_RESOURCES -ACPI_MODULE_NAME("rsxface") - -/* Local macros for 16,32-bit to 64-bit conversion */ -#define ACPI_COPY_FIELD(out, in, field) ((out)->field = (in)->field) -#define ACPI_COPY_ADDRESS(out, in) \ - ACPI_COPY_FIELD(out, in, resource_type); \ - ACPI_COPY_FIELD(out, in, producer_consumer); \ - ACPI_COPY_FIELD(out, in, decode); \ - ACPI_COPY_FIELD(out, in, min_address_fixed); \ - ACPI_COPY_FIELD(out, in, max_address_fixed); \ - ACPI_COPY_FIELD(out, in, info); \ - ACPI_COPY_FIELD(out, in, granularity); \ - ACPI_COPY_FIELD(out, in, minimum); \ - ACPI_COPY_FIELD(out, in, maximum); \ - ACPI_COPY_FIELD(out, in, translation_offset); \ - ACPI_COPY_FIELD(out, in, address_length); \ - ACPI_COPY_FIELD(out, in, resource_source); -/* Local prototypes */ -static acpi_status -acpi_rs_match_vendor_resource(struct acpi_resource *resource, void *context); - -static acpi_status -acpi_rs_validate_parameters(acpi_handle device_handle, - struct acpi_buffer *buffer, - struct acpi_namespace_node **return_node); - -/******************************************************************************* - * - * FUNCTION: acpi_rs_validate_parameters - * - * PARAMETERS: device_handle - Handle to a device - * Buffer - Pointer to a data buffer - * return_node - Pointer to where the device node is returned - * - * RETURN: Status - * - * DESCRIPTION: Common parameter validation for resource interfaces - * - ******************************************************************************/ - -static acpi_status -acpi_rs_validate_parameters(acpi_handle device_handle, - struct acpi_buffer *buffer, - struct acpi_namespace_node **return_node) -{ - acpi_status status; - struct acpi_namespace_node *node; - - ACPI_FUNCTION_TRACE(rs_validate_parameters); - - /* - * Must have a valid handle to an ACPI device - */ - if (!device_handle) { - return_ACPI_STATUS(AE_BAD_PARAMETER); - } - - node = acpi_ns_map_handle_to_node(device_handle); - if (!node) { - return_ACPI_STATUS(AE_BAD_PARAMETER); - } - - if (node->type != ACPI_TYPE_DEVICE) { - return_ACPI_STATUS(AE_TYPE); - } - - /* - * Validate the user buffer object - * - * if there is a non-zero buffer length we also need a valid pointer in - * the buffer. If it's a zero buffer length, we'll be returning the - * needed buffer size (later), so keep going. - */ - status = acpi_ut_validate_buffer(buffer); - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); - } - - *return_node = node; - return_ACPI_STATUS(AE_OK); -} - -/******************************************************************************* - * - * FUNCTION: acpi_get_irq_routing_table - * - * PARAMETERS: device_handle - Handle to the Bus device we are querying - * ret_buffer - Pointer to a buffer to receive the - * current resources for the device - * - * RETURN: Status - * - * DESCRIPTION: This function is called to get the IRQ routing table for a - * specific bus. The caller must first acquire a handle for the - * desired bus. The routine table is placed in the buffer pointed - * to by the ret_buffer variable parameter. - * - * If the function fails an appropriate status will be returned - * and the value of ret_buffer is undefined. - * - * This function attempts to execute the _PRT method contained in - * the object indicated by the passed device_handle. - * - ******************************************************************************/ - -acpi_status -acpi_get_irq_routing_table(acpi_handle device_handle, - struct acpi_buffer *ret_buffer) -{ - acpi_status status; - struct acpi_namespace_node *node; - - ACPI_FUNCTION_TRACE(acpi_get_irq_routing_table); - - /* Validate parameters then dispatch to internal routine */ - - status = acpi_rs_validate_parameters(device_handle, ret_buffer, &node); - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); - } - - status = acpi_rs_get_prt_method_data(node, ret_buffer); - return_ACPI_STATUS(status); -} - -ACPI_EXPORT_SYMBOL(acpi_get_irq_routing_table) - -/******************************************************************************* - * - * FUNCTION: acpi_get_current_resources - * - * PARAMETERS: device_handle - Handle to the device object for the - * device we are querying - * ret_buffer - Pointer to a buffer to receive the - * current resources for the device - * - * RETURN: Status - * - * DESCRIPTION: This function is called to get the current resources for a - * specific device. The caller must first acquire a handle for - * the desired device. The resource data is placed in the buffer - * pointed to by the ret_buffer variable parameter. - * - * If the function fails an appropriate status will be returned - * and the value of ret_buffer is undefined. - * - * This function attempts to execute the _CRS method contained in - * the object indicated by the passed device_handle. - * - ******************************************************************************/ -acpi_status -acpi_get_current_resources(acpi_handle device_handle, - struct acpi_buffer *ret_buffer) -{ - acpi_status status; - struct acpi_namespace_node *node; - - ACPI_FUNCTION_TRACE(acpi_get_current_resources); - - /* Validate parameters then dispatch to internal routine */ - - status = acpi_rs_validate_parameters(device_handle, ret_buffer, &node); - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); - } - - status = acpi_rs_get_crs_method_data(node, ret_buffer); - return_ACPI_STATUS(status); -} - -ACPI_EXPORT_SYMBOL(acpi_get_current_resources) -#ifdef ACPI_FUTURE_USAGE -/******************************************************************************* - * - * FUNCTION: acpi_get_possible_resources - * - * PARAMETERS: device_handle - Handle to the device object for the - * device we are querying - * ret_buffer - Pointer to a buffer to receive the - * resources for the device - * - * RETURN: Status - * - * DESCRIPTION: This function is called to get a list of the possible resources - * for a specific device. The caller must first acquire a handle - * for the desired device. The resource data is placed in the - * buffer pointed to by the ret_buffer variable. - * - * If the function fails an appropriate status will be returned - * and the value of ret_buffer is undefined. - * - ******************************************************************************/ -acpi_status -acpi_get_possible_resources(acpi_handle device_handle, - struct acpi_buffer *ret_buffer) -{ - acpi_status status; - struct acpi_namespace_node *node; - - ACPI_FUNCTION_TRACE(acpi_get_possible_resources); - - /* Validate parameters then dispatch to internal routine */ - - status = acpi_rs_validate_parameters(device_handle, ret_buffer, &node); - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); - } - - status = acpi_rs_get_prs_method_data(node, ret_buffer); - return_ACPI_STATUS(status); -} - -ACPI_EXPORT_SYMBOL(acpi_get_possible_resources) -#endif /* ACPI_FUTURE_USAGE */ -/******************************************************************************* - * - * FUNCTION: acpi_set_current_resources - * - * PARAMETERS: device_handle - Handle to the device object for the - * device we are setting resources - * in_buffer - Pointer to a buffer containing the - * resources to be set for the device - * - * RETURN: Status - * - * DESCRIPTION: This function is called to set the current resources for a - * specific device. The caller must first acquire a handle for - * the desired device. The resource data is passed to the routine - * the buffer pointed to by the in_buffer variable. - * - ******************************************************************************/ -acpi_status -acpi_set_current_resources(acpi_handle device_handle, - struct acpi_buffer *in_buffer) -{ - acpi_status status; - struct acpi_namespace_node *node; - - ACPI_FUNCTION_TRACE(acpi_set_current_resources); - - /* Validate the buffer, don't allow zero length */ - - if ((!in_buffer) || (!in_buffer->pointer) || (!in_buffer->length)) { - return_ACPI_STATUS(AE_BAD_PARAMETER); - } - - /* Validate parameters then dispatch to internal routine */ - - status = acpi_rs_validate_parameters(device_handle, in_buffer, &node); - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); - } - - status = acpi_rs_set_srs_method_data(node, in_buffer); - return_ACPI_STATUS(status); -} - -ACPI_EXPORT_SYMBOL(acpi_set_current_resources) - -/****************************************************************************** - * - * FUNCTION: acpi_resource_to_address64 - * - * PARAMETERS: Resource - Pointer to a resource - * Out - Pointer to the users's return buffer - * (a struct acpi_resource_address64) - * - * RETURN: Status - * - * DESCRIPTION: If the resource is an address16, address32, or address64, - * copy it to the address64 return buffer. This saves the - * caller from having to duplicate code for different-sized - * addresses. - * - ******************************************************************************/ -acpi_status -acpi_resource_to_address64(struct acpi_resource *resource, - struct acpi_resource_address64 *out) -{ - struct acpi_resource_address16 *address16; - struct acpi_resource_address32 *address32; - - if (!resource || !out) { - return (AE_BAD_PARAMETER); - } - - /* Convert 16 or 32 address descriptor to 64 */ - - switch (resource->type) { - case ACPI_RESOURCE_TYPE_ADDRESS16: - - address16 = (struct acpi_resource_address16 *)&resource->data; - ACPI_COPY_ADDRESS(out, address16); - break; - - case ACPI_RESOURCE_TYPE_ADDRESS32: - - address32 = (struct acpi_resource_address32 *)&resource->data; - ACPI_COPY_ADDRESS(out, address32); - break; - - case ACPI_RESOURCE_TYPE_ADDRESS64: - - /* Simple copy for 64 bit source */ - - ACPI_MEMCPY(out, &resource->data, - sizeof(struct acpi_resource_address64)); - break; - - default: - return (AE_BAD_PARAMETER); - } - - return (AE_OK); -} - -ACPI_EXPORT_SYMBOL(acpi_resource_to_address64) - -/******************************************************************************* - * - * FUNCTION: acpi_get_vendor_resource - * - * PARAMETERS: device_handle - Handle for the parent device object - * Name - Method name for the parent resource - * (METHOD_NAME__CRS or METHOD_NAME__PRS) - * Uuid - Pointer to the UUID to be matched. - * includes both subtype and 16-byte UUID - * ret_buffer - Where the vendor resource is returned - * - * RETURN: Status - * - * DESCRIPTION: Walk a resource template for the specified evice to find a - * vendor-defined resource that matches the supplied UUID and - * UUID subtype. Returns a struct acpi_resource of type Vendor. - * - ******************************************************************************/ -acpi_status -acpi_get_vendor_resource(acpi_handle device_handle, - char *name, - struct acpi_vendor_uuid * uuid, - struct acpi_buffer * ret_buffer) -{ - struct acpi_vendor_walk_info info; - acpi_status status; - - /* Other parameters are validated by acpi_walk_resources */ - - if (!uuid || !ret_buffer) { - return (AE_BAD_PARAMETER); - } - - info.uuid = uuid; - info.buffer = ret_buffer; - info.status = AE_NOT_EXIST; - - /* Walk the _CRS or _PRS resource list for this device */ - - status = - acpi_walk_resources(device_handle, name, - acpi_rs_match_vendor_resource, &info); - if (ACPI_FAILURE(status)) { - return (status); - } - - return (info.status); -} - -ACPI_EXPORT_SYMBOL(acpi_get_vendor_resource) - -/******************************************************************************* - * - * FUNCTION: acpi_rs_match_vendor_resource - * - * PARAMETERS: acpi_walk_resource_callback - * - * RETURN: Status - * - * DESCRIPTION: Match a vendor resource via the ACPI 3.0 UUID - * - ******************************************************************************/ -static acpi_status -acpi_rs_match_vendor_resource(struct acpi_resource *resource, void *context) -{ - struct acpi_vendor_walk_info *info = context; - struct acpi_resource_vendor_typed *vendor; - struct acpi_buffer *buffer; - acpi_status status; - - /* Ignore all descriptors except Vendor */ - - if (resource->type != ACPI_RESOURCE_TYPE_VENDOR) { - return (AE_OK); - } - - vendor = &resource->data.vendor_typed; - - /* - * For a valid match, these conditions must hold: - * - * 1) Length of descriptor data must be at least as long as a UUID struct - * 2) The UUID subtypes must match - * 3) The UUID data must match - */ - if ((vendor->byte_length < (ACPI_UUID_LENGTH + 1)) || - (vendor->uuid_subtype != info->uuid->subtype) || - (ACPI_MEMCMP(vendor->uuid, info->uuid->data, ACPI_UUID_LENGTH))) { - return (AE_OK); - } - - /* Validate/Allocate/Clear caller buffer */ - - buffer = info->buffer; - status = acpi_ut_initialize_buffer(buffer, resource->length); - if (ACPI_FAILURE(status)) { - return (status); - } - - /* Found the correct resource, copy and return it */ - - ACPI_MEMCPY(buffer->pointer, resource, resource->length); - buffer->length = resource->length; - - /* Found the desired descriptor, terminate resource walk */ - - info->status = AE_OK; - return (AE_CTRL_TERMINATE); -} - -/******************************************************************************* - * - * FUNCTION: acpi_walk_resources - * - * PARAMETERS: device_handle - Handle to the device object for the - * device we are querying - * Name - Method name of the resources we want - * (METHOD_NAME__CRS or METHOD_NAME__PRS) - * user_function - Called for each resource - * Context - Passed to user_function - * - * RETURN: Status - * - * DESCRIPTION: Retrieves the current or possible resource list for the - * specified device. The user_function is called once for - * each resource in the list. - * - ******************************************************************************/ -acpi_status -acpi_walk_resources(acpi_handle device_handle, - char *name, - acpi_walk_resource_callback user_function, void *context) -{ - acpi_status status; - struct acpi_buffer buffer; - struct acpi_resource *resource; - struct acpi_resource *resource_end; - - ACPI_FUNCTION_TRACE(acpi_walk_resources); - - /* Parameter validation */ - - if (!device_handle || !user_function || !name || - (!ACPI_COMPARE_NAME(name, METHOD_NAME__CRS) && - !ACPI_COMPARE_NAME(name, METHOD_NAME__PRS))) { - return_ACPI_STATUS(AE_BAD_PARAMETER); - } - - /* Get the _CRS or _PRS resource list */ - - buffer.length = ACPI_ALLOCATE_LOCAL_BUFFER; - status = acpi_rs_get_method_data(device_handle, name, &buffer); - if (ACPI_FAILURE(status)) { - return_ACPI_STATUS(status); - } - - /* Buffer now contains the resource list */ - - resource = ACPI_CAST_PTR(struct acpi_resource, buffer.pointer); - resource_end = - ACPI_ADD_PTR(struct acpi_resource, buffer.pointer, buffer.length); - - /* Walk the resource list until the end_tag is found (or buffer end) */ - - while (resource < resource_end) { - - /* Sanity check the resource */ - - if (resource->type > ACPI_RESOURCE_TYPE_MAX) { - status = AE_AML_INVALID_RESOURCE_TYPE; - break; - } - - /* Invoke the user function, abort on any error returned */ - - status = user_function(resource, context); - if (ACPI_FAILURE(status)) { - if (status == AE_CTRL_TERMINATE) { - - /* This is an OK termination by the user function */ - - status = AE_OK; - } - break; - } - - /* end_tag indicates end-of-list */ - - if (resource->type == ACPI_RESOURCE_TYPE_END_TAG) { - break; - } - - /* Get the next resource descriptor */ - - resource = - ACPI_ADD_PTR(struct acpi_resource, resource, - resource->length); - } - - ACPI_FREE(buffer.pointer); - return_ACPI_STATUS(status); -} - -ACPI_EXPORT_SYMBOL(acpi_walk_resources) |