acpi_status acpi_rs_create_byte_stream ( struct acpi_resource *linked_list_buffer, struct acpi_buffer *output_buffer) { acpi_status status; acpi_size byte_stream_size_needed = 0; ACPI_FUNCTION_TRACE ("rs_create_byte_stream"); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "linked_list_buffer = %p\n", linked_list_buffer)); /* * Params already validated, so we don't re-validate here * * Pass the linked_list_buffer into a module that calculates * the buffer size needed for the byte stream. */ status = acpi_rs_get_byte_stream_length (linked_list_buffer, &byte_stream_size_needed); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "byte_stream_size_needed=%X, %s\n", (u32) byte_stream_size_needed, acpi_format_exception (status))); if (ACPI_FAILURE (status)) { return_ACPI_STATUS (status); } /* Validate/Allocate/Clear caller buffer */ status = acpi_ut_initialize_buffer (output_buffer, byte_stream_size_needed); if (ACPI_FAILURE (status)) { return_ACPI_STATUS (status); } /* Do the conversion */ status = acpi_rs_list_to_byte_stream (linked_list_buffer, byte_stream_size_needed, output_buffer->pointer); if (ACPI_FAILURE (status)) { return_ACPI_STATUS (status); } ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "output_buffer %p Length %X\n", output_buffer->pointer, (u32) output_buffer->length)); return_ACPI_STATUS (AE_OK); }
acpi_status acpi_rs_create_byte_stream ( acpi_resource *linked_list_buffer, u8 *output_buffer, u32 *output_buffer_length) { acpi_status status; u32 byte_stream_size_needed = 0; FUNCTION_TRACE ("Rs_create_byte_stream"); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Linked_list_buffer = %p\n", linked_list_buffer)); /* * Params already validated, so we don't re-validate here * * Pass the Linked_list_buffer into a module that can calculate * the buffer size needed for the byte stream. */ status = acpi_rs_calculate_byte_stream_length (linked_list_buffer, &byte_stream_size_needed); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Byte_stream_size_needed=%X, %s\n", byte_stream_size_needed, acpi_format_exception (status))); /* * Exit with the error passed back */ if (ACPI_FAILURE (status)) { return_ACPI_STATUS (status); } /* * If the linked list will fit into the available buffer * call to fill in the list */ if (byte_stream_size_needed <= *output_buffer_length) { /* * Zero out the return buffer before proceeding */ MEMSET (output_buffer, 0x00, *output_buffer_length); status = acpi_rs_list_to_byte_stream (linked_list_buffer, byte_stream_size_needed, &output_buffer); /* * Exit with the error passed back */ if (ACPI_FAILURE (status)) { return_ACPI_STATUS (status); } ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Output_buffer = %p\n", output_buffer)); } else { *output_buffer_length = byte_stream_size_needed; return_ACPI_STATUS (AE_BUFFER_OVERFLOW); } return_ACPI_STATUS (AE_OK); }