acpi_status acpi_rs_create_resource_list ( union acpi_operand_object *byte_stream_buffer, struct acpi_buffer *output_buffer) { acpi_status status; u8 *byte_stream_start; acpi_size list_size_needed = 0; u32 byte_stream_buffer_length; ACPI_FUNCTION_TRACE ("rs_create_resource_list"); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "byte_stream_buffer = %p\n", byte_stream_buffer)); /* Params already validated, so we don't re-validate here */ byte_stream_buffer_length = byte_stream_buffer->buffer.length; byte_stream_start = byte_stream_buffer->buffer.pointer; /* * Pass the byte_stream_buffer into a module that can calculate * the buffer size needed for the linked list */ status = acpi_rs_get_list_length (byte_stream_start, byte_stream_buffer_length, &list_size_needed); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Status=%X list_size_needed=%X\n", status, (u32) list_size_needed)); if (ACPI_FAILURE (status)) { return_ACPI_STATUS (status); } /* Validate/Allocate/Clear caller buffer */ status = acpi_ut_initialize_buffer (output_buffer, list_size_needed); if (ACPI_FAILURE (status)) { return_ACPI_STATUS (status); } /* Do the conversion */ status = acpi_rs_byte_stream_to_list (byte_stream_start, byte_stream_buffer_length, 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_resource_list ( acpi_operand_object *byte_stream_buffer, u8 *output_buffer, u32 *output_buffer_length) { acpi_status status; u8 *byte_stream_start; u32 list_size_needed = 0; u32 byte_stream_buffer_length; FUNCTION_TRACE ("Rs_create_resource_list"); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Byte_stream_buffer = %p\n", byte_stream_buffer)); /* * Params already validated, so we don't re-validate here */ byte_stream_buffer_length = byte_stream_buffer->buffer.length; byte_stream_start = byte_stream_buffer->buffer.pointer; /* * Pass the Byte_stream_buffer into a module that can calculate * the buffer size needed for the linked list */ status = acpi_rs_calculate_list_length (byte_stream_start, byte_stream_buffer_length, &list_size_needed); ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Status=%X List_size_needed=%X\n", status, list_size_needed)); /* * 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 (list_size_needed <= *output_buffer_length) { /* * Zero out the return buffer before proceeding */ MEMSET (output_buffer, 0x00, *output_buffer_length); status = acpi_rs_byte_stream_to_list (byte_stream_start, byte_stream_buffer_length, &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 = list_size_needed; return_ACPI_STATUS (AE_BUFFER_OVERFLOW); } *output_buffer_length = list_size_needed; return_ACPI_STATUS (AE_OK); }