static u32 acpi_ex_decode_field_access(union acpi_operand_object *obj_desc, u8 field_flags, u32 * return_byte_alignment) { u32 access; u32 byte_alignment; u32 bit_length; ACPI_FUNCTION_TRACE(ex_decode_field_access); access = (field_flags & AML_FIELD_ACCESS_TYPE_MASK); switch (access) { case AML_FIELD_ACCESS_ANY: #ifdef ACPI_UNDER_DEVELOPMENT byte_alignment = acpi_ex_generate_access(obj_desc->common_field. start_field_bit_offset, obj_desc->common_field.bit_length, 0xFFFFFFFF /* Temp until we pass region_length as parameter */ ); bit_length = byte_alignment * 8; #endif byte_alignment = 1; bit_length = 8; break; case AML_FIELD_ACCESS_BYTE: case AML_FIELD_ACCESS_BUFFER: /* ACPI 2.0 (SMBus Buffer) */ byte_alignment = 1; bit_length = 8; break; case AML_FIELD_ACCESS_WORD: byte_alignment = 2; bit_length = 16; break; case AML_FIELD_ACCESS_DWORD: byte_alignment = 4; bit_length = 32; break; case AML_FIELD_ACCESS_QWORD: /* ACPI 2.0 */ byte_alignment = 8; bit_length = 64; break; default: /* Invalid field access type */ ACPI_ERROR((AE_INFO, "Unknown field access type 0x%X", access)); return_UINT32(0); } if (obj_desc->common.type == ACPI_TYPE_BUFFER_FIELD) { /* * buffer_field access can be on any byte boundary, so the * byte_alignment is always 1 byte -- regardless of any byte_alignment * implied by the field access type. */ byte_alignment = 1; } *return_byte_alignment = byte_alignment; return_UINT32(bit_length); }
static u32 acpi_ex_decode_field_access(union acpi_operand_object *obj_desc, u8 field_flags, u32 * return_byte_alignment) { u32 access; u32 byte_alignment; u32 bit_length; ACPI_FUNCTION_TRACE(ex_decode_field_access); access = (field_flags & AML_FIELD_ACCESS_TYPE_MASK); switch (access) { case AML_FIELD_ACCESS_ANY: #ifdef ACPI_UNDER_DEVELOPMENT byte_alignment = acpi_ex_generate_access(obj_desc->common_field. start_field_bit_offset, obj_desc->common_field.bit_length, 0xFFFFFFFF /* */ ); bit_length = byte_alignment * 8; #endif byte_alignment = 1; bit_length = 8; break; case AML_FIELD_ACCESS_BYTE: case AML_FIELD_ACCESS_BUFFER: /* */ byte_alignment = 1; bit_length = 8; break; case AML_FIELD_ACCESS_WORD: byte_alignment = 2; bit_length = 16; break; case AML_FIELD_ACCESS_DWORD: byte_alignment = 4; bit_length = 32; break; case AML_FIELD_ACCESS_QWORD: /* */ byte_alignment = 8; bit_length = 64; break; default: /* */ ACPI_ERROR((AE_INFO, "Unknown field access type 0x%X", access)); return_UINT32(0); } if (obj_desc->common.type == ACPI_TYPE_BUFFER_FIELD) { /* */ byte_alignment = 1; } *return_byte_alignment = byte_alignment; return_UINT32(bit_length); }