patch-2.4.10 linux/drivers/acpi/utilities/utcopy.c

Next file: linux/drivers/acpi/utilities/utdebug.c
Previous file: linux/drivers/acpi/utilities/utalloc.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.9/linux/drivers/acpi/utilities/utcopy.c linux/drivers/acpi/utilities/utcopy.c
@@ -1,7 +1,7 @@
 /******************************************************************************
  *
  * Module Name: utcopy - Internal to external object translation utilities
- *              $Revision: 74 $
+ *              $Revision: 82 $
  *
  *****************************************************************************/
 
@@ -51,36 +51,37 @@
  *
  ******************************************************************************/
 
-static ACPI_STATUS
+static acpi_status
 acpi_ut_copy_isimple_to_esimple (
-	ACPI_OPERAND_OBJECT     *internal_object,
-	ACPI_OBJECT             *external_object,
+	acpi_operand_object     *internal_object,
+	acpi_object             *external_object,
 	u8                      *data_space,
 	u32                     *buffer_space_used)
 {
 	u32                     length = 0;
-	ACPI_STATUS             status = AE_OK;
+	acpi_status             status = AE_OK;
+
+
+	FUNCTION_TRACE ("Ut_copy_isimple_to_esimple");
 
 
 	/*
 	 * Check for NULL object case (could be an uninitialized
 	 * package element
 	 */
-
 	if (!internal_object) {
 		*buffer_space_used = 0;
-		return (AE_OK);
+		return_ACPI_STATUS (AE_OK);
 	}
 
 	/* Always clear the external object */
 
-	MEMSET (external_object, 0, sizeof (ACPI_OBJECT));
+	MEMSET (external_object, 0, sizeof (acpi_object));
 
 	/*
 	 * In general, the external object will be the same type as
 	 * the internal object
 	 */
-
 	external_object->type = internal_object->common.type;
 
 	/* However, only a limited number of external types are supported */
@@ -116,7 +117,6 @@
 		/*
 		 * This is an object reference.  Attempt to dereference it.
 		 */
-
 		switch (internal_object->reference.opcode) {
 		case AML_ZERO_OP:
 			external_object->type = ACPI_TYPE_INTEGER;
@@ -133,6 +133,11 @@
 			external_object->integer.value = ACPI_INTEGER_MAX;
 			break;
 
+		case AML_REVISION_OP:
+			external_object->type = ACPI_TYPE_INTEGER;
+			external_object->integer.value = ACPI_CA_VERSION;
+			break;
+
 		case AML_INT_NAMEPATH_OP:
 			/*
 			 * This is a named reference, get the string.  We already know that
@@ -141,7 +146,7 @@
 			length = MAX_STRING_LENGTH;
 			external_object->type = ACPI_TYPE_STRING;
 			external_object->string.pointer = (NATIVE_CHAR *) data_space;
-			status = acpi_ns_handle_to_pathname ((ACPI_HANDLE *) internal_object->reference.node,
+			status = acpi_ns_handle_to_pathname ((acpi_handle *) internal_object->reference.node,
 					 &length, (char *) data_space);
 
 			/* Converted (external) string length is returned from above */
@@ -183,14 +188,14 @@
 		/*
 		 * There is no corresponding external object type
 		 */
-		return (AE_SUPPORT);
+		return_ACPI_STATUS (AE_SUPPORT);
 		break;
 	}
 
 
 	*buffer_space_used = (u32) ROUND_UP_TO_NATIVE_WORD (length);
 
-	return (status);
+	return_ACPI_STATUS (status);
 }
 
 
@@ -206,32 +211,33 @@
  *
  ******************************************************************************/
 
-ACPI_STATUS
+acpi_status
 acpi_ut_copy_ielement_to_eelement (
 	u8                      object_type,
-	ACPI_OPERAND_OBJECT     *source_object,
-	ACPI_GENERIC_STATE      *state,
+	acpi_operand_object     *source_object,
+	acpi_generic_state      *state,
 	void                    *context)
 {
-	ACPI_STATUS             status = AE_OK;
-	ACPI_PKG_INFO           *info = (ACPI_PKG_INFO *) context;
+	acpi_status             status = AE_OK;
+	acpi_pkg_info           *info = (acpi_pkg_info *) context;
 	u32                     object_space;
 	u32                     this_index;
-	ACPI_OBJECT             *target_object;
+	acpi_object             *target_object;
 
 
-	this_index      = state->pkg.index;
-	target_object   = (ACPI_OBJECT *)
-			   &((ACPI_OBJECT *)(state->pkg.dest_object))->package.elements[this_index];
+	FUNCTION_ENTRY ();
 
 
+	this_index   = state->pkg.index;
+	target_object = (acpi_object *)
+			  &((acpi_object *)(state->pkg.dest_object))->package.elements[this_index];
+
 	switch (object_type) {
 	case ACPI_COPY_TYPE_SIMPLE:
 
 		/*
 		 * This is a simple or null object -- get the size
 		 */
-
 		status = acpi_ut_copy_isimple_to_esimple (source_object,
 				  target_object, info->free_space, &object_space);
 		if (ACPI_FAILURE (status)) {
@@ -247,7 +253,7 @@
 		 */
 		target_object->type             = ACPI_TYPE_PACKAGE;
 		target_object->package.count    = source_object->package.count;
-		target_object->package.elements = (ACPI_OBJECT *) info->free_space;
+		target_object->package.elements = (acpi_object *) info->free_space;
 
 		/*
 		 * Pass the new package object back to the package walk routine
@@ -259,7 +265,7 @@
 		 * update the buffer length counter
 		 */
 		object_space = (u32) ROUND_UP_TO_NATIVE_WORD (
-				   target_object->package.count * sizeof (ACPI_OBJECT));
+				   target_object->package.count * sizeof (acpi_object));
 		break;
 
 	default:
@@ -293,21 +299,24 @@
  *
  ******************************************************************************/
 
-static ACPI_STATUS
+static acpi_status
 acpi_ut_copy_ipackage_to_epackage (
-	ACPI_OPERAND_OBJECT     *internal_object,
+	acpi_operand_object     *internal_object,
 	u8                      *buffer,
 	u32                     *space_used)
 {
-	ACPI_OBJECT             *external_object;
-	ACPI_STATUS             status;
-	ACPI_PKG_INFO           info;
+	acpi_object             *external_object;
+	acpi_status             status;
+	acpi_pkg_info           info;
+
+
+	FUNCTION_TRACE ("Ut_copy_ipackage_to_epackage");
 
 
 	/*
 	 * First package at head of the buffer
 	 */
-	external_object = (ACPI_OBJECT *) buffer;
+	external_object = (acpi_object *) buffer;
 
 	/*
 	 * Free space begins right after the first package
@@ -315,21 +324,20 @@
 	info.length      = 0;
 	info.object_space = 0;
 	info.num_packages = 1;
-	info.free_space  = buffer + ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT));
+	info.free_space  = buffer + ROUND_UP_TO_NATIVE_WORD (sizeof (acpi_object));
 
 
 	external_object->type              = internal_object->common.type;
 	external_object->package.count     = internal_object->package.count;
-	external_object->package.elements  = (ACPI_OBJECT *) info.free_space;
+	external_object->package.elements  = (acpi_object *) info.free_space;
 
 
 	/*
 	 * Build an array of ACPI_OBJECTS in the buffer
 	 * and move the free space past it
 	 */
-
 	info.free_space += external_object->package.count *
-			  ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT));
+			  ROUND_UP_TO_NATIVE_WORD (sizeof (acpi_object));
 
 
 	status = acpi_ut_walk_package_tree (internal_object, external_object,
@@ -337,7 +345,7 @@
 
 	*space_used = info.length;
 
-	return (status);
+	return_ACPI_STATUS (status);
 
 }
 
@@ -355,12 +363,15 @@
  *
  ******************************************************************************/
 
-ACPI_STATUS
+acpi_status
 acpi_ut_copy_iobject_to_eobject (
-	ACPI_OPERAND_OBJECT     *internal_object,
-	ACPI_BUFFER             *ret_buffer)
+	acpi_operand_object     *internal_object,
+	acpi_buffer             *ret_buffer)
 {
-	ACPI_STATUS             status;
+	acpi_status             status;
+
+
+	FUNCTION_TRACE ("Ut_copy_iobject_to_eobject");
 
 
 	if (IS_THIS_OBJECT_TYPE (internal_object, ACPI_TYPE_PACKAGE)) {
@@ -377,18 +388,18 @@
 		 * Build a simple object (no nested objects)
 		 */
 		status = acpi_ut_copy_isimple_to_esimple (internal_object,
-				  (ACPI_OBJECT *) ret_buffer->pointer,
+				  (acpi_object *) ret_buffer->pointer,
 				  ((u8 *) ret_buffer->pointer +
-				  ROUND_UP_TO_NATIVE_WORD (sizeof (ACPI_OBJECT))),
+				  ROUND_UP_TO_NATIVE_WORD (sizeof (acpi_object))),
 				  &ret_buffer->length);
 		/*
 		 * build simple does not include the object size in the length
 		 * so we add it in here
 		 */
-		ret_buffer->length += sizeof (ACPI_OBJECT);
+		ret_buffer->length += sizeof (acpi_object);
 	}
 
-	return (status);
+	return_ACPI_STATUS (status);
 }
 
 
@@ -408,46 +419,83 @@
  *
  ******************************************************************************/
 
-ACPI_STATUS
+acpi_status
 acpi_ut_copy_esimple_to_isimple (
-	ACPI_OBJECT             *external_object,
-	ACPI_OPERAND_OBJECT     *internal_object)
+	acpi_object             *external_object,
+	acpi_operand_object     **ret_internal_object)
 {
+	acpi_operand_object     *internal_object;
+
 
+	FUNCTION_TRACE ("Ut_copy_esimple_to_isimple");
 
-	internal_object->common.type = (u8) external_object->type;
 
+	/*
+	 * Simple types supported are: String, Buffer, Integer
+	 */
 	switch (external_object->type) {
+	case ACPI_TYPE_STRING:
+	case ACPI_TYPE_BUFFER:
+	case ACPI_TYPE_INTEGER:
+
+		internal_object = acpi_ut_create_internal_object ((u8) external_object->type);
+		if (!internal_object) {
+			return_ACPI_STATUS (AE_NO_MEMORY);
+		}
+		break;
+
+	default:
+		/*
+		 * Whatever other type -- it is not supported
+		 */
+		return_ACPI_STATUS (AE_SUPPORT);
+		break;
+	}
+
+
+	switch (external_object->type) {
+
+	/* Must COPY string and buffer contents */
 
 	case ACPI_TYPE_STRING:
 
+		internal_object->string.pointer = ACPI_MEM_CALLOCATE (external_object->string.length + 1);
+		if (!internal_object->string.pointer) {
+			return_ACPI_STATUS (AE_NO_MEMORY);
+		}
+
+		MEMCPY (internal_object->string.pointer,
+				external_object->string.pointer,
+				external_object->string.length);
+
 		internal_object->string.length = external_object->string.length;
-		internal_object->string.pointer = external_object->string.pointer;
 		break;
 
 
 	case ACPI_TYPE_BUFFER:
 
+		internal_object->buffer.pointer = ACPI_MEM_CALLOCATE (external_object->buffer.length);
+		if (!internal_object->buffer.pointer) {
+			return_ACPI_STATUS (AE_NO_MEMORY);
+		}
+
+		MEMCPY (internal_object->buffer.pointer,
+				external_object->buffer.pointer,
+				external_object->buffer.length);
+
 		internal_object->buffer.length = external_object->buffer.length;
-		internal_object->buffer.pointer = external_object->buffer.pointer;
 		break;
 
 
 	case ACPI_TYPE_INTEGER:
-		/*
-		 * Number is included in the object itself
-		 */
-		internal_object->integer.value  = external_object->integer.value;
-		break;
 
-
-	default:
-		return (AE_CTRL_RETURN_VALUE);
+		internal_object->integer.value  = external_object->integer.value;
 		break;
 	}
 
 
-	return (AE_OK);
+	*ret_internal_object = internal_object;
+	return_ACPI_STATUS (AE_OK);
 }
 
 
@@ -474,43 +522,45 @@
  *
  ******************************************************************************/
 
-static ACPI_STATUS
+static acpi_status
 acpi_ut_copy_epackage_to_ipackage (
-	ACPI_OPERAND_OBJECT     *internal_object,
+	acpi_operand_object     *internal_object,
 	u8                      *buffer,
 	u32                     *space_used)
 {
 	u8                      *free_space;
-	ACPI_OBJECT             *external_object;
+	acpi_object             *external_object;
 	u32                     length = 0;
 	u32                     this_index;
 	u32                     object_space = 0;
-	ACPI_OPERAND_OBJECT     *this_internal_obj;
-	ACPI_OBJECT             *this_external_obj;
+	acpi_operand_object     *this_internal_obj;
+	acpi_object             *this_external_obj;
+
+
+	FUNCTION_TRACE ("Ut_copy_epackage_to_ipackage");
 
 
 	/*
 	 * First package at head of the buffer
 	 */
-	external_object = (ACPI_OBJECT *)buffer;
+	external_object = (acpi_object *)buffer;
 
 	/*
 	 * Free space begins right after the first package
 	 */
-	free_space = buffer + sizeof(ACPI_OBJECT);
+	free_space = buffer + sizeof(acpi_object);
 
 
 	external_object->type              = internal_object->common.type;
 	external_object->package.count     = internal_object->package.count;
-	external_object->package.elements  = (ACPI_OBJECT *)free_space;
+	external_object->package.elements  = (acpi_object *)free_space;
 
 
 	/*
 	 * Build an array of ACPI_OBJECTS in the buffer
 	 * and move the free space past it
 	 */
-
-	free_space += external_object->package.count * sizeof(ACPI_OBJECT);
+	free_space += external_object->package.count * sizeof(acpi_object);
 
 
 	/* Call Walk_package */
@@ -533,12 +583,15 @@
  *
  ******************************************************************************/
 
-ACPI_STATUS
+acpi_status
 acpi_ut_copy_eobject_to_iobject (
-	ACPI_OBJECT             *external_object,
-	ACPI_OPERAND_OBJECT     *internal_object)
+	acpi_object             *external_object,
+	acpi_operand_object     **internal_object)
 {
-	ACPI_STATUS             status;
+	acpi_status             status;
+
+
+	FUNCTION_TRACE ("Ut_copy_eobject_to_iobject");
 
 
 	if (external_object->type == ACPI_TYPE_PACKAGE) {
@@ -555,7 +608,10 @@
 				 Ret_buffer->Pointer,
 				 &Ret_buffer->Length);
 */
-		return (AE_NOT_IMPLEMENTED);
+		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,
+			"Packages as parameters not implemented!\n"));
+
+		return_ACPI_STATUS (AE_NOT_IMPLEMENTED);
 	}
 
 	else {
@@ -563,13 +619,9 @@
 		 * Build a simple object (no nested objects)
 		 */
 		status = acpi_ut_copy_esimple_to_isimple (external_object, internal_object);
-		/*
-		 * build simple does not include the object size in the length
-		 * so we add it in here
-		 */
 	}
 
-	return (status);
+	return_ACPI_STATUS (status);
 }
 
 
@@ -585,21 +637,24 @@
  *
  ******************************************************************************/
 
-ACPI_STATUS
+acpi_status
 acpi_ut_copy_ielement_to_ielement (
 	u8                      object_type,
-	ACPI_OPERAND_OBJECT     *source_object,
-	ACPI_GENERIC_STATE      *state,
+	acpi_operand_object     *source_object,
+	acpi_generic_state      *state,
 	void                    *context)
 {
-	ACPI_STATUS             status = AE_OK;
+	acpi_status             status = AE_OK;
 	u32                     this_index;
-	ACPI_OPERAND_OBJECT     **this_target_ptr;
-	ACPI_OPERAND_OBJECT     *target_object;
+	acpi_operand_object     **this_target_ptr;
+	acpi_operand_object     *target_object;
+
+
+	FUNCTION_ENTRY ();
 
 
 	this_index    = state->pkg.index;
-	this_target_ptr = (ACPI_OPERAND_OBJECT **)
+	this_target_ptr = (acpi_operand_object **)
 			   &state->pkg.dest_object->package.elements[this_index];
 
 	switch (object_type) {
@@ -614,7 +669,7 @@
 		}
 
 		status = acpi_ex_store_object_to_object (source_object, target_object,
-				  (ACPI_WALK_STATE *) context);
+				  (acpi_walk_state *) context);
 		if (ACPI_FAILURE (status)) {
 			return (status);
 		}
@@ -671,13 +726,16 @@
  *
  ******************************************************************************/
 
-ACPI_STATUS
+acpi_status
 acpi_ut_copy_ipackage_to_ipackage (
-	ACPI_OPERAND_OBJECT     *source_obj,
-	ACPI_OPERAND_OBJECT     *dest_obj,
-	ACPI_WALK_STATE         *walk_state)
+	acpi_operand_object     *source_obj,
+	acpi_operand_object     *dest_obj,
+	acpi_walk_state         *walk_state)
 {
-	ACPI_STATUS             status = AE_OK;
+	acpi_status             status = AE_OK;
+
+
+	FUNCTION_TRACE ("Ut_copy_ipackage_to_ipackage");
 
 
 	dest_obj->common.type   = source_obj->common.type;
@@ -687,21 +745,20 @@
 	/*
 	 * Create the object array and walk the source package tree
 	 */
-
-	dest_obj->package.elements = acpi_ut_callocate ((source_obj->package.count + 1) *
+	dest_obj->package.elements = ACPI_MEM_CALLOCATE ((source_obj->package.count + 1) *
 			 sizeof (void *));
 	dest_obj->package.next_element = dest_obj->package.elements;
 
 	if (!dest_obj->package.elements) {
 		REPORT_ERROR (
 			("Aml_build_copy_internal_package_object: Package allocation failure\n"));
-		return (AE_NO_MEMORY);
+		return_ACPI_STATUS (AE_NO_MEMORY);
 	}
 
 
 	status = acpi_ut_walk_package_tree (source_obj, dest_obj,
 			 acpi_ut_copy_ielement_to_ielement, walk_state);
 
-	return (status);
+	return_ACPI_STATUS (status);
 }
 

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)