X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Facpi%2Fresources%2Frsmemory.c;h=a5131936d6904187f9d6d480a795f6d7f5ae3fa8;hb=43bc926fffd92024b46cafaf7350d669ba9ca884;hp=7c935aecf0752a5dfcb73ad3fd6cdb27393b81fc;hpb=cee37fe97739d85991964371c1f3a745c00dd236;p=linux-2.6.git diff --git a/drivers/acpi/resources/rsmemory.c b/drivers/acpi/resources/rsmemory.c index 7c935aecf..a5131936d 100644 --- a/drivers/acpi/resources/rsmemory.c +++ b/drivers/acpi/resources/rsmemory.c @@ -5,7 +5,7 @@ ******************************************************************************/ /* - * Copyright (C) 2000 - 2005, R. Byron Moore + * Copyright (C) 2000 - 2006, R. Byron Moore * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -41,526 +41,195 @@ * POSSIBILITY OF SUCH DAMAGES. */ - #include #include #define _COMPONENT ACPI_RESOURCES - ACPI_MODULE_NAME ("rsmemory") - +ACPI_MODULE_NAME("rsmemory") /******************************************************************************* * - * FUNCTION: acpi_rs_memory24_resource - * - * PARAMETERS: byte_stream_buffer - Pointer to the resource input byte - * stream - * bytes_consumed - Pointer to where the number of bytes - * consumed the byte_stream_buffer is - * returned - * output_buffer - Pointer to the return data buffer - * structure_size - Pointer to where the number of bytes - * in the return data struct is returned - * - * RETURN: Status - * - * DESCRIPTION: Take the resource byte stream and fill out the appropriate - * structure pointed to by the output_buffer. Return the - * number of bytes consumed from the byte stream. + * acpi_rs_convert_memory24 * ******************************************************************************/ +struct acpi_rsconvert_info acpi_rs_convert_memory24[4] = { + {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_MEMORY24, + ACPI_RS_SIZE(struct acpi_resource_memory24), + ACPI_RSC_TABLE_SIZE(acpi_rs_convert_memory24)}, -acpi_status -acpi_rs_memory24_resource ( - u8 *byte_stream_buffer, - acpi_size *bytes_consumed, - u8 **output_buffer, - acpi_size *structure_size) -{ - u8 *buffer = byte_stream_buffer; - struct acpi_resource *output_struct = (void *) *output_buffer; - u16 temp16 = 0; - u8 temp8 = 0; - acpi_size struct_size = ACPI_SIZEOF_RESOURCE (struct acpi_resource_mem24); - - - ACPI_FUNCTION_TRACE ("rs_memory24_resource"); - - - /* - * Point past the Descriptor to get the number of bytes consumed - */ - buffer += 1; - - ACPI_MOVE_16_TO_16 (&temp16, buffer); - buffer += 2; - *bytes_consumed = (acpi_size) temp16 + 3; - output_struct->id = ACPI_RSTYPE_MEM24; - - /* - * Check Byte 3 the Read/Write bit - */ - temp8 = *buffer; - buffer += 1; - output_struct->data.memory24.read_write_attribute = temp8 & 0x01; - - /* - * Get min_base_address (Bytes 4-5) - */ - ACPI_MOVE_16_TO_16 (&temp16, buffer); - buffer += 2; - output_struct->data.memory24.min_base_address = temp16; + {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_MEMORY24, + sizeof(struct aml_resource_memory24), + 0}, - /* - * Get max_base_address (Bytes 6-7) - */ - ACPI_MOVE_16_TO_16 (&temp16, buffer); - buffer += 2; - output_struct->data.memory24.max_base_address = temp16; + /* Read/Write bit */ + {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.memory24.write_protect), + AML_OFFSET(memory24.flags), + 0}, /* - * Get Alignment (Bytes 8-9) + * These fields are contiguous in both the source and destination: + * Minimum Base Address + * Maximum Base Address + * Address Base Alignment + * Range Length */ - ACPI_MOVE_16_TO_16 (&temp16, buffer); - buffer += 2; - output_struct->data.memory24.alignment = temp16; - - /* - * Get range_length (Bytes 10-11) - */ - ACPI_MOVE_16_TO_16 (&temp16, buffer); - output_struct->data.memory24.range_length = temp16; - - /* - * Set the Length parameter - */ - output_struct->length = (u32) struct_size; - - /* - * Return the final size of the structure - */ - *structure_size = struct_size; - return_ACPI_STATUS (AE_OK); -} - + {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.memory24.minimum), + AML_OFFSET(memory24.minimum), + 4} +}; /******************************************************************************* * - * FUNCTION: acpi_rs_memory24_stream - * - * PARAMETERS: linked_list - Pointer to the resource linked list - * output_buffer - Pointer to the user's return buffer - * bytes_consumed - Pointer to where the number of bytes - * used in the output_buffer is returned - * - * RETURN: Status - * - * DESCRIPTION: Take the linked list resource structure and fills in the - * the appropriate bytes in a byte stream + * acpi_rs_convert_memory32 * ******************************************************************************/ -acpi_status -acpi_rs_memory24_stream ( - struct acpi_resource *linked_list, - u8 **output_buffer, - acpi_size *bytes_consumed) -{ - u8 *buffer = *output_buffer; - u16 temp16 = 0; - u8 temp8 = 0; +struct acpi_rsconvert_info acpi_rs_convert_memory32[4] = { + {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_MEMORY32, + ACPI_RS_SIZE(struct acpi_resource_memory32), + ACPI_RSC_TABLE_SIZE(acpi_rs_convert_memory32)}, + {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_MEMORY32, + sizeof(struct aml_resource_memory32), + 0}, - ACPI_FUNCTION_TRACE ("rs_memory24_stream"); - + /* Read/Write bit */ + {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.memory32.write_protect), + AML_OFFSET(memory32.flags), + 0}, /* - * The descriptor field is static + * These fields are contiguous in both the source and destination: + * Minimum Base Address + * Maximum Base Address + * Address Base Alignment + * Range Length */ - *buffer = 0x81; - buffer += 1; - - /* - * The length field is static - */ - temp16 = 0x09; - ACPI_MOVE_16_TO_16 (buffer, &temp16); - buffer += 2; - - /* - * Set the Information Byte - */ - temp8 = (u8) (linked_list->data.memory24.read_write_attribute & 0x01); - *buffer = temp8; - buffer += 1; - - /* - * Set the Range minimum base address - */ - ACPI_MOVE_32_TO_16 (buffer, &linked_list->data.memory24.min_base_address); - buffer += 2; - - /* - * Set the Range maximum base address - */ - ACPI_MOVE_32_TO_16 (buffer, &linked_list->data.memory24.max_base_address); - buffer += 2; - - /* - * Set the base alignment - */ - ACPI_MOVE_32_TO_16 (buffer, &linked_list->data.memory24.alignment); - buffer += 2; - - /* - * Set the range length - */ - ACPI_MOVE_32_TO_16 (buffer, &linked_list->data.memory24.range_length); - buffer += 2; - - /* - * Return the number of bytes consumed in this operation - */ - *bytes_consumed = ACPI_PTR_DIFF (buffer, *output_buffer); - return_ACPI_STATUS (AE_OK); -} - + {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.memory32.minimum), + AML_OFFSET(memory32.minimum), + 4} +}; /******************************************************************************* * - * FUNCTION: acpi_rs_memory32_range_resource - * - * PARAMETERS: byte_stream_buffer - Pointer to the resource input byte - * stream - * bytes_consumed - Pointer to where the number of bytes - * consumed the byte_stream_buffer is - * returned - * output_buffer - Pointer to the return data buffer - * structure_size - Pointer to where the number of bytes - * in the return data struct is returned - * - * RETURN: Status - * - * DESCRIPTION: Take the resource byte stream and fill out the appropriate - * structure pointed to by the output_buffer. Return the - * number of bytes consumed from the byte stream. + * acpi_rs_convert_fixed_memory32 * ******************************************************************************/ -acpi_status -acpi_rs_memory32_range_resource ( - u8 *byte_stream_buffer, - acpi_size *bytes_consumed, - u8 **output_buffer, - acpi_size *structure_size) -{ - u8 *buffer = byte_stream_buffer; - struct acpi_resource *output_struct = (void *) *output_buffer; - u16 temp16 = 0; - u8 temp8 = 0; - acpi_size struct_size = ACPI_SIZEOF_RESOURCE (struct acpi_resource_mem32); - - - ACPI_FUNCTION_TRACE ("rs_memory32_range_resource"); - - - /* - * Point past the Descriptor to get the number of bytes consumed - */ - buffer += 1; - - ACPI_MOVE_16_TO_16 (&temp16, buffer); - buffer += 2; - *bytes_consumed = (acpi_size) temp16 + 3; - - output_struct->id = ACPI_RSTYPE_MEM32; - - /* - * Point to the place in the output buffer where the data portion will - * begin. - * 1. Set the RESOURCE_DATA * Data to point to its own address, then - * 2. Set the pointer to the next address. - * - * NOTE: output_struct->Data is cast to u8, otherwise, this addition adds - * 4 * sizeof(RESOURCE_DATA) instead of 4 * sizeof(u8) - */ - - /* - * Check Byte 3 the Read/Write bit - */ - temp8 = *buffer; - buffer += 1; - - output_struct->data.memory32.read_write_attribute = temp8 & 0x01; - - /* - * Get min_base_address (Bytes 4-7) - */ - ACPI_MOVE_32_TO_32 (&output_struct->data.memory32.min_base_address, buffer); - buffer += 4; - - /* - * Get max_base_address (Bytes 8-11) - */ - ACPI_MOVE_32_TO_32 (&output_struct->data.memory32.max_base_address, buffer); - buffer += 4; - - /* - * Get Alignment (Bytes 12-15) - */ - ACPI_MOVE_32_TO_32 (&output_struct->data.memory32.alignment, buffer); - buffer += 4; +struct acpi_rsconvert_info acpi_rs_convert_fixed_memory32[4] = { + {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_FIXED_MEMORY32, + ACPI_RS_SIZE(struct acpi_resource_fixed_memory32), + ACPI_RSC_TABLE_SIZE(acpi_rs_convert_fixed_memory32)}, - /* - * Get range_length (Bytes 16-19) - */ - ACPI_MOVE_32_TO_32 (&output_struct->data.memory32.range_length, buffer); + {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_FIXED_MEMORY32, + sizeof(struct aml_resource_fixed_memory32), + 0}, - /* - * Set the Length parameter - */ - output_struct->length = (u32) struct_size; + /* Read/Write bit */ + {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.fixed_memory32.write_protect), + AML_OFFSET(fixed_memory32.flags), + 0}, /* - * Return the final size of the structure + * These fields are contiguous in both the source and destination: + * Base Address + * Range Length */ - *structure_size = struct_size; - return_ACPI_STATUS (AE_OK); -} - + {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.fixed_memory32.address), + AML_OFFSET(fixed_memory32.address), + 2} +}; /******************************************************************************* * - * FUNCTION: acpi_rs_fixed_memory32_resource - * - * PARAMETERS: byte_stream_buffer - Pointer to the resource input byte - * stream - * bytes_consumed - Pointer to where the number of bytes - * consumed the byte_stream_buffer is - * returned - * output_buffer - Pointer to the return data buffer - * structure_size - Pointer to where the number of bytes - * in the return data struct is returned - * - * RETURN: Status - * - * DESCRIPTION: Take the resource byte stream and fill out the appropriate - * structure pointed to by the output_buffer. Return the - * number of bytes consumed from the byte stream. + * acpi_rs_get_vendor_small * ******************************************************************************/ -acpi_status -acpi_rs_fixed_memory32_resource ( - u8 *byte_stream_buffer, - acpi_size *bytes_consumed, - u8 **output_buffer, - acpi_size *structure_size) -{ - u8 *buffer = byte_stream_buffer; - struct acpi_resource *output_struct = (void *) *output_buffer; - u16 temp16 = 0; - u8 temp8 = 0; - acpi_size struct_size = ACPI_SIZEOF_RESOURCE (struct acpi_resource_fixed_mem32); - +struct acpi_rsconvert_info acpi_rs_get_vendor_small[3] = { + {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_VENDOR, + ACPI_RS_SIZE(struct acpi_resource_vendor), + ACPI_RSC_TABLE_SIZE(acpi_rs_get_vendor_small)}, - ACPI_FUNCTION_TRACE ("rs_fixed_memory32_resource"); + /* Length of the vendor data (byte count) */ + {ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length), + 0, + sizeof(u8)} + , - /* - * Point past the Descriptor to get the number of bytes consumed - */ - buffer += 1; - ACPI_MOVE_16_TO_16 (&temp16, buffer); - - buffer += 2; - *bytes_consumed = (acpi_size) temp16 + 3; - - output_struct->id = ACPI_RSTYPE_FIXED_MEM32; - - /* - * Check Byte 3 the Read/Write bit - */ - temp8 = *buffer; - buffer += 1; - output_struct->data.fixed_memory32.read_write_attribute = temp8 & 0x01; - - /* - * Get range_base_address (Bytes 4-7) - */ - ACPI_MOVE_32_TO_32 (&output_struct->data.fixed_memory32.range_base_address, buffer); - buffer += 4; - - /* - * Get range_length (Bytes 8-11) - */ - ACPI_MOVE_32_TO_32 (&output_struct->data.fixed_memory32.range_length, buffer); - - /* - * Set the Length parameter - */ - output_struct->length = (u32) struct_size; - - /* - * Return the final size of the structure - */ - *structure_size = struct_size; - return_ACPI_STATUS (AE_OK); -} + /* Vendor data */ + {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]), + sizeof(struct aml_resource_small_header), + 0} +}; /******************************************************************************* * - * FUNCTION: acpi_rs_memory32_range_stream - * - * PARAMETERS: linked_list - Pointer to the resource linked list - * output_buffer - Pointer to the user's return buffer - * bytes_consumed - Pointer to where the number of bytes - * used in the output_buffer is returned - * - * RETURN: Status - * - * DESCRIPTION: Take the linked list resource structure and fills in the - * the appropriate bytes in a byte stream + * acpi_rs_get_vendor_large * ******************************************************************************/ -acpi_status -acpi_rs_memory32_range_stream ( - struct acpi_resource *linked_list, - u8 **output_buffer, - acpi_size *bytes_consumed) -{ - u8 *buffer = *output_buffer; - u16 temp16 = 0; - u8 temp8 = 0; +struct acpi_rsconvert_info acpi_rs_get_vendor_large[3] = { + {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_VENDOR, + ACPI_RS_SIZE(struct acpi_resource_vendor), + ACPI_RSC_TABLE_SIZE(acpi_rs_get_vendor_large)}, + /* Length of the vendor data (byte count) */ - ACPI_FUNCTION_TRACE ("rs_memory32_range_stream"); + {ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length), + 0, + sizeof(u8)} + , + /* Vendor data */ - /* - * The descriptor field is static - */ - *buffer = 0x85; - buffer += 1; - - /* - * The length field is static - */ - temp16 = 0x11; - - ACPI_MOVE_16_TO_16 (buffer, &temp16); - buffer += 2; - - /* - * Set the Information Byte - */ - temp8 = (u8) (linked_list->data.memory32.read_write_attribute & 0x01); - *buffer = temp8; - buffer += 1; - - /* - * Set the Range minimum base address - */ - ACPI_MOVE_32_TO_32 (buffer, &linked_list->data.memory32.min_base_address); - buffer += 4; - - /* - * Set the Range maximum base address - */ - ACPI_MOVE_32_TO_32 (buffer, &linked_list->data.memory32.max_base_address); - buffer += 4; - - /* - * Set the base alignment - */ - ACPI_MOVE_32_TO_32 (buffer, &linked_list->data.memory32.alignment); - buffer += 4; - - /* - * Set the range length - */ - ACPI_MOVE_32_TO_32 (buffer, &linked_list->data.memory32.range_length); - buffer += 4; - - /* - * Return the number of bytes consumed in this operation - */ - *bytes_consumed = ACPI_PTR_DIFF (buffer, *output_buffer); - return_ACPI_STATUS (AE_OK); -} - + {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]), + sizeof(struct aml_resource_large_header), + 0} +}; /******************************************************************************* * - * FUNCTION: acpi_rs_fixed_memory32_stream - * - * PARAMETERS: linked_list - Pointer to the resource linked list - * output_buffer - Pointer to the user's return buffer - * bytes_consumed - Pointer to where the number of bytes - * used in the output_buffer is returned - * - * RETURN: Status - * - * DESCRIPTION: Take the linked list resource structure and fills in the - * the appropriate bytes in a byte stream + * acpi_rs_set_vendor * ******************************************************************************/ -acpi_status -acpi_rs_fixed_memory32_stream ( - struct acpi_resource *linked_list, - u8 **output_buffer, - acpi_size *bytes_consumed) -{ - u8 *buffer = *output_buffer; - u16 temp16 = 0; - u8 temp8 = 0; +struct acpi_rsconvert_info acpi_rs_set_vendor[7] = { + /* Default is a small vendor descriptor */ + {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_VENDOR_SMALL, + sizeof(struct aml_resource_small_header), + ACPI_RSC_TABLE_SIZE(acpi_rs_set_vendor)}, - ACPI_FUNCTION_TRACE ("rs_fixed_memory32_stream"); + /* Get the length and copy the data */ + {ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length), + 0, + 0}, - /* - * The descriptor field is static - */ - *buffer = 0x86; - buffer += 1; + {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]), + sizeof(struct aml_resource_small_header), + 0}, /* - * The length field is static + * All done if the Vendor byte length is 7 or less, meaning that it will + * fit within a small descriptor */ - temp16 = 0x09; + {ACPI_RSC_EXIT_LE, 0, 0, 7}, - ACPI_MOVE_16_TO_16 (buffer, &temp16); - buffer += 2; + /* Must create a large vendor descriptor */ - /* - * Set the Information Byte - */ - temp8 = (u8) (linked_list->data.fixed_memory32.read_write_attribute & 0x01); - *buffer = temp8; - buffer += 1; + {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_VENDOR_LARGE, + sizeof(struct aml_resource_large_header), + 0}, - /* - * Set the Range base address - */ - ACPI_MOVE_32_TO_32 (buffer, - &linked_list->data.fixed_memory32.range_base_address); - buffer += 4; - - /* - * Set the range length - */ - ACPI_MOVE_32_TO_32 (buffer, - &linked_list->data.fixed_memory32.range_length); - buffer += 4; - - /* - * Return the number of bytes consumed in this operation - */ - *bytes_consumed = ACPI_PTR_DIFF (buffer, *output_buffer); - return_ACPI_STATUS (AE_OK); -} + {ACPI_RSC_COUNT16, ACPI_RS_OFFSET(data.vendor.byte_length), + 0, + 0}, + {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.vendor.byte_data[0]), + sizeof(struct aml_resource_large_header), + 0} +};