summaryrefslogtreecommitdiffstats
path: root/sys/contrib/dev/acpica/rslist.c
diff options
context:
space:
mode:
authormsmith <msmith@FreeBSD.org>2001-05-29 19:52:40 +0000
committermsmith <msmith@FreeBSD.org>2001-05-29 19:52:40 +0000
commitbc4d4229dc8150c1877e8673fb6be5be18487b6d (patch)
treea1bc1b7537f2d89240bd2e92ac027e82c5efeb6c /sys/contrib/dev/acpica/rslist.c
parent3c0029a0e89e19ec6ede20d15284dabefb4466b0 (diff)
downloadFreeBSD-src-bc4d4229dc8150c1877e8673fb6be5be18487b6d.zip
FreeBSD-src-bc4d4229dc8150c1877e8673fb6be5be18487b6d.tar.gz
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)
Diffstat (limited to 'sys/contrib/dev/acpica/rslist.c')
-rw-r--r--sys/contrib/dev/acpica/rslist.c547
1 files changed, 266 insertions, 281 deletions
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);
}
OpenPOWER on IntegriCloud