diff options
Diffstat (limited to 'drivers/acpi/acpica/rsutils.c')
| -rw-r--r-- | drivers/acpi/acpica/rsutils.c | 119 | 
1 files changed, 91 insertions, 28 deletions
diff --git a/drivers/acpi/acpica/rsutils.c b/drivers/acpi/acpica/rsutils.c index 491191e6cf6..897a5ceb042 100644 --- a/drivers/acpi/acpica/rsutils.c +++ b/drivers/acpi/acpica/rsutils.c @@ -5,7 +5,7 @@   ******************************************************************************/  /* - * Copyright (C) 2000 - 2010, Intel Corp. + * Copyright (C) 2000 - 2014, Intel Corp.   * All rights reserved.   *   * Redistribution and use in source and binary forms, with or without @@ -53,8 +53,8 @@ ACPI_MODULE_NAME("rsutils")   *   * FUNCTION:    acpi_rs_decode_bitmask   * - * PARAMETERS:  Mask            - Bitmask to decode - *              List            - Where the converted list is returned + * PARAMETERS:  mask            - Bitmask to decode + *              list            - Where the converted list is returned   *   * RETURN:      Count of bits set (length of list)   * @@ -86,8 +86,8 @@ u8 acpi_rs_decode_bitmask(u16 mask, u8 * list)   *   * FUNCTION:    acpi_rs_encode_bitmask   * - * PARAMETERS:  List            - List of values to encode - *              Count           - Length of list + * PARAMETERS:  list            - List of values to encode + *              count           - Length of list   *   * RETURN:      Encoded bitmask   * @@ -108,15 +108,15 @@ u16 acpi_rs_encode_bitmask(u8 * list, u8 count)  		mask |= (0x1 << list[i]);  	} -	return mask; +	return (mask);  }  /*******************************************************************************   *   * FUNCTION:    acpi_rs_move_data   * - * PARAMETERS:  Destination         - Pointer to the destination descriptor - *              Source              - Pointer to the source descriptor + * PARAMETERS:  destination         - Pointer to the destination descriptor + *              source              - Pointer to the source descriptor   *              item_count          - How many items to move   *              move_type           - Byte width   * @@ -144,6 +144,10 @@ acpi_rs_move_data(void *destination, void *source, u16 item_count, u8 move_type)  			 * since there are no alignment or endian issues  			 */  		case ACPI_RSC_MOVE8: +		case ACPI_RSC_MOVE_GPIO_RES: +		case ACPI_RSC_MOVE_SERIAL_VEN: +		case ACPI_RSC_MOVE_SERIAL_RES: +  			ACPI_MEMCPY(destination, source, item_count);  			return; @@ -153,21 +157,26 @@ acpi_rs_move_data(void *destination, void *source, u16 item_count, u8 move_type)  			 * misaligned memory transfers  			 */  		case ACPI_RSC_MOVE16: +		case ACPI_RSC_MOVE_GPIO_PIN: +  			ACPI_MOVE_16_TO_16(&ACPI_CAST_PTR(u16, destination)[i],  					   &ACPI_CAST_PTR(u16, source)[i]);  			break;  		case ACPI_RSC_MOVE32: +  			ACPI_MOVE_32_TO_32(&ACPI_CAST_PTR(u32, destination)[i],  					   &ACPI_CAST_PTR(u32, source)[i]);  			break;  		case ACPI_RSC_MOVE64: +  			ACPI_MOVE_64_TO_64(&ACPI_CAST_PTR(u64, destination)[i],  					   &ACPI_CAST_PTR(u64, source)[i]);  			break;  		default: +  			return;  		}  	} @@ -179,7 +188,7 @@ acpi_rs_move_data(void *destination, void *source, u16 item_count, u8 move_type)   *   * PARAMETERS:  total_length        - Length of the AML descriptor, including   *                                    the header and length fields. - *              Aml                 - Pointer to the raw AML descriptor + *              aml                 - Pointer to the raw AML descriptor   *   * RETURN:      None   * @@ -231,7 +240,7 @@ acpi_rs_set_resource_length(acpi_rsdesc_size total_length,   * PARAMETERS:  descriptor_type     - Byte to be inserted as the type   *              total_length        - Length of the AML descriptor, including   *                                    the header and length fields. - *              Aml                 - Pointer to the raw AML descriptor + *              aml                 - Pointer to the raw AML descriptor   *   * RETURN:      None   * @@ -261,8 +270,8 @@ acpi_rs_set_resource_header(u8 descriptor_type,   *   * FUNCTION:    acpi_rs_strcpy   * - * PARAMETERS:  Destination         - Pointer to the destination string - *              Source              - Pointer to the source string + * PARAMETERS:  destination         - Pointer to the destination string + *              source              - Pointer to the source string   *   * RETURN:      String length, including NULL terminator   * @@ -296,7 +305,7 @@ static u16 acpi_rs_strcpy(char *destination, char *source)   *              minimum_length      - Minimum length of the descriptor (minus   *                                    any optional fields)   *              resource_source     - Where the resource_source is returned - *              Aml                 - Pointer to the raw AML descriptor + *              aml                 - Pointer to the raw AML descriptor   *              string_ptr          - (optional) where to store the actual   *                                    resource_source string   * @@ -354,8 +363,10 @@ acpi_rs_get_resource_source(acpi_rs_length resource_length,  		 *  		 * Zero the entire area of the buffer.  		 */ -		total_length = (u32) -		ACPI_STRLEN(ACPI_CAST_PTR(char, &aml_resource_source[1])) + 1; +		total_length = +		    (u32) +		    ACPI_STRLEN(ACPI_CAST_PTR(char, &aml_resource_source[1])) + +		    1;  		total_length = (u32) ACPI_ROUND_UP_TO_NATIVE_WORD(total_length);  		ACPI_MEMSET(resource_source->string_ptr, 0, total_length); @@ -382,7 +393,7 @@ acpi_rs_get_resource_source(acpi_rs_length resource_length,   *   * FUNCTION:    acpi_rs_set_resource_source   * - * PARAMETERS:  Aml                 - Pointer to the raw AML descriptor + * PARAMETERS:  aml                 - Pointer to the raw AML descriptor   *              minimum_length      - Minimum length of the descriptor (minus   *                                    any optional fields)   *              resource_source     - Internal resource_source @@ -441,7 +452,7 @@ acpi_rs_set_resource_source(union aml_resource * aml,   *   * FUNCTION:    acpi_rs_get_prt_method_data   * - * PARAMETERS:  Node            - Device node + * PARAMETERS:  node            - Device node   *              ret_buffer      - Pointer to a buffer structure for the   *                                results   * @@ -490,7 +501,7 @@ acpi_rs_get_prt_method_data(struct acpi_namespace_node * node,   *   * FUNCTION:    acpi_rs_get_crs_method_data   * - * PARAMETERS:  Node            - Device node + * PARAMETERS:  node            - Device node   *              ret_buffer      - Pointer to a buffer structure for the   *                                results   * @@ -530,7 +541,7 @@ acpi_rs_get_crs_method_data(struct acpi_namespace_node *node,  	 */  	status = acpi_rs_create_resource_list(obj_desc, ret_buffer); -	/* On exit, we must delete the object returned by evaluate_object */ +	/* On exit, we must delete the object returned by evaluateObject */  	acpi_ut_remove_reference(obj_desc);  	return_ACPI_STATUS(status); @@ -540,7 +551,7 @@ acpi_rs_get_crs_method_data(struct acpi_namespace_node *node,   *   * FUNCTION:    acpi_rs_get_prs_method_data   * - * PARAMETERS:  Node            - Device node + * PARAMETERS:  node            - Device node   *              ret_buffer      - Pointer to a buffer structure for the   *                                results   * @@ -581,7 +592,7 @@ acpi_rs_get_prs_method_data(struct acpi_namespace_node *node,  	 */  	status = acpi_rs_create_resource_list(obj_desc, ret_buffer); -	/* On exit, we must delete the object returned by evaluate_object */ +	/* On exit, we must delete the object returned by evaluateObject */  	acpi_ut_remove_reference(obj_desc);  	return_ACPI_STATUS(status); @@ -590,10 +601,60 @@ acpi_rs_get_prs_method_data(struct acpi_namespace_node *node,  /*******************************************************************************   * + * FUNCTION:    acpi_rs_get_aei_method_data + * + * PARAMETERS:  node            - Device node + *              ret_buffer      - Pointer to a buffer structure for the + *                                results + * + * RETURN:      Status + * + * DESCRIPTION: This function is called to get the _AEI value of an object + *              contained in an object specified by the handle passed in + * + *              If the function fails an appropriate status will be returned + *              and the contents of the callers buffer is undefined. + * + ******************************************************************************/ + +acpi_status +acpi_rs_get_aei_method_data(struct acpi_namespace_node *node, +			    struct acpi_buffer *ret_buffer) +{ +	union acpi_operand_object *obj_desc; +	acpi_status status; + +	ACPI_FUNCTION_TRACE(rs_get_aei_method_data); + +	/* Parameters guaranteed valid by caller */ + +	/* Execute the method, no parameters */ + +	status = acpi_ut_evaluate_object(node, METHOD_NAME__AEI, +					 ACPI_BTYPE_BUFFER, &obj_desc); +	if (ACPI_FAILURE(status)) { +		return_ACPI_STATUS(status); +	} + +	/* +	 * Make the call to create a resource linked list from the +	 * byte stream buffer that comes back from the _CRS method +	 * execution. +	 */ +	status = acpi_rs_create_resource_list(obj_desc, ret_buffer); + +	/* On exit, we must delete the object returned by evaluateObject */ + +	acpi_ut_remove_reference(obj_desc); +	return_ACPI_STATUS(status); +} + +/******************************************************************************* + *   * FUNCTION:    acpi_rs_get_method_data   * - * PARAMETERS:  Handle          - Handle to the containing object - *              Path            - Path to method, relative to Handle + * PARAMETERS:  handle          - Handle to the containing object + *              path            - Path to method, relative to Handle   *              ret_buffer      - Pointer to a buffer structure for the   *                                results   * @@ -621,7 +682,9 @@ acpi_rs_get_method_data(acpi_handle handle,  	/* Execute the method, no parameters */  	status = -	    acpi_ut_evaluate_object(handle, path, ACPI_BTYPE_BUFFER, &obj_desc); +	    acpi_ut_evaluate_object(ACPI_CAST_PTR +				    (struct acpi_namespace_node, handle), path, +				    ACPI_BTYPE_BUFFER, &obj_desc);  	if (ACPI_FAILURE(status)) {  		return_ACPI_STATUS(status);  	} @@ -643,7 +706,7 @@ acpi_rs_get_method_data(acpi_handle handle,   *   * FUNCTION:    acpi_rs_set_srs_method_data   * - * PARAMETERS:  Node            - Device node + * PARAMETERS:  node            - Device node   *              in_buffer       - Pointer to a buffer structure of the   *                                parameter   * @@ -678,7 +741,7 @@ acpi_rs_set_srs_method_data(struct acpi_namespace_node *node,  	}  	info->prefix_node = node; -	info->pathname = METHOD_NAME__SRS; +	info->relative_pathname = METHOD_NAME__SRS;  	info->parameters = args;  	info->flags = ACPI_IGNORE_RETURN_VALUE; @@ -690,7 +753,7 @@ acpi_rs_set_srs_method_data(struct acpi_namespace_node *node,  	 * Convert the linked list into a byte stream  	 */  	buffer.length = ACPI_ALLOCATE_LOCAL_BUFFER; -	status = acpi_rs_create_aml_resources(in_buffer->pointer, &buffer); +	status = acpi_rs_create_aml_resources(in_buffer, &buffer);  	if (ACPI_FAILURE(status)) {  		goto cleanup;  	} @@ -721,7 +784,7 @@ acpi_rs_set_srs_method_data(struct acpi_namespace_node *node,  	acpi_ut_remove_reference(args[0]); -      cleanup: +cleanup:  	ACPI_FREE(info);  	return_ACPI_STATUS(status);  }  | 
