summaryrefslogtreecommitdiffstats
path: root/executer/exutils.c
diff options
context:
space:
mode:
Diffstat (limited to 'executer/exutils.c')
-rw-r--r--executer/exutils.c59
1 files changed, 38 insertions, 21 deletions
diff --git a/executer/exutils.c b/executer/exutils.c
index 45b35a0..1f5e861 100644
--- a/executer/exutils.c
+++ b/executer/exutils.c
@@ -482,59 +482,76 @@ AcpiExDigitsNeeded (
*
* FUNCTION: AcpiExEisaIdToString
*
- * PARAMETERS: NumericId - EISA ID to be converted
+ * PARAMETERS: CompressedId - EISAID to be converted
* OutString - Where to put the converted string (8 bytes)
*
* RETURN: None
*
- * DESCRIPTION: Convert a numeric EISA ID to string representation
+ * DESCRIPTION: Convert a numeric EISAID to string representation. Return
+ * buffer must be large enough to hold the string. The string
+ * returned is always exactly of length ACPI_EISAID_STRING_SIZE
+ * (includes null terminator). The EISAID is always 32 bits.
*
******************************************************************************/
void
AcpiExEisaIdToString (
- UINT32 NumericId,
- char *OutString)
+ char *OutString,
+ ACPI_INTEGER CompressedId)
{
- UINT32 EisaId;
+ UINT32 SwappedId;
ACPI_FUNCTION_ENTRY ();
+ /* The EISAID should be a 32-bit integer */
+
+ if (CompressedId > ACPI_UINT32_MAX)
+ {
+ ACPI_WARNING ((AE_INFO,
+ "Expected EISAID is larger than 32 bits: 0x%8.8X%8.8X, truncating",
+ ACPI_FORMAT_UINT64 (CompressedId)));
+ }
+
/* Swap ID to big-endian to get contiguous bits */
- EisaId = AcpiUtDwordByteSwap (NumericId);
+ SwappedId = AcpiUtDwordByteSwap ((UINT32) CompressedId);
- OutString[0] = (char) ('@' + (((unsigned long) EisaId >> 26) & 0x1f));
- OutString[1] = (char) ('@' + ((EisaId >> 21) & 0x1f));
- OutString[2] = (char) ('@' + ((EisaId >> 16) & 0x1f));
- OutString[3] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) EisaId, 12);
- OutString[4] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) EisaId, 8);
- OutString[5] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) EisaId, 4);
- OutString[6] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) EisaId, 0);
+ /* First 3 bytes are uppercase letters. Next 4 bytes are hexadecimal */
+
+ OutString[0] = (char) (0x40 + (((unsigned long) SwappedId >> 26) & 0x1F));
+ OutString[1] = (char) (0x40 + ((SwappedId >> 21) & 0x1F));
+ OutString[2] = (char) (0x40 + ((SwappedId >> 16) & 0x1F));
+ OutString[3] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) SwappedId, 12);
+ OutString[4] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) SwappedId, 8);
+ OutString[5] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) SwappedId, 4);
+ OutString[6] = AcpiUtHexToAsciiChar ((ACPI_INTEGER) SwappedId, 0);
OutString[7] = 0;
}
/*******************************************************************************
*
- * FUNCTION: AcpiExUnsignedIntegerToString
+ * FUNCTION: AcpiExIntegerToString
*
- * PARAMETERS: Value - Value to be converted
- * OutString - Where to put the converted string (8 bytes)
+ * PARAMETERS: OutString - Where to put the converted string. At least
+ * 21 bytes are needed to hold the largest
+ * possible 64-bit integer.
+ * Value - Value to be converted
*
* RETURN: None, string
*
- * DESCRIPTION: Convert a number to string representation. Assumes string
- * buffer is large enough to hold the string.
+ * DESCRIPTION: Convert a 64-bit integer to decimal string representation.
+ * Assumes string buffer is large enough to hold the string. The
+ * largest string is (ACPI_MAX64_DECIMAL_DIGITS + 1).
*
******************************************************************************/
void
-AcpiExUnsignedIntegerToString (
- ACPI_INTEGER Value,
- char *OutString)
+AcpiExIntegerToString (
+ char *OutString,
+ ACPI_INTEGER Value)
{
UINT32 Count;
UINT32 DigitsNeeded;
OpenPOWER on IntegriCloud