field_flags = AML_FIELD_ACCESS_BYTE;
if (bit_count == 0) { ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "Attempt to create_field of length 0\n")); status = AE_AML_OPERAND_VALUE; goto cleanup; }
acpi_ds_init_buffer_field (	u16                             aml_opcode,	union acpi_operand_object       *obj_desc,	union acpi_operand_object       *buffer_desc,	union acpi_operand_object       *offset_desc,	union acpi_operand_object       *length_desc,	union acpi_operand_object       *result_desc){	u32                             offset;	u32                             bit_offset;	u32                             bit_count;	u8                              field_flags;	acpi_status                     status;	ACPI_FUNCTION_TRACE_PTR ("ds_init_buffer_field", obj_desc);	/* Host object must be a Buffer */	if (ACPI_GET_OBJECT_TYPE (buffer_desc) != ACPI_TYPE_BUFFER) {		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,			"Target of Create Field is not a Buffer object - %s\n",			acpi_ut_get_object_type_name (buffer_desc)));		status = AE_AML_OPERAND_TYPE;		goto cleanup;	}	/*	 * The last parameter to all of these opcodes (result_desc) started	 * out as a name_string, and should therefore now be a NS node	 * after resolution in acpi_ex_resolve_operands().	 */	if (ACPI_GET_DESCRIPTOR_TYPE (result_desc) != ACPI_DESC_TYPE_NAMED) {		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR, "(%s) destination not a NS Node [%s]\n",				acpi_ps_get_opcode_name (aml_opcode), acpi_ut_get_descriptor_name (result_desc)));		status = AE_AML_OPERAND_TYPE;		goto cleanup;	}	offset = (u32) offset_desc->integer.value;	/*	 * Setup the Bit offsets and counts, according to the opcode	 */	switch (aml_opcode) {	case AML_CREATE_FIELD_OP:		/* Offset is in bits, count is in bits */		bit_offset = offset;		bit_count  = (u32) length_desc->integer.value;		field_flags = AML_FIELD_ACCESS_BYTE;		break;	case AML_CREATE_BIT_FIELD_OP:		/* Offset is in bits, Field is one bit */		bit_offset = offset;		bit_count  = 1;		field_flags = AML_FIELD_ACCESS_BYTE;		break;	case AML_CREATE_BYTE_FIELD_OP:		/* Offset is in bytes, field is one byte */		bit_offset = 8 * offset;		bit_count  = 8;		field_flags = AML_FIELD_ACCESS_BYTE;		break;	case AML_CREATE_WORD_FIELD_OP:		/* Offset is in bytes, field is one word */		bit_offset = 8 * offset;		bit_count  = 16;		field_flags = AML_FIELD_ACCESS_WORD;		break;	case AML_CREATE_DWORD_FIELD_OP:		/* Offset is in bytes, field is one dword */		bit_offset = 8 * offset;		bit_count  = 32;		field_flags = AML_FIELD_ACCESS_DWORD;		break;	case AML_CREATE_QWORD_FIELD_OP:		/* Offset is in bytes, field is one qword */		bit_offset = 8 * offset;		bit_count  = 64;		field_flags = AML_FIELD_ACCESS_QWORD;		break;	default:		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,			"Unknown field creation opcode %02x\n",			aml_opcode));		status = AE_AML_BAD_OPCODE;		goto cleanup;	}	/* Entire field must fit within the current length of the buffer */	if ((bit_offset + bit_count) >		(8 * (u32) buffer_desc->buffer.length)) {		ACPI_DEBUG_PRINT ((ACPI_DB_ERROR,			"Field [%4.4s] size %d exceeds Buffer [%4.4s] size %d (bits)\n",			 acpi_ut_get_node_name (result_desc),			 bit_offset + bit_count,			 acpi_ut_get_node_name (buffer_desc->buffer.node),			 8 * (u32) buffer_desc->buffer.length));		status = AE_AML_BUFFER_LIMIT;		goto cleanup;	}	/*	 * Initialize areas of the field object that are common to all fields	 * For field_flags, use LOCK_RULE = 0 (NO_LOCK), UPDATE_RULE = 0 (UPDATE_PRESERVE)	 */	status = acpi_ex_prep_common_field_object (obj_desc, field_flags, 0,			  bit_offset, bit_count);	if (ACPI_FAILURE (status)) {		goto cleanup;	}	obj_desc->buffer_field.buffer_obj = buffer_desc;	/* Reference count for buffer_desc inherits obj_desc count */	buffer_desc->common.reference_count = (u16) (buffer_desc->common.reference_count +			  obj_desc->common.reference_count);cleanup:	/* Always delete the operands */	acpi_ut_remove_reference (offset_desc);	acpi_ut_remove_reference (buffer_desc);	if (aml_opcode == AML_CREATE_FIELD_OP) {		acpi_ut_remove_reference (length_desc);	}	/* On failure, delete the result descriptor */	if (ACPI_FAILURE (status)) {		acpi_ut_remove_reference (result_desc); /* Result descriptor */	}	else {		/* Now the address and length are valid for this buffer_field */		obj_desc->buffer_field.flags |= AOPOBJ_DATA_VALID;	}	return_ACPI_STATUS (status);}