diff --git a/drivers/acpi/resources/rsmemory.c b/drivers/acpi/resources/rsmemory.c
new file mode 100644
index 0000000..7c935ae
--- /dev/null
+++ b/drivers/acpi/resources/rsmemory.c
@@ -0,0 +1,566 @@
+/*******************************************************************************
+ *
+ * Module Name: rsmem24 - Memory resource descriptors
+ *
+ ******************************************************************************/
+
+/*
+ * Copyright (C) 2000 - 2005, R. Byron Moore
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions, and the following disclaimer,
+ *    without modification.
+ * 2. Redistributions in binary form must reproduce at minimum a disclaimer
+ *    substantially similar to the "NO WARRANTY" disclaimer below
+ *    ("Disclaimer") and any redistribution must be conditioned upon
+ *    including a substantially similar Disclaimer requirement for further
+ *    binary redistribution.
+ * 3. Neither the names of the above-listed copyright holders nor the names
+ *    of any contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") version 2 as published by the Free
+ * Software Foundation.
+ *
+ * NO WARRANTY
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGES.
+ */
+
+
+#include <acpi/acpi.h>
+#include <acpi/acresrc.h>
+
+#define _COMPONENT          ACPI_RESOURCES
+	 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_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;
+
+	/*
+	 * Get max_base_address (Bytes 6-7)
+	 */
+	ACPI_MOVE_16_TO_16 (&temp16, buffer);
+	buffer += 2;
+	output_struct->data.memory24.max_base_address = temp16;
+
+	/*
+	 * Get Alignment (Bytes 8-9)
+	 */
+	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);
+}
+
+
+/*******************************************************************************
+ *
+ * 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_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;
+
+
+	ACPI_FUNCTION_TRACE ("rs_memory24_stream");
+
+
+	/*
+	 * The descriptor field is static
+	 */
+	*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);
+}
+
+
+/*******************************************************************************
+ *
+ * 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_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;
+
+	/*
+	 * Get range_length (Bytes 16-19)
+	 */
+	ACPI_MOVE_32_TO_32 (&output_struct->data.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);
+}
+
+
+/*******************************************************************************
+ *
+ * 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_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);
+
+
+	ACPI_FUNCTION_TRACE ("rs_fixed_memory32_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_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);
+}
+
+
+/*******************************************************************************
+ *
+ * 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_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;
+
+
+	ACPI_FUNCTION_TRACE ("rs_memory32_range_stream");
+
+
+	/*
+	 * 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);
+}
+
+
+/*******************************************************************************
+ *
+ * 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_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;
+
+
+	ACPI_FUNCTION_TRACE ("rs_fixed_memory32_stream");
+
+
+	/*
+	 * The descriptor field is static
+	 */
+	*buffer = 0x86;
+	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.fixed_memory32.read_write_attribute & 0x01);
+	*buffer = temp8;
+	buffer += 1;
+
+	/*
+	 * 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);
+}
+
