ACPI_STATUS AcpiResourceToAddress64 ( ACPI_RESOURCE *Resource, ACPI_RESOURCE_ADDRESS64 *Out) { ACPI_RESOURCE_ADDRESS16 *Address16; ACPI_RESOURCE_ADDRESS32 *Address32; if (!Resource || !Out) { return (AE_BAD_PARAMETER); } /* Convert 16 or 32 address descriptor to 64 */ switch (Resource->Type) { case ACPI_RESOURCE_TYPE_ADDRESS16: Address16 = ACPI_CAST_PTR ( ACPI_RESOURCE_ADDRESS16, &Resource->Data); ACPI_COPY_ADDRESS (Out, Address16); break; case ACPI_RESOURCE_TYPE_ADDRESS32: Address32 = ACPI_CAST_PTR ( ACPI_RESOURCE_ADDRESS32, &Resource->Data); ACPI_COPY_ADDRESS (Out, Address32); break; case ACPI_RESOURCE_TYPE_ADDRESS64: /* Simple copy for 64 bit source */ memcpy (Out, &Resource->Data, sizeof (ACPI_RESOURCE_ADDRESS64)); break; default: return (AE_BAD_PARAMETER); } return (AE_OK); }
/****************************************************************************** * * FUNCTION: acpi_resource_to_address64 * * PARAMETERS: resource - Pointer to a resource * out - Pointer to the users's return buffer * (a struct acpi_resource_address64) * * RETURN: Status * * DESCRIPTION: If the resource is an address16, address32, or address64, * copy it to the address64 return buffer. This saves the * caller from having to duplicate code for different-sized * addresses. * ******************************************************************************/ acpi_status acpi_resource_to_address64(struct acpi_resource *resource, struct acpi_resource_address64 *out) { struct acpi_resource_address16 *address16; struct acpi_resource_address32 *address32; if (!resource || !out) { return (AE_BAD_PARAMETER); } /* Convert 16 or 32 address descriptor to 64 */ switch (resource->type) { case ACPI_RESOURCE_TYPE_ADDRESS16: address16 = ACPI_CAST_PTR(struct acpi_resource_address16, &resource->data); ACPI_COPY_ADDRESS(out, address16); break; case ACPI_RESOURCE_TYPE_ADDRESS32: address32 = ACPI_CAST_PTR(struct acpi_resource_address32, &resource->data); ACPI_COPY_ADDRESS(out, address32); break; case ACPI_RESOURCE_TYPE_ADDRESS64: /* Simple copy for 64 bit source */ ACPI_MEMCPY(out, &resource->data, sizeof(struct acpi_resource_address64)); break; default: return (AE_BAD_PARAMETER); } return (AE_OK); }
acpi_status acpi_resource_to_address64(struct acpi_resource *resource, struct acpi_resource_address64 *out) { struct acpi_resource_address16 *address16; struct acpi_resource_address32 *address32; if (!resource || !out) { return (AE_BAD_PARAMETER); } switch (resource->type) { case ACPI_RESOURCE_TYPE_ADDRESS16: address16 = ACPI_CAST_PTR(struct acpi_resource_address16, &resource->data); ACPI_COPY_ADDRESS(out, address16); break; case ACPI_RESOURCE_TYPE_ADDRESS32: address32 = ACPI_CAST_PTR(struct acpi_resource_address32, &resource->data); ACPI_COPY_ADDRESS(out, address32); break; case ACPI_RESOURCE_TYPE_ADDRESS64: ACPI_MEMCPY(out, &resource->data, sizeof(struct acpi_resource_address64)); break; default: return (AE_BAD_PARAMETER); } return (AE_OK); }
acpi_status acpi_resource_to_address64 ( struct acpi_resource *resource, struct acpi_resource_address64 *out) { struct acpi_resource_address16 *address16; struct acpi_resource_address32 *address32; switch (resource->id) { case ACPI_RSTYPE_ADDRESS16: address16 = (struct acpi_resource_address16 *) &resource->data; ACPI_COPY_ADDRESS(out, address16); break; case ACPI_RSTYPE_ADDRESS32: address32 = (struct acpi_resource_address32 *) &resource->data; ACPI_COPY_ADDRESS(out, address32); break; case ACPI_RSTYPE_ADDRESS64: /* Simple copy for 64 bit source */ ACPI_MEMCPY (out, &resource->data, sizeof (struct acpi_resource_address64)); break; default: return (AE_BAD_PARAMETER); } return (AE_OK); }