ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

ACPI_STATUS AcpiWalkResources ( ACPI_HANDLE  Device,
char Name,
ACPI_WALK_RESOURCE_CALLBACK  UserFunction,
void Context 
)

Definition at line 633 of file rsxface.c.

Referenced by AcpiGetVendorResource(), and AcpiWalkResources().

{
    ACPI_STATUS                 Status;
    ACPI_BUFFER                 Buffer;
    ACPI_RESOURCE               *Resource;
    ACPI_RESOURCE               *ResourceEnd;


    ACPI_FUNCTION_TRACE (AcpiWalkResources);


    /* Parameter validation */

    if (!DeviceHandle || !UserFunction || !Name ||
        (!ACPI_COMPARE_NAME (Name, METHOD_NAME__CRS) &&
         !ACPI_COMPARE_NAME (Name, METHOD_NAME__PRS)))
    {
        return_ACPI_STATUS (AE_BAD_PARAMETER);
    }

    /* Get the _CRS or _PRS resource list */

    Buffer.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
    Status = AcpiRsGetMethodData (DeviceHandle, Name, &Buffer);
    if (ACPI_FAILURE (Status))
    {
        return_ACPI_STATUS (Status);
    }

    /* Buffer now contains the resource list */

    Resource = ACPI_CAST_PTR (ACPI_RESOURCE, Buffer.Pointer);
    ResourceEnd = ACPI_ADD_PTR (ACPI_RESOURCE, Buffer.Pointer, Buffer.Length);

    /* Walk the resource list until the EndTag is found (or buffer end) */

    while (Resource < ResourceEnd)
    {
        /* Sanity check the resource */

        if (Resource->Type > ACPI_RESOURCE_TYPE_MAX)
        {
            Status = AE_AML_INVALID_RESOURCE_TYPE;
            break;
        }

        /* Invoke the user function, abort on any error returned */

        Status = UserFunction (Resource, Context);
        if (ACPI_FAILURE (Status))
        {
            if (Status == AE_CTRL_TERMINATE)
            {
                /* This is an OK termination by the user function */

                Status = AE_OK;
            }
            break;
        }

        /* EndTag indicates end-of-list */

        if (Resource->Type == ACPI_RESOURCE_TYPE_END_TAG)
        {
            break;
        }

        /* Get the next resource descriptor */

        Resource = ACPI_ADD_PTR (ACPI_RESOURCE, Resource, Resource->Length);
    }

    ACPI_FREE (Buffer.Pointer);
    return_ACPI_STATUS (Status);
}

Generated on Sat May 26 2012 05:21:13 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.