Пример #1
0
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);
}
Пример #2
0
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);
}