コード例 #1
0
ファイル: dmrestag.c プロジェクト: ExpressOS/third_party-l4re
static char *
AcpiDmGetResourceTag (
    UINT32                  BitIndex,
    AML_RESOURCE            *Resource,
    UINT8                   ResourceIndex)
{
    ACPI_RESOURCE_TAG       *TagList;
    char                    *Tag = NULL;


    /* Get the tag list for this resource descriptor type */

    TagList = AcpiGbl_ResourceTags[ResourceIndex];
    if (!TagList)
    {
        /* There are no tags for this resource type */

        return (NULL);
    }

    /*
     * Handle the type-specific flags field for the address descriptors.
     * Kindof brute force, but just blindly search for an index match.
     */
    switch (Resource->DescriptorType)
    {
    case ACPI_RESOURCE_NAME_ADDRESS16:
    case ACPI_RESOURCE_NAME_ADDRESS32:
    case ACPI_RESOURCE_NAME_ADDRESS64:
    case ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64:

        if (Resource->Address.ResourceType == ACPI_ADDRESS_TYPE_MEMORY_RANGE)
        {
            Tag = AcpiDmSearchTagList (BitIndex, AcpiDmMemoryFlagTags);
        }
        else if (Resource->Address.ResourceType == ACPI_ADDRESS_TYPE_IO_RANGE)
        {
            Tag = AcpiDmSearchTagList (BitIndex, AcpiDmIoFlagTags);
        }

        /* If we found a match, all done. Else, drop to normal search below */

        if (Tag)
        {
            return (Tag);
        }
        break;

    default:
        break;
    }

    /* Search the tag list for this descriptor type */

    Tag = AcpiDmSearchTagList (BitIndex, TagList);
    return (Tag);
}
コード例 #2
0
ファイル: dmrestag.c プロジェクト: Raphine/Raph_Kernel
static char *
AcpiDmGetResourceTag (
    UINT32                  BitIndex,
    AML_RESOURCE            *Resource,
    UINT8                   ResourceIndex)
{
    const ACPI_RESOURCE_TAG *TagList;
    char                    *Tag = NULL;


    /* Get the tag list for this resource descriptor type */

    TagList = AcpiGbl_ResourceTags[ResourceIndex];

    /*
     * Handle descriptors that have multiple subtypes
     */
    switch (Resource->DescriptorType)
    {
    case ACPI_RESOURCE_NAME_ADDRESS16:
    case ACPI_RESOURCE_NAME_ADDRESS32:
    case ACPI_RESOURCE_NAME_ADDRESS64:
    case ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64:
        /*
         * Subtype differentiation is the flags.
         * Kindof brute force, but just blindly search for an index match
         */
        if (Resource->Address.ResourceType == ACPI_ADDRESS_TYPE_MEMORY_RANGE)
        {
            Tag = AcpiDmSearchTagList (BitIndex, AcpiDmMemoryFlagTags);
        }
        else if (Resource->Address.ResourceType == ACPI_ADDRESS_TYPE_IO_RANGE)
        {
            Tag = AcpiDmSearchTagList (BitIndex, AcpiDmIoFlagTags);
        }

        /* If we found a match, all done. Else, drop to normal search below */

        if (Tag)
        {
            return (Tag);
        }
        break;

    case ACPI_RESOURCE_NAME_GPIO:

        /* GPIO connection has 2 subtypes: Interrupt and I/O */

        if (Resource->Gpio.ConnectionType > AML_RESOURCE_MAX_GPIOTYPE)
        {
            return (NULL);
        }

        TagList = AcpiGbl_GpioResourceTags[Resource->Gpio.ConnectionType];
        break;

    case ACPI_RESOURCE_NAME_SERIAL_BUS:

        /* SerialBus has 3 subtypes: I2C, SPI, and UART */

        if ((Resource->CommonSerialBus.Type == 0) ||
            (Resource->CommonSerialBus.Type > AML_RESOURCE_MAX_SERIALBUSTYPE))
        {
            return (NULL);
        }

        TagList = AcpiGbl_SerialResourceTags[Resource->CommonSerialBus.Type];
        break;

    default:

        break;
    }

    /* Search for a match against the BitIndex */

    if (TagList)
    {
        Tag = AcpiDmSearchTagList (BitIndex, TagList);
    }

    return (Tag);
}