コード例 #1
0
ファイル: rscreate.c プロジェクト: kzlin129/tt-gpl
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);
}
コード例 #2
0
ファイル: rscreate.c プロジェクト: TKr/Wive-ng-rt8186
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);
}