⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exnames.c

📁 acpi tools for linux include acpiexec and acpixtract
💻 C
📖 第 1 页 / 共 2 页
字号:
        Index++)    {        CharBuf[Index] = *AmlAddress++;        ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "%c\n", CharBuf[Index]));    }    /* Valid name segment  */    if (Index == 4)    {        /* Found 4 valid characters */        CharBuf[4] = '\0';        if (NameString)        {            ACPI_STRCAT (NameString, CharBuf);            ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,                "Appended to - %s\n", NameString));        }        else        {            ACPI_DEBUG_PRINT ((ACPI_DB_NAMES,                "No Name string - %s\n", CharBuf));        }    }    else if (Index == 0)    {        /*         * First character was not a valid name character,         * so we are looking at something other than a name.         */        ACPI_DEBUG_PRINT ((ACPI_DB_INFO,            "Leading character is not alpha: %02Xh (not a name)\n",            CharBuf[0]));        Status = AE_CTRL_PENDING;    }    else    {        /*         * Segment started with one or more valid characters, but fewer than         * the required 4         */        Status = AE_AML_BAD_NAME;        ACPI_ERROR ((AE_INFO,            "Bad character %02x in name, at %p",            *AmlAddress, AmlAddress));    }    *InAmlAddress = ACPI_CAST_PTR (UINT8, AmlAddress);    return_ACPI_STATUS (Status);}/******************************************************************************* * * FUNCTION:    AcpiExGetNameString * * PARAMETERS:  DataType            - Object type to be associated with this *                                    name *              InAmlAddress        - Pointer to the namestring in the AML code *              OutNameString       - Where the namestring is returned *              OutNameLength       - Length of the returned string * * RETURN:      Status, namestring and length * * DESCRIPTION: Extract a full namepath from the AML byte stream, *              including any prefixes. * ******************************************************************************/ACPI_STATUSAcpiExGetNameString (    ACPI_OBJECT_TYPE        DataType,    UINT8                   *InAmlAddress,    char                    **OutNameString,    UINT32                  *OutNameLength){    ACPI_STATUS             Status = AE_OK;    UINT8                   *AmlAddress = InAmlAddress;    char                    *NameString = NULL;    UINT32                  NumSegments;    UINT32                  PrefixCount = 0;    BOOLEAN                 HasPrefix = FALSE;    ACPI_FUNCTION_TRACE_PTR (ExGetNameString, AmlAddress);    if (ACPI_TYPE_LOCAL_REGION_FIELD == DataType   ||        ACPI_TYPE_LOCAL_BANK_FIELD == DataType     ||        ACPI_TYPE_LOCAL_INDEX_FIELD == DataType)    {        /* Disallow prefixes for types associated with FieldUnit names */        NameString = AcpiExAllocateNameString (0, 1);        if (!NameString)        {            Status = AE_NO_MEMORY;        }        else        {            Status = AcpiExNameSegment (&AmlAddress, NameString);        }    }    else    {        /*         * DataType is not a field name.         * Examine first character of name for root or parent prefix operators         */        switch (*AmlAddress)        {        case AML_ROOT_PREFIX:            ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "RootPrefix(\\) at %p\n",                AmlAddress));            /*             * Remember that we have a RootPrefix --             * see comment in AcpiExAllocateNameString()             */            AmlAddress++;            PrefixCount = ACPI_UINT32_MAX;            HasPrefix = TRUE;            break;        case AML_PARENT_PREFIX:            /* Increment past possibly multiple parent prefixes */            do            {                ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "ParentPrefix (^) at %p\n",                    AmlAddress));                AmlAddress++;                PrefixCount++;            } while (*AmlAddress == AML_PARENT_PREFIX);            HasPrefix = TRUE;            break;        default:            /* Not a prefix character */            break;        }        /* Examine first character of name for name segment prefix operator */        switch (*AmlAddress)        {        case AML_DUAL_NAME_PREFIX:            ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "DualNamePrefix at %p\n",                AmlAddress));            AmlAddress++;            NameString = AcpiExAllocateNameString (PrefixCount, 2);            if (!NameString)            {                Status = AE_NO_MEMORY;                break;            }            /* Indicate that we processed a prefix */            HasPrefix = TRUE;            Status = AcpiExNameSegment (&AmlAddress, NameString);            if (ACPI_SUCCESS (Status))            {                Status = AcpiExNameSegment (&AmlAddress, NameString);            }            break;        case AML_MULTI_NAME_PREFIX_OP:            ACPI_DEBUG_PRINT ((ACPI_DB_LOAD, "MultiNamePrefix at %p\n",                AmlAddress));            /* Fetch count of segments remaining in name path */            AmlAddress++;            NumSegments = *AmlAddress;            NameString = AcpiExAllocateNameString (PrefixCount, NumSegments);            if (!NameString)            {                Status = AE_NO_MEMORY;                break;            }            /* Indicate that we processed a prefix */            AmlAddress++;            HasPrefix = TRUE;            while (NumSegments &&                    (Status = AcpiExNameSegment (&AmlAddress, NameString)) ==                        AE_OK)            {                NumSegments--;            }            break;        case 0:            /* NullName valid as of 8-12-98 ASL/AML Grammar Update */            if (PrefixCount == ACPI_UINT32_MAX)            {                ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,                    "NameSeg is \"\\\" followed by NULL\n"));            }            /* Consume the NULL byte */            AmlAddress++;            NameString = AcpiExAllocateNameString (PrefixCount, 0);            if (!NameString)            {                Status = AE_NO_MEMORY;                break;            }            break;        default:            /* Name segment string */            NameString = AcpiExAllocateNameString (PrefixCount, 1);            if (!NameString)            {                Status = AE_NO_MEMORY;                break;            }            Status = AcpiExNameSegment (&AmlAddress, NameString);            break;        }    }    if (AE_CTRL_PENDING == Status && HasPrefix)    {        /* Ran out of segments after processing a prefix */        ACPI_ERROR ((AE_INFO,            "Malformed Name at %p", NameString));        Status = AE_AML_BAD_NAME;    }    if (ACPI_FAILURE (Status))    {        if (NameString)        {            ACPI_FREE (NameString);        }        return_ACPI_STATUS (Status);    }    *OutNameString = NameString;    *OutNameLength = (UINT32) (AmlAddress - InAmlAddress);    return_ACPI_STATUS (Status);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -