From bc4d4229dc8150c1877e8673fb6be5be18487b6d Mon Sep 17 00:00:00 2001 From: msmith Date: Tue, 29 May 2001 19:52:40 +0000 Subject: Import the 20010518 Intel ACPI CA release. Note that Intel's directory layout keeps changing, so to reduce repository thrash everything has been moved into a single directory. (repo copy involved) --- sys/contrib/dev/acpica/rslist.c | 547 +++++++++++++++++++--------------------- 1 file changed, 266 insertions(+), 281 deletions(-) (limited to 'sys/contrib/dev/acpica/rslist.c') diff --git a/sys/contrib/dev/acpica/rslist.c b/sys/contrib/dev/acpica/rslist.c index 60e10b4..d7ec0f9 100644 --- a/sys/contrib/dev/acpica/rslist.c +++ b/sys/contrib/dev/acpica/rslist.c @@ -1,8 +1,7 @@ /******************************************************************************* * - * Module Name: rslist - AcpiRsByteStreamToList - * AcpiListToByteStream - * $Revision: 11 $ + * Module Name: rslist - Linked list utilities + * $Revision: 17 $ * ******************************************************************************/ @@ -120,20 +119,65 @@ #include "acpi.h" #include "acresrc.h" -#define _COMPONENT RESOURCE_MANAGER +#define _COMPONENT ACPI_RESOURCES MODULE_NAME ("rslist") /******************************************************************************* * + * FUNCTION: AcpiRsGetResourceType + * + * PARAMETERS: ResourceStartByte - Byte 0 of a resource descriptor + * + * RETURN: The Resource Type (Name) with no extraneous bits + * + * DESCRIPTION: Extract the Resource Type/Name from the first byte of + * a resource descriptor. + * + ******************************************************************************/ + +UINT8 +AcpiRsGetResourceType ( + UINT8 ResourceStartByte) +{ + + /* + * Determine if this is a small or large resource + */ + switch (ResourceStartByte & RESOURCE_DESC_TYPE_MASK) + { + case RESOURCE_DESC_TYPE_SMALL: + + /* + * Small Resource Type -- Only bits 6:3 are valid + */ + return ((UINT8) (ResourceStartByte & RESOURCE_DESC_SMALL_MASK)); + break; + + + case RESOURCE_DESC_TYPE_LARGE: + + /* + * Large Resource Type -- All bits are valid + */ + return (ResourceStartByte); + break; + } + + return (0xFF); +} + + +/******************************************************************************* + * * FUNCTION: AcpiRsByteStreamToList * * PARAMETERS: ByteStreamBuffer - Pointer to the resource byte stream * ByteStreamBufferLength - Length of ByteStreamBuffer * OutputBuffer - Pointer to the buffer that will - * contain the output structures + * contain the output structures * - * RETURN: Status AE_OK if okay, else a valid ACPI_STATUS code + * RETURN: Status * * DESCRIPTION: Takes the resource byte stream and parses it, creating a * linked list of resources in the caller's output buffer @@ -162,222 +206,170 @@ AcpiRsByteStreamToList ( FALSE == EndTagProcessed) { /* - * Look at the next byte in the stream + * The next byte in the stream is the resource type */ - ResourceType = *ByteStreamBuffer; + ResourceType = AcpiRsGetResourceType (*ByteStreamBuffer); - /* - * See if this is a small or large resource - */ - if(ResourceType & 0x80) + switch (ResourceType) { + case RESOURCE_DESC_MEMORY_24: + /* + * 24-Bit Memory Resource + */ + Status = AcpiRsMemory24Resource (ByteStreamBuffer, + &BytesConsumed, Buffer, &StructureSize); + break; + + + case RESOURCE_DESC_LARGE_VENDOR: + /* + * Vendor Defined Resource + */ + Status = AcpiRsVendorResource (ByteStreamBuffer, + &BytesConsumed, Buffer, &StructureSize); + break; + + + case RESOURCE_DESC_MEMORY_32: + /* + * 32-Bit Memory Range Resource + */ + Status = AcpiRsMemory32RangeResource (ByteStreamBuffer, + &BytesConsumed, Buffer, &StructureSize); + break; + + + case RESOURCE_DESC_FIXED_MEMORY_32: + /* + * 32-Bit Fixed Memory Resource + */ + Status = AcpiRsFixedMemory32Resource (ByteStreamBuffer, + &BytesConsumed, Buffer, &StructureSize); + break; + + + case RESOURCE_DESC_QWORD_ADDRESS_SPACE: + /* + * 64-Bit Address Resource + */ + Status = AcpiRsAddress64Resource (ByteStreamBuffer, + &BytesConsumed, Buffer, &StructureSize); + break; + + + case RESOURCE_DESC_DWORD_ADDRESS_SPACE: + /* + * 32-Bit Address Resource + */ + Status = AcpiRsAddress32Resource (ByteStreamBuffer, + &BytesConsumed, Buffer, &StructureSize); + break; + + + case RESOURCE_DESC_WORD_ADDRESS_SPACE: + /* + * 16-Bit Address Resource + */ + Status = AcpiRsAddress16Resource (ByteStreamBuffer, + &BytesConsumed, Buffer, &StructureSize); + break; + + + case RESOURCE_DESC_EXTENDED_XRUPT: /* - * Large Resource Type - */ - switch (ResourceType) - { - case MEMORY_RANGE_24: - /* - * 24-Bit Memory Resource - */ - Status = AcpiRsMemory24Resource(ByteStreamBuffer, - &BytesConsumed, - Buffer, - &StructureSize); - - break; - - case LARGE_VENDOR_DEFINED: - /* - * Vendor Defined Resource - */ - Status = AcpiRsVendorResource(ByteStreamBuffer, - &BytesConsumed, - Buffer, - &StructureSize); - - break; - - case MEMORY_RANGE_32: - /* - * 32-Bit Memory Range Resource - */ - Status = AcpiRsMemory32RangeResource(ByteStreamBuffer, - &BytesConsumed, - Buffer, - &StructureSize); - - break; - - case FIXED_MEMORY_RANGE_32: - /* - * 32-Bit Fixed Memory Resource - */ - Status = AcpiRsFixedMemory32Resource(ByteStreamBuffer, - &BytesConsumed, - Buffer, - &StructureSize); - - break; - - case DWORD_ADDRESS_SPACE: - /* - * 32-Bit Address Resource - */ - Status = AcpiRsAddress32Resource(ByteStreamBuffer, - &BytesConsumed, - Buffer, - &StructureSize); - - break; - - case WORD_ADDRESS_SPACE: - /* - * 16-Bit Address Resource - */ - Status = AcpiRsAddress16Resource(ByteStreamBuffer, - &BytesConsumed, - Buffer, - &StructureSize); - - break; - - case EXTENDED_IRQ: - /* - * Extended IRQ - */ - Status = AcpiRsExtendedIrqResource(ByteStreamBuffer, - &BytesConsumed, - Buffer, - &StructureSize); - - break; - -/* TBD: [Future] 64-bit not currently supported */ -/* - case 0x8A: - break; -*/ - - default: - /* - * If we get here, everything is out of sync, - * so exit with an error - */ - return_ACPI_STATUS (AE_AML_ERROR); - break; - } + * Extended IRQ + */ + Status = AcpiRsExtendedIrqResource (ByteStreamBuffer, + &BytesConsumed, Buffer, &StructureSize); + break; + + + case RESOURCE_DESC_IRQ_FORMAT: + /* + * IRQ Resource + */ + Status = AcpiRsIrqResource (ByteStreamBuffer, + &BytesConsumed, Buffer, &StructureSize); + break; + + + case RESOURCE_DESC_DMA_FORMAT: + /* + * DMA Resource + */ + Status = AcpiRsDmaResource (ByteStreamBuffer, + &BytesConsumed, Buffer, &StructureSize); + break; + + + case RESOURCE_DESC_START_DEPENDENT: + /* + * Start Dependent Functions Resource + */ + Status = AcpiRsStartDependentFunctionsResource (ByteStreamBuffer, + &BytesConsumed, Buffer, &StructureSize); + break; + + + case RESOURCE_DESC_END_DEPENDENT: + /* + * End Dependent Functions Resource + */ + Status = AcpiRsEndDependentFunctionsResource (ByteStreamBuffer, + &BytesConsumed, Buffer, &StructureSize); + break; + + + case RESOURCE_DESC_IO_PORT: + /* + * IO Port Resource + */ + Status = AcpiRsIoResource (ByteStreamBuffer, + &BytesConsumed, Buffer, &StructureSize); + break; + + + case RESOURCE_DESC_FIXED_IO_PORT: + /* + * Fixed IO Port Resource + */ + Status = AcpiRsFixedIoResource (ByteStreamBuffer, + &BytesConsumed, Buffer, &StructureSize); + break; + + + case RESOURCE_DESC_SMALL_VENDOR: + /* + * Vendor Specific Resource + */ + Status = AcpiRsVendorResource (ByteStreamBuffer, + &BytesConsumed, Buffer, &StructureSize); + break; + + + case RESOURCE_DESC_END_TAG: + /* + * End Tag + */ + EndTagProcessed = TRUE; + Status = AcpiRsEndTagResource (ByteStreamBuffer, + &BytesConsumed, Buffer, &StructureSize); + break; + + + default: + /* + * Invalid/Unknowns resource type + */ + Status = AE_AML_ERROR; + break; } - else + + if (!ACPI_SUCCESS(Status)) { - /* - * Small Resource Type - * Only bits 7:3 are valid - */ - ResourceType >>= 3; - - switch(ResourceType) - { - case IRQ_FORMAT: - /* - * IRQ Resource - */ - Status = AcpiRsIrqResource(ByteStreamBuffer, - &BytesConsumed, - Buffer, - &StructureSize); - - break; - - case DMA_FORMAT: - /* - * DMA Resource - */ - Status = AcpiRsDmaResource(ByteStreamBuffer, - &BytesConsumed, - Buffer, - &StructureSize); - - break; - - case START_DEPENDENT_TAG: - /* - * Start Dependent Functions Resource - */ - Status = AcpiRsStartDependentFunctionsResource(ByteStreamBuffer, - &BytesConsumed, - Buffer, - &StructureSize); - - break; - - case END_DEPENDENT_TAG: - /* - * End Dependent Functions Resource - */ - Status = AcpiRsEndDependentFunctionsResource(ByteStreamBuffer, - &BytesConsumed, - Buffer, - &StructureSize); - - break; - - case IO_PORT_DESCRIPTOR: - /* - * IO Port Resource - */ - Status = AcpiRsIoResource(ByteStreamBuffer, - &BytesConsumed, - Buffer, - &StructureSize); - - break; - - case FIXED_LOCATION_IO_DESCRIPTOR: - /* - * Fixed IO Port Resource - */ - Status = AcpiRsFixedIoResource(ByteStreamBuffer, - &BytesConsumed, - Buffer, - &StructureSize); - - break; - - case SMALL_VENDOR_DEFINED: - /* - * Vendor Specific Resource - */ - Status = AcpiRsVendorResource(ByteStreamBuffer, - &BytesConsumed, - Buffer, - &StructureSize); - - break; - - case END_TAG: - /* - * End Tag - */ - Status = AcpiRsEndTagResource(ByteStreamBuffer, - &BytesConsumed, - Buffer, - &StructureSize); - EndTagProcessed = TRUE; - - break; - - default: - /* - * If we get here, everything is out of sync, - * so exit with an error - */ - return_ACPI_STATUS (AE_AML_ERROR); - break; - - } /* switch */ - } /* end else */ + return_ACPI_STATUS (Status); + } /* * Update the return value and counter @@ -414,15 +406,15 @@ AcpiRsByteStreamToList ( * * PARAMETERS: LinkedList - Pointer to the resource linked list * ByteSteamSizeNeeded - Calculated size of the byte stream - * needed from calling - * AcpiRsCalculateByteStreamLength() - * The size of the OutputBuffer is - * guaranteed to be >= - * ByteStreamSizeNeeded + * needed from calling + * AcpiRsCalculateByteStreamLength() + * The size of the OutputBuffer is + * guaranteed to be >= + * ByteStreamSizeNeeded * OutputBuffer - Pointer to the buffer that will - * contain the byte stream + * contain the byte stream * - * RETURN: Status AE_OK if okay, else a valid ACPI_STATUS code + * RETURN: Status * * DESCRIPTION: Takes the resource linked list and parses it, creating a * byte stream of resources in the caller's output buffer @@ -431,7 +423,7 @@ AcpiRsByteStreamToList ( ACPI_STATUS AcpiRsListToByteStream ( - RESOURCE *LinkedList, + ACPI_RESOURCE *LinkedList, UINT32 ByteStreamSizeNeeded, UINT8 **OutputBuffer) { @@ -447,76 +439,62 @@ AcpiRsListToByteStream ( { switch (LinkedList->Id) { - case Irq: + case ACPI_RSTYPE_IRQ: /* * IRQ Resource */ - Status = AcpiRsIrqStream (LinkedList, - &Buffer, - &BytesConsumed); + Status = AcpiRsIrqStream (LinkedList, &Buffer, &BytesConsumed); break; - case Dma: + case ACPI_RSTYPE_DMA: /* * DMA Resource */ - Status = AcpiRsDmaStream (LinkedList, - &Buffer, - &BytesConsumed); + Status = AcpiRsDmaStream (LinkedList, &Buffer, &BytesConsumed); break; - case StartDependentFunctions: + case ACPI_RSTYPE_START_DPF: /* * Start Dependent Functions Resource */ Status = AcpiRsStartDependentFunctionsStream (LinkedList, - &Buffer, - &BytesConsumed); + &Buffer, &BytesConsumed); break; - case EndDependentFunctions: + case ACPI_RSTYPE_END_DPF: /* * End Dependent Functions Resource */ Status = AcpiRsEndDependentFunctionsStream (LinkedList, - &Buffer, - &BytesConsumed); + &Buffer, &BytesConsumed); break; - case Io: + case ACPI_RSTYPE_IO: /* * IO Port Resource */ - Status = AcpiRsIoStream (LinkedList, - &Buffer, - &BytesConsumed); + Status = AcpiRsIoStream (LinkedList, &Buffer, &BytesConsumed); break; - case FixedIo: + case ACPI_RSTYPE_FIXED_IO: /* * Fixed IO Port Resource */ - Status = AcpiRsFixedIoStream (LinkedList, - &Buffer, - &BytesConsumed); + Status = AcpiRsFixedIoStream (LinkedList, &Buffer, &BytesConsumed); break; - case VendorSpecific: + case ACPI_RSTYPE_VENDOR: /* * Vendor Defined Resource */ - Status = AcpiRsVendorStream (LinkedList, - &Buffer, - &BytesConsumed); + Status = AcpiRsVendorStream (LinkedList, &Buffer, &BytesConsumed); break; - case EndTag: + case ACPI_RSTYPE_END_TAG: /* * End Tag */ - Status = AcpiRsEndTagStream (LinkedList, - &Buffer, - &BytesConsumed); + Status = AcpiRsEndTagStream (LinkedList, &Buffer, &BytesConsumed); /* * An End Tag indicates the end of the Resource Template @@ -524,58 +502,59 @@ AcpiRsListToByteStream ( Done = TRUE; break; - case Memory24: + case ACPI_RSTYPE_MEM24: /* * 24-Bit Memory Resource */ - Status = AcpiRsMemory24Stream (LinkedList, - &Buffer, - &BytesConsumed); + Status = AcpiRsMemory24Stream (LinkedList, &Buffer, &BytesConsumed); break; - case Memory32: + case ACPI_RSTYPE_MEM32: /* * 32-Bit Memory Range Resource */ - Status = AcpiRsMemory32RangeStream (LinkedList, - &Buffer, - &BytesConsumed); + Status = AcpiRsMemory32RangeStream (LinkedList, &Buffer, + &BytesConsumed); break; - case FixedMemory32: + case ACPI_RSTYPE_FIXED_MEM32: /* * 32-Bit Fixed Memory Resource */ - Status = AcpiRsFixedMemory32Stream (LinkedList, - &Buffer, - &BytesConsumed); + Status = AcpiRsFixedMemory32Stream (LinkedList, &Buffer, + &BytesConsumed); break; - case Address16: + case ACPI_RSTYPE_ADDRESS16: /* * 16-Bit Address Descriptor Resource */ - Status = AcpiRsAddress16Stream (LinkedList, - &Buffer, - &BytesConsumed); + Status = AcpiRsAddress16Stream (LinkedList, &Buffer, + &BytesConsumed); break; - case Address32: + case ACPI_RSTYPE_ADDRESS32: /* * 32-Bit Address Descriptor Resource */ - Status = AcpiRsAddress32Stream (LinkedList, - &Buffer, - &BytesConsumed); + Status = AcpiRsAddress32Stream (LinkedList, &Buffer, + &BytesConsumed); + break; + + case ACPI_RSTYPE_ADDRESS64: + /* + * 64-Bit Address Descriptor Resource + */ + Status = AcpiRsAddress64Stream (LinkedList, &Buffer, + &BytesConsumed); break; - case ExtendedIrq: + case ACPI_RSTYPE_EXT_IRQ: /* * Extended IRQ Resource */ - Status = AcpiRsExtendedIrqStream (LinkedList, - &Buffer, - &BytesConsumed); + Status = AcpiRsExtendedIrqStream (LinkedList, &Buffer, + &BytesConsumed); break; default: @@ -583,11 +562,17 @@ AcpiRsListToByteStream ( * If we get here, everything is out of sync, * so exit with an error */ - return_ACPI_STATUS (AE_BAD_DATA); + Status = AE_BAD_DATA; break; } /* switch (LinkedList->Id) */ + + if (!ACPI_SUCCESS(Status)) + { + return_ACPI_STATUS (Status); + } + /* * Set the Buffer to point to the open byte */ @@ -596,10 +581,10 @@ AcpiRsListToByteStream ( /* * Point to the next object */ - LinkedList = (RESOURCE *) ((NATIVE_UINT) LinkedList + - (NATIVE_UINT) LinkedList->Length); + LinkedList = POINTER_ADD (ACPI_RESOURCE, + LinkedList, LinkedList->Length); } - return_ACPI_STATUS (AE_OK); + return_ACPI_STATUS (AE_OK); } -- cgit v1.1