]> git.pld-linux.org Git - packages/acpica.git/commitdiff
add tests tarball, add patches from fedora
authorElan Ruusamäe <glen@delfi.ee>
Fri, 20 Mar 2015 17:00:02 +0000 (17:00 +0000)
committerElan Ruusamäe <glen@delfi.ee>
Fri, 20 Mar 2015 17:00:02 +0000 (17:00 +0000)
OPT_LDFLAGS.patch [new file with mode: 0644]
aapits-linux.patch [new file with mode: 0644]
aapits-makefile.patch [new file with mode: 0644]
acpica.spec
asllookup-miscompare.patch [new file with mode: 0644]
debian-big_endian.patch [new file with mode: 0644]
debian-unaligned.patch [new file with mode: 0644]
name-miscompare.patch [new file with mode: 0644]
re-enable-big-endian.patch [new file with mode: 0644]

diff --git a/OPT_LDFLAGS.patch b/OPT_LDFLAGS.patch
new file mode 100644 (file)
index 0000000..70ffaf4
--- /dev/null
@@ -0,0 +1,34 @@
+diff -Naur acpica-unix2-20140926/generate/unix/Makefile.config acpica-unix2-20140926-patch/generate/unix/Makefile.config
+--- acpica-unix2-20140926/generate/unix/Makefile.config        2014-09-26 12:02:29.000000000 -0600
++++ acpica-unix2-20140926-patch/generate/unix/Makefile.config  2014-10-01 12:53:53.510530248 -0600
+@@ -23,6 +23,9 @@
+ # OPT_CFLAGS can be overridden on the make command line by
+ #   adding OPT_CFLAGS="..." to the invocation.
+ #
++# OPT_LDFLAGS can be overridden on the make command line by
++#   adding OPT_LDFLAGS="..." to the invocation.
++#
+ # Notes:
+ #   gcc should be version 4 or greater, otherwise some of the options
+ #     used will not be recognized.
+@@ -43,7 +46,7 @@
+ OBJDIR =     obj
+ BINDIR =     bin
+ COMPILEOBJ = $(CC) -c $(CFLAGS) $(OPT_CFLAGS) -o $@ $<
+-LINKPROG =   $(CC) $(OBJECTS) -o $(PROG) $(LDFLAGS)
++LINKPROG =   $(CC) $(OBJECTS) -o $(PROG) $(LDFLAGS) $(OPT_LDFLAGS)
+ PREFIX ?=    /usr
+ INSTALLDIR = $(PREFIX)/bin
+ UNAME_S := $(shell uname -s)
+@@ -136,6 +139,11 @@
+ OPT_CFLAGS ?= $(CWARNINGFLAGS)
+ #
++# Common linker flags
++#
++OPT_LDFLAGS ?= 
++
++#
+ # Optionally disable optimizations. Optimization causes problems on
+ # some compilers such as gcc 4.4
+ #
diff --git a/aapits-linux.patch b/aapits-linux.patch
new file mode 100644 (file)
index 0000000..c553fbd
--- /dev/null
@@ -0,0 +1,329 @@
+diff -urN acpica-unix2-20130626/tests/aapits/atexec.c acpica-unix2-20130626-aapits/tests/aapits/atexec.c
+--- acpica-unix2-20130626/tests/aapits/atexec.c        2013-01-17 12:48:28.000000000 -0700
++++ acpica-unix2-20130626-aapits/tests/aapits/atexec.c 2013-07-25 13:44:23.023894441 -0600
+@@ -639,6 +639,7 @@
+ }
++#if ACPI_MACHINE_WIDTH == 32
+ /*******************************************************************************
+  *
+  * FUNCTION:    AtBuildLocalRSDT
+@@ -757,8 +758,9 @@
+         LocalRSDT->Header.Checksum = (UINT8)~LocalRSDT->Header.Checksum;
+     }
+ }
++#endif
+ /*******************************************************************************
+  *
+  * FUNCTION:    AtBuildLocalXSDT
+@@ -1424,7 +1426,7 @@
+         ACPI_WARNING ((AE_INFO,
+             "Request on [%4.4s] is beyond region limit Req-%X+%X, Base=%X, Len-%X\n",
+             (RegionObject->Region.Node)->Name.Ascii, (UINT32) Address,
+-            ByteWidth, (UINT32) BufferAddress, Length));
++            ByteWidth, (UINT32) BufferAddress, (UINT32) Length));
+         return (AE_AML_REGION_LIMIT);
+     }
+@@ -1799,7 +1801,9 @@
+             Path, Obj.Integer.Value, Value);
+ #else
+         printf ("API Error: Value of %s is 0x%llx instead of expected 0x%llx\n",
+-            Path, Obj.Integer.Value, Value);
++            Path,
++          (long long unsigned int) Obj.Integer.Value,
++          (long long unsigned int) Value);
+ #endif
+         Status = AE_ERROR;
+     }
+@@ -1878,7 +1878,7 @@
+     {
+         TestErrors++;
+         printf ("Test Error: cannot allocate buffer of %d bytes\n",
+-            Results.Length);
++                (int) Results.Length);
+         return (AE_NO_MEMORY);
+     }
+     Results.Pointer = Object;
+@@ -1959,7 +1963,8 @@
+     {
+         printf ("AtCheckBuffer: unexpected length %d of Buffer vs"
+             " calculated %d bytes\n",
+-            Results.Length, ACPI_ROUND_UP_TO_NATIVE_WORD(sizeof (ACPI_OBJECT) + Length));
++            (int)Results.Length,
++          (int)(ACPI_ROUND_UP_TO_NATIVE_WORD(sizeof (ACPI_OBJECT) + Length)));
+     }
+     /* Initialize the return buffer structure */
+@@ -1968,7 +1973,7 @@
+     {
+         TestErrors++;
+         printf ("Test Error: cannot allocate buffer of %d bytes\n",
+-            Results.Length);
++            (int) Results.Length);
+         return (AE_NO_MEMORY);
+     }
+     Results.Pointer = Object;
+diff -urN acpica-unix2-20130626/tests/aapits/atinit.c acpica-unix2-20130626-aapits/tests/aapits/atinit.c
+--- acpica-unix2-20130626/tests/aapits/atinit.c        2013-01-17 12:48:28.000000000 -0700
++++ acpica-unix2-20130626-aapits/tests/aapits/atinit.c 2013-07-25 13:20:19.706705960 -0600
+@@ -3024,7 +3024,7 @@
+             AapiErrors++;
+             printf ("API Error: AcpiGetSystemInfo() returned"
+                 " Length %d, expected %d\n",
+-                OutBuffer.Length, sizeof (Info));
++                (int) OutBuffer.Length, (int) sizeof (Info));
+             return (AE_ERROR);
+         }
+@@ -3046,7 +3046,7 @@
+             AapiErrors++;
+             printf ("API Error: AcpiGetSystemInfo() returned"
+                 " Length %d, expected %d\n",
+-                OutBuffer.Length, sizeof (Info));
++                (int) OutBuffer.Length, (int) sizeof (Info));
+             return (AE_ERROR);
+         }
+@@ -3066,7 +3066,7 @@
+             AapiErrors++;
+             printf ("API Error: AcpiGetSystemInfo() returned"
+                 " Length %d, expected %d\n",
+-                OutBuffer.Length, sizeof (Info));
++                (int) OutBuffer.Length, (int) sizeof (Info));
+             return (AE_ERROR);
+         }
+         else if (OutBuffer.Pointer != &Info)
+@@ -3149,7 +3149,7 @@
+             AapiErrors++;
+             printf ("API Error: AcpiGetSystemInfo() returned"
+                 " Length %d, expected %d\n",
+-                OutBuffer.Length, sizeof (Info));
++                (int) OutBuffer.Length, (int) sizeof (Info));
+             return (AE_ERROR);
+         }
+         else if (OutBuffer.Pointer != &Info)
+@@ -3214,7 +3214,7 @@
+             AapiErrors++;
+             printf ("API Error: AcpiGetSystemInfo() returned"
+                 " Length %d, expected %d\n",
+-                OutBuffer.Length, sizeof (ACPI_SYSTEM_INFO));
++                (int) OutBuffer.Length, (int) sizeof (ACPI_SYSTEM_INFO));
+             return (AE_ERROR);
+         }
+         else
+diff -urN acpica-unix2-20130626/tests/aapits/atmain.c acpica-unix2-20130626-aapits/tests/aapits/atmain.c
+--- acpica-unix2-20130626/tests/aapits/atmain.c        2013-01-17 12:48:28.000000000 -0700
++++ acpica-unix2-20130626-aapits/tests/aapits/atmain.c 2013-07-25 13:18:22.083323948 -0600
+@@ -346,7 +336,7 @@
+     {
+         printf ("ACPICA API TS err: test num %ld of test case %ld"
+             " is not implemented\n",
+-            test_num, test_case);
++            (long int) test_num, (long int) test_case);
+         return (AtRetNotImpl);
+     }
+@@ -461,7 +451,7 @@
+     if (test_case < 1 || test_case > AT_TEST_CASE_NUM)
+     {
+         printf ("ACPICA API TS err: test case %ld is out of range 1 - %d\n",
+-            test_case, AT_TEST_CASE_NUM);
++            (long int) test_case, (int) AT_TEST_CASE_NUM);
+         return (AtRetBadParam);
+     }
+@@ -469,7 +459,7 @@
+     if (test_num < 0 || test_num > AtTestCase[test_case].TestsNum)
+     {
+         printf ("ACPICA API TS err: test num %ld is out of range 0 - %d\n",
+-            test_num, AtTestCase[test_case].TestsNum);
++            (long int) test_num, AtTestCase[test_case].TestsNum);
+         return (AtRetBadParam);
+     }
+
+diff -urN acpica-unix2-20130626/tests/aapits/atnamespace.c acpica-unix2-20130626-aapits/tests/aapits/atnamespace.c
+--- acpica-unix2-20130626/tests/aapits/atnamespace.c   2013-01-17 12:48:28.000000000 -0700
++++ acpica-unix2-20130626-aapits/tests/aapits/atnamespace.c    2013-07-25 13:24:15.366466707 -0600
+@@ -2535,7 +2535,8 @@
+ #else
+                 printf ("API Error: Address of %s (0x%llX) != (0x%llX)\n",
+                     PathNames[2 * i + 1],
+-                    Info->Address, ExpectedInfo[i].Address);
++                    (long long unsigned int) Info->Address,
++                  (long long unsigned int) ExpectedInfo[i].Address);
+ #endif
+ #else
+                 printf ("API Error: Address of %s (0x%X) != (0x%X)\n",
+@@ -2908,7 +2909,8 @@
+         TestErrors++;
+         printf ("AtGetNextObjectTypeCommon: different numbers of entities"
+             "in TypesNames (%d) and LevelTypes0000 (%d)\n",
+-            TypesCount, sizeof (LevelTypes0000) / sizeof (ACPI_OBJECT_TYPE));
++            TypesCount,
++          (int) (sizeof (LevelTypes0000) / sizeof (ACPI_OBJECT_TYPE)));
+         return (AE_ERROR);
+     }
+@@ -4192,7 +4194,9 @@
+             Pathname, Obj.Integer.Value, Value);
+ #else
+         printf ("API Error: Value of %s is 0x%llx instead of expected 0x%llx\n",
+-            Pathname, Obj.Integer.Value, Value);
++            Pathname,
++          (long long unsigned int) Obj.Integer.Value,
++          (long long unsigned int) Value);
+ #endif
+         Status = AE_ERROR;
+     }
+@@ -5199,7 +5203,7 @@
+             {
+                 AapiErrors++;
+                 printf ("API Error: AcpiOsAllocate(%d) returned NULL\n",
+-                    OutName.Length);
++                    (int) OutName.Length);
+                 return (AE_ERROR);
+             }
+         }
+diff -urN acpica-unix2-20130626/tests/aapits/atosxfctrl.c acpica-unix2-20130626-aapits/tests/aapits/atosxfctrl.c
+--- acpica-unix2-20130626/tests/aapits/atosxfctrl.c    2013-01-17 12:48:28.000000000 -0700
++++ acpica-unix2-20130626-aapits/tests/aapits/atosxfctrl.c     2013-07-25 13:30:00.375492751 -0600
+@@ -737,13 +737,15 @@
+ #if ACPI_MACHINE_WIDTH == 64
+ #ifdef    _MSC_VER
+         printf("OsxfCtrlFingReg: unexpected Width %d of Reg 0x%I64x\n",
++            Width, Address);
+ #else
+         printf("OsxfCtrlFingReg: unexpected Width %d of Reg 0x%llx\n",
++            Width, (long long unsigned int) Address);
+ #endif
+ #else
+         printf("OsxfCtrlFingReg: unexpected Width %d of Reg 0x%x\n",
+-#endif
+             Width, Address);
++#endif
+         return (NULL);
+     }
+@@ -764,15 +766,19 @@
+ #ifdef    _MSC_VER
+                 printf("OsxfCtrlFingReg: intersection Regs (0x%I64x: 0x%x)"
+                     " and (0x%I64x: 0x%x)\n",
++                    Reg->Address, Reg->Width, Address, Width);
+ #else
+                 printf("OsxfCtrlFingReg: intersection Regs (0x%llx: 0x%x)"
+                     " and (0x%llx: 0x%x)\n",
++                    (long long unsigned int) Reg->Address,
++                  Reg->Width,
++                  (long long unsigned int) Address, Width);
+ #endif
+ #else
+                 printf("OsxfCtrlFingReg: intersection Regs (0x%x: 0x%x)"
+                     " and (0x%x: 0x%x)\n",
+-#endif
+                     Reg->Address, Reg->Width, Address, Width);
++#endif
+                 return (NULL);
+             }
+         }
+@@ -786,13 +792,15 @@
+ #if ACPI_MACHINE_WIDTH == 64
+ #ifdef    _MSC_VER
+             printf("OsxfCtrlFingReg: no memory for Reg (0x%I64x: 0x%x)\n",
++                Reg->Address, Reg->Width);
+ #else
+             printf("OsxfCtrlFingReg: no memory for Reg (0x%llx: 0x%x)\n",
++                (long long unsigned int) Reg->Address, Reg->Width);
+ #endif
+ #else
+             printf("OsxfCtrlFingReg: no memory for Reg (0x%x: 0x%x)\n",
+-#endif
+                 Reg->Address, Reg->Width);
++#endif
+             return (NULL);
+         }
+         Reg->Type = Type;
+@@ -932,14 +940,19 @@
+ #if ACPI_MACHINE_WIDTH == 64
+ #ifdef    _MSC_VER
+             printf("%.2u (%s Address 0x%I64x: Width %.2u) r/w counts: %u/%u\n",
++                i, (Reg->Type == EMUL_REG_SYS)? "SYS": "IO",
++                Reg->Address, Reg->Width, Reg->ReadCount, Reg->WriteCount);
+ #else
+             printf("%.2u (%s Address 0x%llx: Width %.2u) r/w counts: %u/%u\n",
++                i, (Reg->Type == EMUL_REG_SYS)? "SYS": "IO",
++                (long long unsigned int) Reg->Address,
++              Reg->Width, Reg->ReadCount, Reg->WriteCount);
+ #endif
+ #else
+             printf("%.2u (%s Address 0x%.4x: Width %.2u) r/w counts: %u/%u\n",
+-#endif
+                 i, (Reg->Type == EMUL_REG_SYS)? "SYS": "IO",
+                 Reg->Address, Reg->Width, Reg->ReadCount, Reg->WriteCount);
++#endif
+             Reg = Reg->Next;
+             i++;
+         }
+diff -urN acpica-unix2-20130626/tests/aapits/atresource.c acpica-unix2-20130626-aapits/tests/aapits/atresource.c
+--- acpica-unix2-20130626/tests/aapits/atresource.c    2013-01-17 12:48:29.000000000 -0700
++++ acpica-unix2-20130626-aapits/tests/aapits/atresource.c     2013-07-25 13:25:49.423565947 -0600
+@@ -174,7 +174,7 @@
+         AapiErrors++;
+         printf ("API Error: AcpiGetCurrentResources(%s) returned Length %d,"
+             " expected %d\n",
+-            Pathname, OutBuffer.Length, RT0000_DEV0_CRS_LEN);
++            Pathname, (int) OutBuffer.Length, RT0000_DEV0_CRS_LEN);
+         return (AE_ERROR);
+     }
+@@ -490,7 +490,7 @@
+         AapiErrors++;
+         printf ("API Error: AcpiGetCurrentResources(%s) returned Length %d,"
+             " expected %d\n",
+-            Pathname, OutBuffer.Length, RT0000_DEV0_CRS_LEN);
++            Pathname, (int) OutBuffer.Length, RT0000_DEV0_CRS_LEN);
+         return (AE_ERROR);
+     }
+@@ -689,7 +689,7 @@
+         AapiErrors++;
+         printf ("Api Error: Resource->Length (%d) != %d\n",
+             CurrentResource->Length,
+-            ACPI_ROUND_UP_TO_NATIVE_WORD (ACPI_RS_SIZE (ACPI_RESOURCE_IRQ)));
++            (int) (ACPI_ROUND_UP_TO_NATIVE_WORD (ACPI_RS_SIZE (ACPI_RESOURCE_IRQ))));
+     }
+     if (CurrentResource->Data.Irq.Triggering != 0) /* Level-Triggered */
+@@ -981,7 +981,7 @@
+         AapiErrors++;
+         printf ("API Error: AcpiGetPossibleResources(%s) returned Length %d,"
+             " expected %d\n",
+-            Pathname, OutBuffer.Length, RT0000_DEV0_CRS_LEN);
++            Pathname, (int) OutBuffer.Length, RT0000_DEV0_CRS_LEN);
+         return (AE_ERROR);
+     }
+@@ -1923,7 +1923,7 @@
+         AapiErrors++;
+         printf ("API Error: AcpiGetIrqRoutingTable(%s) returned Length %d,"
+             " expected %d\n",
+-            Pathname, OutBuffer.Length, 0xA48);
++            Pathname, (int) OutBuffer.Length, 0xA48);
+         return (AE_ERROR);
+     }
+
+diff -urN acpica-unix2-20130626/tests/aapits/Makefile acpica-unix2-20130626-aapits/tests/aapits/Makefile
+--- acpica-unix2-20130626/tests/aapits/Makefile        2013-01-17 12:48:29.000000000 -0700
++++ acpica-unix2-20130626-aapits/tests/aapits/Makefile 2013-07-25 15:17:09.309236422 -0600
+@@ -199,7 +199,7 @@
+ CFLAGS+= -Wall -g -D_LINUX -DNDEBUG -D_CONSOLE -DACPI_APITS -DACPI_EXEC_APP -D_MULTI_THREADED -Wstrict-prototypes -I../../source/include
+
+-acpiexec : $(patsubst %.c,%.o, $(SRCS))
++$(PROG) : $(patsubst %.c,%.o, $(SRCS))
+       $(CC) $(LDFLAGS) $(patsubst %.c,%.o, $(SRCS)) -o $(PROG)
+ CLEANFILES= $(PROG)
diff --git a/aapits-makefile.patch b/aapits-makefile.patch
new file mode 100644 (file)
index 0000000..a1bcb65
--- /dev/null
@@ -0,0 +1,35 @@
+diff -Naur acpica/tests/aapits/Makefile acpica-patch/tests/aapits/Makefile
+--- acpica/tests/aapits/Makefile       2014-11-07 10:48:14.000000000 -0700
++++ acpica-patch/tests/aapits/Makefile 2014-11-17 18:32:45.816167012 -0700
+@@ -16,6 +16,7 @@
+       atosxfwrap.c \
+       osunixxf.c \
+       ../../source/common/ahids.c \
++      ../../source/common/ahuuids.c \
+       ../../source/common/cmfsize.c \
+       ../../source/common/getopt.c \
+       ../../source/components/hardware/hwtimer.c \
+@@ -45,6 +46,7 @@
+       ../../source/components/disassembler/dmresrcs.c \
+       ../../source/components/disassembler/dmutils.c \
+       ../../source/components/disassembler/dmwalk.c \
++      ../../source/components/disassembler/dmcstyle.c \
+       ../../source/components/events/evevent.c \
+       ../../source/components/events/evgpe.c \
+       ../../source/components/events/evgpeblk.c \
+@@ -174,6 +176,7 @@
+       ../../source/components/utilities/utexcep.c \
+       ../../source/components/utilities/utfileio.c \
+       ../../source/components/utilities/utglobal.c \
++      ../../source/components/utilities/uthex.c \
+       ../../source/components/utilities/utids.c \
+       ../../source/components/utilities/utinit.c \
+       ../../source/components/utilities/utlock.c \
+@@ -189,6 +192,7 @@
+       ../../source/components/utilities/utstate.c \
+       ../../source/components/utilities/utstring.c \
+       ../../source/components/utilities/uttrack.c \
++      ../../source/components/utilities/utuuid.c \
+       ../../source/components/utilities/utxface.c \
+       ../../source/components/utilities/utxferror.c \
+       ../../source/components/utilities/utxfinit.c \
index 053add535ac3f9f2776a6a967f532c93c66612da..55807f4269aa5233adb5b7792fcbed922ce60a6d 100644 (file)
@@ -7,6 +7,16 @@ License:       GPL v2
 Group:         Development/Tools
 Source0:       https://acpica.org/sites/acpica/files/%{name}-unix2-%{version}.tar.gz
 # Source0-md5: af9f1e67023fa85f9d6abf28b5345abd
+Source1:       https://acpica.org/sites/acpica/files/acpitests-unix-%{version}.tar.gz
+# Source1-md5: 64f6360eb986524254849930ff0a711f
+Patch0:                debian-big_endian.patch
+Patch1:                debian-unaligned.patch
+Patch2:                name-miscompare.patch
+Patch3:                aapits-linux.patch
+Patch4:                asllookup-miscompare.patch
+Patch5:                aapits-makefile.patch
+Patch6:                re-enable-big-endian.patch
+Patch7:                OPT_LDFLAGS.patch
 URL:           https://acpica.org/
 BuildRequires: bison
 BuildRequires: flex
@@ -25,6 +35,15 @@ tablic DSDT.
 
 %prep
 %setup -q -n %{name}-unix2-%{version}
+tar -x --strip-components=1 -f %{SOURCE1}
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p1
 
 %{__sed} -e "s/^LINKPROG = .*/& \$(RPMLDFLAGS)/" generate/unix/Makefile.config
 
diff --git a/asllookup-miscompare.patch b/asllookup-miscompare.patch
new file mode 100644 (file)
index 0000000..0067a22
--- /dev/null
@@ -0,0 +1,22 @@
+diff -urN acpica-unix2-20140214/source/compiler/asllookup.c acpica-unix2-20140214-patch/source/compiler/asllookup.c
+--- acpica-unix2-20140214/source/compiler/asllookup.c  2014-02-14 16:23:33.000000000 -0700
++++ acpica-unix2-20140214-patch/source/compiler/asllookup.c    2014-02-27 11:50:52.168659866 -0700
+@@ -119,6 +119,7 @@
+ {
+     ACPI_NAMESPACE_NODE     *Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, ObjHandle);
+     ACPI_NAMESPACE_NODE     *Next;
++    ACPI_NAME_UNION         tmp;
+     /* Referenced flag is set during the namespace xref */
+@@ -162,8 +163,9 @@
+              * Issue a remark even if it is a reserved name (starts
+              * with an underscore).
+              */
++            ACPI_MOVE_32_TO_32(&tmp.Ascii, Next->Name.Ascii);
+             sprintf (MsgBuffer, "Name is within method [%4.4s]",
+-                Next->Name.Ascii);
++                tmp.Ascii);
+             AslError (ASL_REMARK, ASL_MSG_NOT_REFERENCED,
+                 LkGetNameOp (Node->Op), MsgBuffer);
+             return (AE_OK);
diff --git a/debian-big_endian.patch b/debian-big_endian.patch
new file mode 100644 (file)
index 0000000..0900859
--- /dev/null
@@ -0,0 +1,2449 @@
+diff -up acpica-unix2-20140424/source/compiler/aslcodegen.c.debian-big_endian acpica-unix2-20140424/source/compiler/aslcodegen.c
+--- acpica-unix2-20140424/source/compiler/aslcodegen.c.debian-big_endian       2014-04-24 11:48:59.000000000 -0400
++++ acpica-unix2-20140424/source/compiler/aslcodegen.c 2014-06-06 20:43:34.711825238 -0400
+@@ -246,16 +246,12 @@ CgWriteAmlOpcode (
+     ACPI_PARSE_OBJECT       *Op)
+ {
+     UINT8                   PkgLenFirstByte;
+-    UINT32                  i;
+-    union {
+-        UINT16                  Opcode;
+-        UINT8                   OpcodeBytes[2];
+-    } Aml;
+-    union {
+-        UINT32                  Len;
+-        UINT8                   LenBytes[4];
+-    } PkgLen;
+-
++    UINT8                   Byte;
++    UINT16                  Word;
++    UINT32                  DWord;
++    UINT64                  QWord;
++    UINT16                  AmlOpcode;
++    UINT32                  PkgLen;
+     /* We expect some DEFAULT_ARGs, just ignore them */
+@@ -278,51 +265,52 @@ CgWriteAmlOpcode (
+         /* Special opcodes for within a field definition */
+-        Aml.Opcode = AML_FIELD_OFFSET_OP;
++        AmlOpcode = AML_FIELD_OFFSET_OP;
+         break;
+     case AML_INT_ACCESSFIELD_OP:
+-        Aml.Opcode = AML_FIELD_ACCESS_OP;
++        AmlOpcode = AML_FIELD_ACCESS_OP;
+         break;
+     case AML_INT_CONNECTION_OP:
+-        Aml.Opcode = AML_FIELD_CONNECTION_OP;
++        AmlOpcode = AML_FIELD_CONNECTION_OP;
+         break;
+     default:
+-        Aml.Opcode = Op->Asl.AmlOpcode;
++        AmlOpcode = Op->Asl.AmlOpcode;
+         break;
+     }
+-    switch (Aml.Opcode)
++    switch (AmlOpcode)
+     {
+     case AML_PACKAGE_LENGTH:
+         /* Value is the length to be encoded (Used in field definitions) */
+-        PkgLen.Len = (UINT32) Op->Asl.Value.Integer;
++        PkgLen = (UINT32) Op->Asl.Value.Integer;
+         break;
+     default:
+         /* Check for two-byte opcode */
+-        if (Aml.Opcode > 0x00FF)
++        if (AmlOpcode > 0x00FF)
+         {
+             /* Write the high byte first */
+-
+-            CgLocalWriteAmlData (Op, &Aml.OpcodeBytes[1], 1);
++          Byte = ACPI_HIBYTE(AmlOpcode);
++          CgLocalWriteAmlData (Op, &Byte, 1);
+         }
+-        CgLocalWriteAmlData (Op, &Aml.OpcodeBytes[0], 1);
++      Byte = ACPI_LOBYTE(AmlOpcode);
++        CgLocalWriteAmlData (Op, &Byte, 1);
+         /* Subtreelength doesn't include length of package length bytes */
+-        PkgLen.Len = Op->Asl.AmlSubtreeLength + Op->Asl.AmlPkgLenBytes;
++        PkgLen = Op->Asl.AmlSubtreeLength + Op->Asl.AmlPkgLenBytes;
+         break;
+     }
+@@ -333,8 +322,8 @@ CgWriteAmlOpcode (
+         if (Op->Asl.AmlPkgLenBytes == 1)
+         {
+             /* Simplest case -- no bytes to follow, just write the count */
+-
+-            CgLocalWriteAmlData (Op, &PkgLen.LenBytes[0], 1);
++            Byte = ACPI_LOBYTE(PkgLen);
++            CgLocalWriteAmlData (Op, &Byte, 1);
+         }
+         else if (Op->Asl.AmlPkgLenBytes != 0)
+         {
+@@ -344,7 +333,7 @@ CgWriteAmlOpcode (
+              */
+             PkgLenFirstByte = (UINT8)
+                 (((UINT32) (Op->Asl.AmlPkgLenBytes - 1) << 6) |
+-                (PkgLen.LenBytes[0] & 0x0F));
++                (PkgLen & 0x0F));
+             CgLocalWriteAmlData (Op, &PkgLenFirstByte, 1);
+@@ -352,37 +341,44 @@ CgWriteAmlOpcode (
+              * Shift the length over by the 4 bits we just stuffed
+              * in the first byte
+              */
+-            PkgLen.Len >>= 4;
++            PkgLen >>= 4;
+             /* Now we can write the remaining bytes - either 1, 2, or 3 bytes */
+-
+-            for (i = 0; i < (UINT32) (Op->Asl.AmlPkgLenBytes - 1); i++)
++            Byte = ACPI_LOBYTE(PkgLen);
++            CgLocalWriteAmlData (Op, &Byte, 1);
++            if (Op->Asl.AmlPkgLenBytes >= 3)
++            {
++                Byte = ACPI_HIBYTE(PkgLen);
++                CgLocalWriteAmlData (Op, &Byte, 1);
++            }
++            if (Op->Asl.AmlPkgLenBytes >= 4)
+             {
+-                CgLocalWriteAmlData (Op, &PkgLen.LenBytes[i], 1);
++                Byte = ACPI_LOBYTE(ACPI_HIWORD(PkgLen));
++                CgLocalWriteAmlData (Op, &Byte, 1);
+             }
+         }
+     }
+-    switch (Aml.Opcode)
++    switch (AmlOpcode)
+     {
+     case AML_BYTE_OP:
+-
+-        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 1);
++        Byte = (UINT8) Op->Asl.Value.Integer;
++        CgLocalWriteAmlData (Op, &Byte, 1);
+         break;
+     case AML_WORD_OP:
+-
+-        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 2);
++        ACPI_MOVE_64_TO_16(&Word, &Op->Asl.Value.Integer);
++        CgLocalWriteAmlData (Op, &Word, 2);
+        break;
+     case AML_DWORD_OP:
+-
+-        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 4);
++        ACPI_MOVE_64_TO_32(&DWord, &Op->Asl.Value.Integer);
++        CgLocalWriteAmlData (Op, &DWord, 4);
+         break;
+     case AML_QWORD_OP:
+-
+-        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 8);
++        ACPI_MOVE_64_TO_64(&QWord, &Op->Asl.Value.Integer);
++        CgLocalWriteAmlData (Op, &QWord, 8);
+         break;
+     case AML_STRING_OP:
+@@ -416,6 +412,7 @@ CgWriteTableHeader (
+     ACPI_PARSE_OBJECT       *Op)
+ {
+     ACPI_PARSE_OBJECT       *Child;
++    UINT32 DWord;
+     /* AML filename */
+@@ -452,7 +449,7 @@ CgWriteTableHeader (
+     /* OEM Revision */
+     Child = Child->Asl.Next;
+-    TableHeader.OemRevision = (UINT32) Child->Asl.Value.Integer;
++    ACPI_MOVE_64_TO_32(&TableHeader.OemRevision, &Child->Asl.Value.Integer);
+     /* Compiler ID */
+@@ -460,11 +457,12 @@ CgWriteTableHeader (
+     /* Compiler version */
+-    TableHeader.AslCompilerRevision = ASL_REVISION;
++    DWord = ASL_REVISION;
++    ACPI_MOVE_32_TO_32(&TableHeader.AslCompilerRevision, &DWord);
+     /* Table length. Checksum zero for now, will rewrite later */
+-    TableHeader.Length   = Gbl_TableLength;
++    ACPI_MOVE_32_TO_32(&TableHeader.Length, &Gbl_TableLength);
+     TableHeader.Checksum = 0;
+     CgLocalWriteAmlData (Op, &TableHeader, sizeof (ACPI_TABLE_HEADER));
+@@ -528,7 +526,10 @@ CgWriteNode (
+     ACPI_PARSE_OBJECT       *Op)
+ {
+     ASL_RESOURCE_NODE       *Rnode;
+-
++    UINT8                   Byte;
++    UINT16                  Word;
++    UINT32                  DWord;
++    UINT64                  QWord;
+     /* Always check for DEFAULT_ARG and other "Noop" nodes */
+     /* TBD: this may not be the best place for this check */
+@@ -546,13 +547,24 @@ CgWriteNode (
+     switch (Op->Asl.AmlOpcode)
+     {
+     case AML_RAW_DATA_BYTE:
++        Byte = (UINT8) Op->Asl.Value.Integer;
++        CgLocalWriteAmlData (Op, &Byte, 1);
++        return;
++
+     case AML_RAW_DATA_WORD:
+-    case AML_RAW_DATA_DWORD:
+-    case AML_RAW_DATA_QWORD:
++        ACPI_MOVE_64_TO_16(&Word, &Op->Asl.Value.Integer);
++        CgLocalWriteAmlData (Op, &Word, 2);
++        return;
+-        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, Op->Asl.AmlLength);
++    case AML_RAW_DATA_DWORD:
++        ACPI_MOVE_64_TO_32(&DWord, &Op->Asl.Value.Integer);
++        CgLocalWriteAmlData (Op, &DWord, 4);
+         return;
++    case AML_RAW_DATA_QWORD:
++        ACPI_MOVE_64_TO_64(&QWord, &Op->Asl.Value.Integer);
++        CgLocalWriteAmlData (Op, &QWord, 8);
++        return;
+     case AML_RAW_DATA_BUFFER:
+diff -up acpica-unix2-20140424/source/compiler/aslopcodes.c.debian-big_endian acpica-unix2-20140424/source/compiler/aslopcodes.c
+--- acpica-unix2-20140424/source/compiler/aslopcodes.c.debian-big_endian       2014-04-24 11:48:59.000000000 -0400
++++ acpica-unix2-20140424/source/compiler/aslopcodes.c 2014-06-06 20:43:34.711825238 -0400
+@@ -531,6 +479,7 @@ OpcDoUnicode (
+     UINT32                  i;
+     UINT8                   *AsciiString;
+     UINT16                  *UnicodeString;
++    UINT16                  UChar;
+     ACPI_PARSE_OBJECT       *BufferLengthOp;
+@@ -557,7 +505,8 @@ OpcDoUnicode (
+     for (i = 0; i < Count; i++)
+     {
+-        UnicodeString[i] = (UINT16) AsciiString[i];
++        UChar = (UINT16) AsciiString[i];
++        ACPI_MOVE_16_TO_16(&UnicodeString[i], &UChar);
+     }
+     /*
+diff -up acpica-unix2-20140424/source/compiler/aslrestype1.c.debian-big_endian acpica-unix2-20140424/source/compiler/aslrestype1.c
+--- acpica-unix2-20140424/source/compiler/aslrestype1.c.debian-big_endian      2014-04-24 11:49:00.000000000 -0400
++++ acpica-unix2-20140424/source/compiler/aslrestype1.c        2014-06-06 20:43:34.711825238 -0400
+@@ -143,6 +148,11 @@ RsDoMemory24Descriptor (
+     ACPI_PARSE_OBJECT       *LengthOp = NULL;
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT32                  CurrentByteOffset;
++    UINT16                  Minimum = 0;
++    UINT16                  Maximum = 0;
++    UINT16                  AddressLength = 0;
++    UINT16                  Alignment = 0;
++    UINT16                  ResourceLength;
+     UINT32                  i;
+@@ -152,7 +153,8 @@ RsDoMemory24Descriptor (
+     Descriptor = Rnode->Buffer;
+     Descriptor->Memory24.DescriptorType  = ACPI_RESOURCE_NAME_MEMORY24;
+-    Descriptor->Memory24.ResourceLength = 9;
++    ResourceLength = 9;
++    ACPI_MOVE_16_TO_16(&Descriptor->Memory24.ResourceLength, &ResourceLength);
+     /* Process all child initialization nodes */
+@@ -169,7 +169,7 @@ RsDoMemory24Descriptor (
+         case 1: /* Min Address */
+-            Descriptor->Memory24.Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
++            Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Minimum));
+             MinOp = InitializerOp;
+@@ -177,7 +177,7 @@ RsDoMemory24Descriptor (
+         case 2: /* Max Address */
+-            Descriptor->Memory24.Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
++            Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Maximum));
+             MaxOp = InitializerOp;
+@@ -185,14 +185,14 @@ RsDoMemory24Descriptor (
+         case 3: /* Alignment */
+-            Descriptor->Memory24.Alignment = (UINT16) InitializerOp->Asl.Value.Integer;
++            Alignment = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_ALIGNMENT,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Alignment));
+             break;
+         case 4: /* Length */
+-            Descriptor->Memory24.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
++            AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.AddressLength));
+             LengthOp = InitializerOp;
+@@ -215,12 +220,17 @@ RsDoMemory24Descriptor (
+     /* Validate the Min/Max/Len/Align values (Alignment==0 means 64K) */
+     RsSmallAddressCheck (ACPI_RESOURCE_NAME_MEMORY24,
+-        Descriptor->Memory24.Minimum,
+-        Descriptor->Memory24.Maximum,
+-        Descriptor->Memory24.AddressLength,
+-        Descriptor->Memory24.Alignment,
++        Minimum,
++        Maximum,
++        AddressLength,
++        Alignment,
+         MinOp, MaxOp, LengthOp, NULL, Info->DescriptorTypeOp);
++    ACPI_MOVE_16_TO_16(&Descriptor->Memory24.Minimum, &Minimum);
++    ACPI_MOVE_16_TO_16(&Descriptor->Memory24.Maximum, &Maximum);
++    ACPI_MOVE_16_TO_16(&Descriptor->Memory24.AddressLength, &AddressLength);
++    ACPI_MOVE_16_TO_16(&Descriptor->Memory24.Alignment, &Alignment);
++
+     return (Rnode);
+ }
+@@ -249,6 +254,11 @@ RsDoMemory32Descriptor (
+     ACPI_PARSE_OBJECT       *AlignOp = NULL;
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT32                  CurrentByteOffset;
++    UINT32                  Minimum = 0;
++    UINT32                  Maximum = 0;
++    UINT32                  AddressLength = 0;
++    UINT32                  Alignment = 0;
++    UINT16                  ResourceLength;
+     UINT32                  i;
+@@ -258,7 +259,8 @@ RsDoMemory32Descriptor (
+     Descriptor = Rnode->Buffer;
+     Descriptor->Memory32.DescriptorType  = ACPI_RESOURCE_NAME_MEMORY32;
+-    Descriptor->Memory32.ResourceLength = 17;
++    ResourceLength = 17;
++    ACPI_MOVE_16_TO_16(&Descriptor->Memory32.ResourceLength, &ResourceLength);
+     /* Process all child initialization nodes */
+@@ -275,7 +275,7 @@ RsDoMemory32Descriptor (
+         case 1:  /* Min Address */
+-            Descriptor->Memory32.Minimum = (UINT32) InitializerOp->Asl.Value.Integer;
++            Minimum = (UINT32) InitializerOp->Asl.Value.Integer;
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Minimum));
+             MinOp = InitializerOp;
+@@ -283,7 +283,7 @@ RsDoMemory32Descriptor (
+         case 2: /* Max Address */
+-            Descriptor->Memory32.Maximum = (UINT32) InitializerOp->Asl.Value.Integer;
++            Maximum = (UINT32) InitializerOp->Asl.Value.Integer;
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Maximum));
+             MaxOp = InitializerOp;
+@@ -291,7 +291,7 @@ RsDoMemory32Descriptor (
+         case 3: /* Alignment */
+-            Descriptor->Memory32.Alignment = (UINT32) InitializerOp->Asl.Value.Integer;
++            Alignment = (UINT32) InitializerOp->Asl.Value.Integer;
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_ALIGNMENT,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Alignment));
+             AlignOp = InitializerOp;
+@@ -299,7 +299,7 @@ RsDoMemory32Descriptor (
+         case 4: /* Length */
+-            Descriptor->Memory32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
++            AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.AddressLength));
+             LengthOp = InitializerOp;
+@@ -322,12 +327,17 @@ RsDoMemory32Descriptor (
+     /* Validate the Min/Max/Len/Align values */
+     RsSmallAddressCheck (ACPI_RESOURCE_NAME_MEMORY32,
+-        Descriptor->Memory32.Minimum,
+-        Descriptor->Memory32.Maximum,
+-        Descriptor->Memory32.AddressLength,
+-        Descriptor->Memory32.Alignment,
++        Minimum,
++        Maximum,
++        AddressLength,
++        Alignment,
+         MinOp, MaxOp, LengthOp, AlignOp, Info->DescriptorTypeOp);
++    ACPI_MOVE_32_TO_32(&Descriptor->Memory32.Minimum, &Minimum);
++    ACPI_MOVE_32_TO_32(&Descriptor->Memory32.Maximum, &Maximum);
++    ACPI_MOVE_32_TO_32(&Descriptor->Memory32.AddressLength, &AddressLength);
++    ACPI_MOVE_32_TO_32(&Descriptor->Memory32.Alignment, &Alignment);
++
+     return (Rnode);
+ }
+@@ -352,6 +353,7 @@ RsDoMemory32FixedDescriptor (
+     ACPI_PARSE_OBJECT       *InitializerOp;
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT32                  CurrentByteOffset;
++    UINT16                  ResourceLength;
+     UINT32                  i;
+@@ -361,7 +362,8 @@ RsDoMemory32FixedDescriptor (
+     Descriptor = Rnode->Buffer;
+     Descriptor->FixedMemory32.DescriptorType  = ACPI_RESOURCE_NAME_FIXED_MEMORY32;
+-    Descriptor->FixedMemory32.ResourceLength = 9;
++    ResourceLength = 9;
++    ACPI_MOVE_16_TO_16(&Descriptor->FixedMemory32.ResourceLength, &ResourceLength);
+     /* Process all child initialization nodes */
+@@ -378,14 +380,16 @@ RsDoMemory32FixedDescriptor (
+         case 1: /* Address */
+-            Descriptor->FixedMemory32.Address = (UINT32) InitializerOp->Asl.Value.Integer;
++            ACPI_MOVE_64_TO_32(&Descriptor->FixedMemory32.Address,
++                &InitializerOp->Asl.Value.Integer);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_BASEADDRESS,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.Address));
+             break;
+         case 2: /* Length */
+-            Descriptor->FixedMemory32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
++            ACPI_MOVE_64_TO_32(&Descriptor->FixedMemory32.AddressLength,
++                &InitializerOp->Asl.Value.Integer);
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.AddressLength));
+             break;
+diff -up acpica-unix2-20140424/source/compiler/aslrestype1i.c.debian-big_endian acpica-unix2-20140424/source/compiler/aslrestype1i.c
+--- acpica-unix2-20140424/source/compiler/aslrestype1i.c.debian-big_endian     2014-04-24 11:49:00.000000000 -0400
++++ acpica-unix2-20140424/source/compiler/aslrestype1i.c       2014-06-06 20:43:34.711825238 -0400
+@@ -198,6 +200,8 @@ RsDoFixedDmaDescriptor (
+     ACPI_PARSE_OBJECT       *InitializerOp;
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT32                  CurrentByteOffset;
++    UINT16                  RequestLines = 0;
++    UINT16                  Channels = 0;
+     UINT32                  i;
+@@ -217,14 +217,14 @@ RsDoFixedDmaDescriptor (
+         {
+         case 0: /* DMA Request Lines [WORD] (_DMA) */
+-            Descriptor->FixedDma.RequestLines = (UINT16) InitializerOp->Asl.Value.Integer;
++            RequestLines = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_DMA,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedDma.RequestLines));
+             break;
+         case 1: /* DMA Channel [WORD] (_TYP) */
+-            Descriptor->FixedDma.Channels = (UINT16) InitializerOp->Asl.Value.Integer;
++            Channels = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_DMATYPE,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedDma.Channels));
+             break;
+@@ -249,6 +252,9 @@ RsDoFixedDmaDescriptor (
+         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+     }
++    ACPI_MOVE_16_TO_16(&Descriptor->FixedDma.RequestLines, &RequestLines);
++    ACPI_MOVE_16_TO_16(&Descriptor->FixedDma.Channels, &Channels);
++
+     return (Rnode);
+ }
+@@ -274,6 +275,7 @@ RsDoFixedIoDescriptor (
+     ACPI_PARSE_OBJECT       *AddressOp = NULL;
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT32                  CurrentByteOffset;
++    UINT16                  Address = 0;
+     UINT32                  i;
+@@ -293,8 +292,7 @@ RsDoFixedIoDescriptor (
+         {
+         case 0: /* Base Address */
+-            Descriptor->FixedIo.Address =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            Address = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_BASEADDRESS,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedIo.Address));
+             AddressOp = InitializerOp;
+@@ -324,11 +326,13 @@ RsDoFixedIoDescriptor (
+     /* Error checks */
+-    if (Descriptor->FixedIo.Address > 0x03FF)
++    if (Address > 0x03FF)
+     {
+         AslError (ASL_WARNING, ASL_MSG_ISA_ADDRESS, AddressOp, NULL);
+     }
++    ACPI_MOVE_16_TO_16(&Descriptor->FixedIo.Address, &Address);
++
+     return (Rnode);
+ }
+@@ -357,6 +359,8 @@ RsDoIoDescriptor (
+     ACPI_PARSE_OBJECT       *AlignOp = NULL;
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT32                  CurrentByteOffset;
++    UINT16                  Minimum = 0;
++    UINT16                  Maximum = 0;
+     UINT32                  i;
+@@ -383,8 +382,7 @@ RsDoIoDescriptor (
+         case 1:  /* Min Address */
+-            Descriptor->Io.Minimum =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Io.Minimum));
+             MinOp = InitializerOp;
+@@ -392,8 +391,7 @@ RsDoIoDescriptor (
+         case 2: /* Max Address */
+-            Descriptor->Io.Maximum =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Io.Maximum));
+             MaxOp = InitializerOp;
+@@ -434,12 +437,15 @@ RsDoIoDescriptor (
+     /* Validate the Min/Max/Len/Align values */
+     RsSmallAddressCheck (ACPI_RESOURCE_NAME_IO,
+-        Descriptor->Io.Minimum,
+-        Descriptor->Io.Maximum,
++        Minimum,
++        Maximum,
+         Descriptor->Io.AddressLength,
+         Descriptor->Io.Alignment,
+         MinOp, MaxOp, LengthOp, AlignOp, Info->DescriptorTypeOp);
++    ACPI_MOVE_16_TO_16(&Descriptor->Io.Minimum, &Minimum);
++    ACPI_MOVE_16_TO_16(&Descriptor->Io.Maximum, &Maximum);
++
+     return (Rnode);
+ }
+@@ -559,9 +559,9 @@ RsDoIrqDescriptor (
+         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+     }
+-    /* Now we can set the channel mask */
++    /* Now we can set the interrupt mask */
+-    Descriptor->Irq.IrqMask = IrqMask;
++    ACPI_MOVE_16_TO_16(&Descriptor->Irq.IrqMask, &IrqMask);
+     return (Rnode);
+ }
+@@ -660,6 +660,6 @@ RsDoIrqNoFlagsDescriptor (
+     /* Now we can set the interrupt mask */
+-    Descriptor->Irq.IrqMask = IrqMask;
++    ACPI_MOVE_16_TO_16(&Descriptor->Irq.IrqMask, &IrqMask);
+     return (Rnode);
+ }
+diff -up acpica-unix2-20140424/source/compiler/aslrestype2.c.debian-big_endian acpica-unix2-20140424/source/compiler/aslrestype2.c
+--- acpica-unix2-20140424/source/compiler/aslrestype2.c.debian-big_endian      2014-04-24 11:49:00.000000000 -0400
++++ acpica-unix2-20140424/source/compiler/aslrestype2.c        2014-06-06 20:43:34.711825238 -0400
+@@ -76,6 +77,7 @@ RsDoGeneralRegisterDescriptor (
+     ACPI_PARSE_OBJECT       *InitializerOp;
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT32                  CurrentByteOffset;
++    UINT16                  ResourceLength;
+     UINT32                  i;
+@@ -85,7 +87,9 @@ RsDoGeneralRegisterDescriptor (
+     Descriptor = Rnode->Buffer;
+     Descriptor->GenericReg.DescriptorType = ACPI_RESOURCE_NAME_GENERIC_REGISTER;
+-    Descriptor->GenericReg.ResourceLength = 12;
++    ResourceLength = 12;
++    ACPI_MOVE_16_TO_16(&Descriptor->GenericReg.ResourceLength,
++                  &ResourceLength);
+     /* Process all child initialization nodes */
+@@ -116,7 +117,8 @@ RsDoGeneralRegisterDescriptor (
+         case 3: /* Register Address */
+-            Descriptor->GenericReg.Address = InitializerOp->Asl.Value.Integer;
++          ACPI_MOVE_64_TO_64(&Descriptor->GenericReg.Address,
++                          &InitializerOp->Asl.Value.Integer);
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_ADDRESS,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.Address));
+             break;
+@@ -171,6 +172,7 @@ RsDoInterruptDescriptor (
+     AML_RESOURCE            *Rover = NULL;
+     ACPI_PARSE_OBJECT       *InitializerOp;
+     ASL_RESOURCE_NODE       *Rnode;
++    UINT16                  ResourceLength = 0;
+     UINT16                  StringLength = 0;
+     UINT32                  OptionIndex = 0;
+     UINT32                  CurrentByteOffset;
+@@ -219,7 +219,7 @@ RsDoInterruptDescriptor (
+      * Initial descriptor length -- may be enlarged if there are
+      * optional fields present
+      */
+-    Descriptor->ExtendedIrq.ResourceLength  = 2;  /* Flags and table length byte */
++    ResourceLength  = 2;  /* Flags and table length byte */
+     Descriptor->ExtendedIrq.InterruptCount  = 0;
+     Rover = ACPI_CAST_PTR (AML_RESOURCE,
+@@ -327,10 +328,11 @@ RsDoInterruptDescriptor (
+             /* Save the integer and move pointer to the next one */
+-            Rover->DwordItem = (UINT32) InitializerOp->Asl.Value.Integer;
++            ACPI_MOVE_64_TO_32(&Rover->DwordItem,
++                &InitializerOp->Asl.Value.Integer);
+             Rover = ACPI_ADD_PTR (AML_RESOURCE, &(Rover->DwordItem), 4);
+             Descriptor->ExtendedIrq.InterruptCount++;
+-            Descriptor->ExtendedIrq.ResourceLength += 4;
++            ResourceLength += 4;
+             /* Case 7: First interrupt number in list */
+@@ -366,7 +366,7 @@ RsDoInterruptDescriptor (
+     {
+         Rover->ByteItem = ResSourceIndex;
+         Rover = ACPI_ADD_PTR (AML_RESOURCE, &(Rover->ByteItem), 1);
+-        Descriptor->ExtendedIrq.ResourceLength += 1;
++        ResourceLength += 1;
+     }
+     /* Add optional ResSource string if present */
+@@ -378,13 +379,14 @@ RsDoInterruptDescriptor (
+         Rover = ACPI_ADD_PTR (
+                     AML_RESOURCE, &(Rover->ByteItem), StringLength);
+-        Descriptor->ExtendedIrq.ResourceLength = (UINT16)
+-            (Descriptor->ExtendedIrq.ResourceLength + StringLength);
++        ResourceLength = (UINT16) (ResourceLength + StringLength);
+     }
+     Rnode->BufferLength = (ASL_RESDESC_OFFSET (ExtendedIrq.Interrupts[0]) -
+                            ASL_RESDESC_OFFSET (ExtendedIrq.DescriptorType))
+                            + OptionIndex + StringLength;
++    ACPI_MOVE_16_TO_16(&Descriptor->ExtendedIrq.ResourceLength,
++                  &ResourceLength);
+     return (Rnode);
+ }
+@@ -432,7 +432,7 @@ RsDoVendorLargeDescriptor (
+     Descriptor = Rnode->Buffer;
+     Descriptor->VendorLarge.DescriptorType  = ACPI_RESOURCE_NAME_VENDOR_LARGE;
+-    Descriptor->VendorLarge.ResourceLength = (UINT16) i;
++    ACPI_MOVE_32_TO_16(&Descriptor->VendorLarge.ResourceLength, &i);
+     /* Point to end-of-descriptor for vendor data */
+diff -up acpica-unix2-20140424/source/compiler/aslrestype2d.c.debian-big_endian acpica-unix2-20140424/source/compiler/aslrestype2d.c
+--- acpica-unix2-20140424/source/compiler/aslrestype2d.c.debian-big_endian     2014-04-24 11:49:00.000000000 -0400
++++ acpica-unix2-20140424/source/compiler/aslrestype2d.c       2014-06-06 20:43:34.721825238 -0400
+@@ -79,7 +85,13 @@ RsDoDwordIoDescriptor (
+     ACPI_PARSE_OBJECT       *GranOp = NULL;
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT16                  StringLength = 0;
++    UINT16                  ResourceLength = 0;
+     UINT32                  OptionIndex = 0;
++    UINT32                  Minimum = 0;
++    UINT32                  Maximum = 0;
++    UINT32                  AddressLength = 0;
++    UINT32                  Granularity = 0;
++    UINT32                  TranslationOffset = 0;
+     UINT8                   *OptionalFields;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
+@@ -102,8 +101,7 @@ RsDoDwordIoDescriptor (
+      * optional fields present
+      */
+     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);
+-    Descriptor->Address32.ResourceLength = (UINT16)
+-        (sizeof (AML_RESOURCE_ADDRESS32) -
++    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS32) -
+          sizeof (AML_RESOURCE_LARGE_HEADER));
+     /* Process all child initialization nodes */
+@@ -147,8 +146,7 @@ RsDoDwordIoDescriptor (
+         case 5: /* Address Granularity */
+-            Descriptor->Address32.Granularity =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Granularity = (UINT32) InitializerOp->Asl.Value.Integer;
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
+             GranOp = InitializerOp;
+@@ -156,8 +155,7 @@ RsDoDwordIoDescriptor (
+         case 6: /* Address Min */
+-            Descriptor->Address32.Minimum =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Minimum = (UINT32) InitializerOp->Asl.Value.Integer;
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
+             MinOp = InitializerOp;
+@@ -165,8 +164,7 @@ RsDoDwordIoDescriptor (
+         case 7: /* Address Max */
+-            Descriptor->Address32.Maximum =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Maximum = (UINT32) InitializerOp->Asl.Value.Integer;
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
+             MaxOp = InitializerOp;
+@@ -174,16 +172,14 @@ RsDoDwordIoDescriptor (
+         case 8: /* Translation Offset */
+-            Descriptor->Address32.TranslationOffset =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            TranslationOffset = (UINT32) InitializerOp->Asl.Value.Integer;
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
+             break;
+         case 9: /* Address Length */
+-            Descriptor->Address32.AddressLength =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
+             LengthOp = InitializerOp;
+@@ -197,7 +197,7 @@ RsDoDwordIoDescriptor (
+                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
+                 OptionIndex++;
+-                Descriptor->Address32.ResourceLength++;
++                ResourceLength++;
+                 ResSourceIndex = TRUE;
+             }
+             break;
+@@ -211,8 +210,7 @@ RsDoDwordIoDescriptor (
+                 {
+                     /* Found a valid ResourceSource */
+-                    Descriptor->Address32.ResourceLength = (UINT16)
+-                        (Descriptor->Address32.ResourceLength + StringLength);
++                    ResourceLength = (UINT16) (ResourceLength + StringLength);
+                     strcpy ((char *)
+                         &OptionalFields[OptionIndex],
+@@ -272,13 +279,20 @@ RsDoDwordIoDescriptor (
+     /* Validate the Min/Max/Len/Gran values */
+     RsLargeAddressCheck (
+-        (UINT64) Descriptor->Address32.Minimum,
+-        (UINT64) Descriptor->Address32.Maximum,
+-        (UINT64) Descriptor->Address32.AddressLength,
+-        (UINT64) Descriptor->Address32.Granularity,
++        Minimum,
++        Maximum,
++        AddressLength,
++        Granularity,
+         Descriptor->Address32.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address32.ResourceLength, &ResourceLength);
++    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Minimum, &Minimum);
++    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Maximum, &Maximum);
++    ACPI_MOVE_32_TO_32(&Descriptor->Address32.AddressLength, &AddressLength);
++    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Granularity, &Granularity);
++    ACPI_MOVE_32_TO_32(&Descriptor->Address32.TranslationOffset, &TranslationOffset);
++
+     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +
+         OptionIndex + StringLength;
+     return (Rnode);
+@@ -310,7 +316,13 @@ RsDoDwordMemoryDescriptor (
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT8                   *OptionalFields;
+     UINT16                  StringLength = 0;
++    UINT16                  ResourceLength = 0;
+     UINT32                  OptionIndex = 0;
++    UINT32                  Minimum = 0;
++    UINT32                  Maximum = 0;
++    UINT32                  AddressLength = 0;
++    UINT32                  Granularity = 0;
++    UINT32                  TranslationOffset = 0;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
+     BOOLEAN                 ResSourceIndex = FALSE;
+@@ -332,11 +330,9 @@ RsDoDwordMemoryDescriptor (
+      * optional fields present
+      */
+     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);
+-    Descriptor->Address32.ResourceLength = (UINT16)
+-        (sizeof (AML_RESOURCE_ADDRESS32) -
++    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS32) -
+          sizeof (AML_RESOURCE_LARGE_HEADER));
+-
+     /* Process all child initialization nodes */
+     for (i = 0; InitializerOp; i++)
+@@ -385,8 +384,7 @@ RsDoDwordMemoryDescriptor (
+         case 6: /* Address Granularity */
+-            Descriptor->Address32.Granularity =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Granularity = (UINT32) InitializerOp->Asl.Value.Integer;
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
+             GranOp = InitializerOp;
+@@ -394,8 +3926,7 @@ RsDoDwordMemoryDescriptor (
+         case 7: /* Min Address */
+-            Descriptor->Address32.Minimum =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Minimum = (UINT32) InitializerOp->Asl.Value.Integer;
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
+             MinOp = InitializerOp;
+@@ -403,8 +402,7 @@ RsDoDwordMemoryDescriptor (
+         case 8: /* Max Address */
+-            Descriptor->Address32.Maximum =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Maximum = (UINT32) InitializerOp->Asl.Value.Integer;
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
+             MaxOp = InitializerOp;
+@@ -412,16 +410,14 @@ RsDoDwordMemoryDescriptor (
+         case 9: /* Translation Offset */
+-            Descriptor->Address32.TranslationOffset =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            TranslationOffset = (UINT32) InitializerOp->Asl.Value.Integer;
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
+             break;
+         case 10: /* Address Length */
+-            Descriptor->Address32.AddressLength =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
+             LengthOp = InitializerOp;
+@@ -433,7 +433,7 @@ RsDoDwordMemoryDescriptor (
+             {
+                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
+                 OptionIndex++;
+-                Descriptor->Address32.ResourceLength++;
++                ResourceLength++;
+                 ResSourceIndex = TRUE;
+             }
+             break;
+@@ -445,8 +445,8 @@ RsDoDwordMemoryDescriptor (
+             {
+                 if (StringLength)
+                 {
+-                    Descriptor->Address32.ResourceLength = (UINT16)
+-                        (Descriptor->Address32.ResourceLength + StringLength);
++
++                    ResourceLength = (UINT16) (ResourceLength + StringLength);
+                     strcpy ((char *)
+                         &OptionalFields[OptionIndex],
+@@ -507,13 +514,20 @@ RsDoDwordMemoryDescriptor (
+     /* Validate the Min/Max/Len/Gran values */
+     RsLargeAddressCheck (
+-        (UINT64) Descriptor->Address32.Minimum,
+-        (UINT64) Descriptor->Address32.Maximum,
+-        (UINT64) Descriptor->Address32.AddressLength,
+-        (UINT64) Descriptor->Address32.Granularity,
++        Minimum,
++        Maximum,
++        AddressLength,
++        Granularity,
+         Descriptor->Address32.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address32.ResourceLength, &ResourceLength);
++    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Minimum, &Minimum);
++    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Maximum, &Maximum);
++    ACPI_MOVE_32_TO_32(&Descriptor->Address32.AddressLength, &AddressLength);
++    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Granularity, &Granularity);
++    ACPI_MOVE_32_TO_32(&Descriptor->Address32.TranslationOffset, &TranslationOffset);
++
+     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +
+         OptionIndex + StringLength;
+     return (Rnode);
+@@ -545,7 +551,13 @@ RsDoDwordSpaceDescriptor (
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT8                   *OptionalFields;
+     UINT16                  StringLength = 0;
++    UINT16                  ResourceLength = 0;
+     UINT32                  OptionIndex = 0;
++    UINT32                  Minimum = 0;
++    UINT32                  Maximum = 0;
++    UINT32                  AddressLength = 0;
++    UINT32                  Granularity = 0;
++    UINT32                  TranslationOffset = 0;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
+     BOOLEAN                 ResSourceIndex = FALSE;
+@@ -566,8 +565,7 @@ RsDoDwordSpaceDescriptor (
+      * optional fields present
+      */
+     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);
+-    Descriptor->Address32.ResourceLength = (UINT16)
+-        (sizeof (AML_RESOURCE_ADDRESS32) -
++    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS32) -
+          sizeof (AML_RESOURCE_LARGE_HEADER));
+     /* Process all child initialization nodes */
+@@ -616,8 +615,7 @@ RsDoDwordSpaceDescriptor (
+         case 6: /* Address Granularity */
+-            Descriptor->Address32.Granularity =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Granularity = (UINT32) InitializerOp->Asl.Value.Integer;
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
+             GranOp = InitializerOp;
+@@ -625,8 +624,7 @@ RsDoDwordSpaceDescriptor (
+         case 7: /* Min Address */
+-            Descriptor->Address32.Minimum =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Minimum = (UINT32) InitializerOp->Asl.Value.Integer;
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
+             MinOp = InitializerOp;
+@@ -634,8 +633,7 @@ RsDoDwordSpaceDescriptor (
+         case 8: /* Max Address */
+-            Descriptor->Address32.Maximum =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            Maximum = (UINT32) InitializerOp->Asl.Value.Integer;
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
+             MaxOp = InitializerOp;
+@@ -643,16 +641,14 @@ RsDoDwordSpaceDescriptor (
+         case 9: /* Translation Offset */
+-            Descriptor->Address32.TranslationOffset =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            TranslationOffset = (UINT32) InitializerOp->Asl.Value.Integer;
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
+             break;
+         case 10: /* Address Length */
+-            Descriptor->Address32.AddressLength =
+-                (UINT32) InitializerOp->Asl.Value.Integer;
++            AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
+             LengthOp = InitializerOp;
+@@ -664,7 +664,7 @@ RsDoDwordSpaceDescriptor (
+             {
+                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
+                 OptionIndex++;
+-                Descriptor->Address32.ResourceLength++;
++                ResourceLength++;
+                 ResSourceIndex = TRUE;
+             }
+             break;
+@@ -676,8 +675,7 @@ RsDoDwordSpaceDescriptor (
+             {
+                 if (StringLength)
+                 {
+-                    Descriptor->Address32.ResourceLength = (UINT16)
+-                        (Descriptor->Address32.ResourceLength + StringLength);
++                    ResourceLength = (UINT16) (ResourceLength + StringLength);
+                     strcpy ((char *)
+                         &OptionalFields[OptionIndex],
+@@ -724,13 +731,20 @@ RsDoDwordSpaceDescriptor (
+     /* Validate the Min/Max/Len/Gran values */
+     RsLargeAddressCheck (
+-        (UINT64) Descriptor->Address32.Minimum,
+-        (UINT64) Descriptor->Address32.Maximum,
+-        (UINT64) Descriptor->Address32.AddressLength,
+-        (UINT64) Descriptor->Address32.Granularity,
++        Minimum,
++        Maximum,
++        AddressLength,
++        Granularity,
+         Descriptor->Address32.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address32.ResourceLength, &ResourceLength);
++    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Minimum, &Minimum);
++    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Maximum, &Maximum);
++    ACPI_MOVE_32_TO_32(&Descriptor->Address32.AddressLength, &AddressLength);
++    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Granularity, &Granularity);
++    ACPI_MOVE_32_TO_32(&Descriptor->Address32.TranslationOffset, &TranslationOffset);
++
+     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +
+         OptionIndex + StringLength;
+     return (Rnode);
+diff -up acpica-unix2-20140424/source/compiler/aslrestype2e.c.debian-big_endian acpica-unix2-20140424/source/compiler/aslrestype2e.c
+--- acpica-unix2-20140424/source/compiler/aslrestype2e.c.debian-big_endian     2014-04-24 11:49:00.000000000 -0400
++++ acpica-unix2-20140424/source/compiler/aslrestype2e.c       2014-06-06 20:43:34.721825238 -0400
+@@ -78,6 +85,13 @@ RsDoExtendedIoDescriptor (
+     ACPI_PARSE_OBJECT       *GranOp = NULL;
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT16                  StringLength = 0;
++    UINT16                  ResourceLength = 0;
++    UINT64                  Minimum = 0;
++    UINT64                  Maximum = 0;
++    UINT64                  AddressLength = 0;
++    UINT64                  Granularity = 0;
++    UINT64                  TranslationOffset = 0;
++    UINT64                  TypeSpecific = 0;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
+@@ -94,9 +95,10 @@ RsDoExtendedIoDescriptor (
+     Descriptor->ExtAddress64.ResourceType    = ACPI_ADDRESS_TYPE_IO_RANGE;
+     Descriptor->ExtAddress64.RevisionID      = AML_RESOURCE_EXTENDED_ADDRESS_REVISION;
+-    Descriptor->ExtAddress64.ResourceLength  = (UINT16)
+-        (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) -
++    ResourceLength  = (UINT16) (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) -
+          sizeof (AML_RESOURCE_LARGE_HEADER));
++    ACPI_MOVE_16_TO_16(&Descriptor->ExtAddress64.ResourceLength,
++        &ResourceLength);
+     /* Process all child initialization nodes */
+@@ -139,7 +139,7 @@ RsDoExtendedIoDescriptor (
+         case 5: /* Address Granularity */
+-            Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;
++            Granularity = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));
+             GranOp = InitializerOp;
+@@ -147,7 +147,7 @@ RsDoExtendedIoDescriptor (
+         case 6: /* Address Min */
+-            Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;
++            Minimum = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));
+             MinOp = InitializerOp;
+@@ -155,7 +155,7 @@ RsDoExtendedIoDescriptor (
+         case 7: /* Address Max */
+-            Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;
++            Maximum = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));
+             MaxOp = InitializerOp;
+@@ -163,14 +163,14 @@ RsDoExtendedIoDescriptor (
+         case 8: /* Translation Offset */
+-            Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;
++            TranslationOffset = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset));
+             break;
+         case 9: /* Address Length */
+-            Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer;
++            AddressLength = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));
+             LengthOp = InitializerOp;
+@@ -178,7 +178,7 @@ RsDoExtendedIoDescriptor (
+         case 10: /* Type-Specific Attributes */
+-            Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;
++            TypeSpecific = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));
+             break;
+@@ -214,13 +221,20 @@ RsDoExtendedIoDescriptor (
+     /* Validate the Min/Max/Len/Gran values */
+     RsLargeAddressCheck (
+-        Descriptor->ExtAddress64.Minimum,
+-        Descriptor->ExtAddress64.Maximum,
+-        Descriptor->ExtAddress64.AddressLength,
+-        Descriptor->ExtAddress64.Granularity,
++        Minimum,
++        Maximum,
++        AddressLength,
++        Granularity,
+         Descriptor->ExtAddress64.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
++    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.Minimum, &Minimum);
++    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.Maximum, &Maximum);
++    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.AddressLength, &AddressLength);
++    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.Granularity, &Granularity);
++    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.TranslationOffset, &TranslationOffset);
++    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.TypeSpecific, &TypeSpecific);
++
+     Rnode->BufferLength = sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) +
+         StringLength;
+     return (Rnode);
+ }
+@@ -254,6 +270,13 @@ RsDoExtendedMemoryDescriptor (
+     ACPI_PARSE_OBJECT       *GranOp = NULL;
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT16                  StringLength = 0;
++    UINT16                  ResourceLength = 0;
++    UINT64                  Minimum = 0;
++    UINT64                  Maximum = 0;
++    UINT64                  AddressLength = 0;
++    UINT64                  Granularity = 0;
++    UINT64                  TranslationOffset = 0;
++    UINT64                  TypeSpecific = 0;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
+@@ -268,9 +291,10 @@ RsDoExtendedMemoryDescriptor (
+     Descriptor->ExtAddress64.ResourceType    = ACPI_ADDRESS_TYPE_MEMORY_RANGE;
+     Descriptor->ExtAddress64.RevisionID      = AML_RESOURCE_EXTENDED_ADDRESS_REVISION;
+-    Descriptor->ExtAddress64.ResourceLength  = (UINT16)
+-        (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) -
++    ResourceLength  = (UINT16) (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) -
+          sizeof (AML_RESOURCE_LARGE_HEADER));
++    ACPI_MOVE_16_TO_16(&Descriptor->ExtAddress64.ResourceLength,
++        &ResourceLength);
+     /* Process all child initialization nodes */
+@@ -320,7 +344,7 @@ RsDoExtendedMemoryDescriptor (
+         case 6: /* Address Granularity */
+-            Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;
++            Granularity = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));
+             GranOp = InitializerOp;
+@@ -328,7 +352,7 @@ RsDoExtendedMemoryDescriptor (
+         case 7: /* Min Address */
+-            Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;
++            Minimum = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));
+             MinOp = InitializerOp;
+@@ -336,7 +360,7 @@ RsDoExtendedMemoryDescriptor (
+         case 8: /* Max Address */
+-            Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;
++            Maximum = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));
+             MaxOp = InitializerOp;
+@@ -344,14 +368,14 @@ RsDoExtendedMemoryDescriptor (
+         case 9: /* Translation Offset */
+-            Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;
++            TranslationOffset = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset));
+             break;
+         case 10: /* Address Length */
+-            Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer;
++            AddressLength = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));
+             LengthOp = InitializerOp;
+@@ -359,7 +383,7 @@ RsDoExtendedMemoryDescriptor (
+         case 11: /* Type-Specific Attributes */
+-            Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;
++            TypeSpecific = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));
+             break;
+@@ -396,13 +420,20 @@ RsDoExtendedMemoryDescriptor (
+     /* Validate the Min/Max/Len/Gran values */
+     RsLargeAddressCheck (
+-        Descriptor->ExtAddress64.Minimum,
+-        Descriptor->ExtAddress64.Maximum,
+-        Descriptor->ExtAddress64.AddressLength,
+-        Descriptor->ExtAddress64.Granularity,
++        Minimum,
++        Maximum,
++        AddressLength,
++        Granularity,
+         Descriptor->ExtAddress64.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Op);
++    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.Minimum, &Minimum);
++    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.Maximum, &Maximum);
++    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.AddressLength, &AddressLength);
++    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.Granularity, &Granularity);
++    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.TranslationOffset, &TranslationOffset);
++    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.TypeSpecific, &TypeSpecific);
++
+     Rnode->BufferLength = sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + StringLength;
+     return (Rnode);
+ }
+@@ -435,6 +466,13 @@ RsDoExtendedSpaceDescriptor (
+     ACPI_PARSE_OBJECT       *GranOp = NULL;
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT16                  StringLength = 0;
++    UINT16                  ResourceLength = 0;
++    UINT64                  Minimum = 0;
++    UINT64                  Maximum = 0;
++    UINT64                  AddressLength = 0;
++    UINT64                  Granularity = 0;
++    UINT64                  TranslationOffset = 0;
++    UINT64                  TypeSpecific = 0;
+     UINT32                  i;
+@@ -448,9 +486,10 @@ RsDoExtendedSpaceDescriptor (
+     Descriptor->ExtAddress64.DescriptorType  = ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64;
+     Descriptor->ExtAddress64.RevisionID      = AML_RESOURCE_EXTENDED_ADDRESS_REVISION;
+-    Descriptor->ExtAddress64.ResourceLength  = (UINT16)
+-        (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) -
++    ResourceLength  = (UINT16) (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) -
+          sizeof (AML_RESOURCE_LARGE_HEADER));
++    ACPI_MOVE_16_TO_16(&Descriptor->ExtAddress64.ResourceLength,
++        &ResourceLength);
+     /* Process all child initialization nodes */
+@@ -498,7 +537,7 @@ RsDoExtendedSpaceDescriptor (
+         case 6: /* Address Granularity */
+-            Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;
++            Granularity = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));
+             GranOp = InitializerOp;
+@@ -506,7 +545,7 @@ RsDoExtendedSpaceDescriptor (
+         case 7: /* Min Address */
+-            Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;
++            Minimum = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));
+             MinOp = InitializerOp;
+@@ -514,7 +553,7 @@ RsDoExtendedSpaceDescriptor (
+         case 8: /* Max Address */
+-            Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;
++            Maximum = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));
+             MaxOp = InitializerOp;
+@@ -522,14 +561,14 @@ RsDoExtendedSpaceDescriptor (
+         case 9: /* Translation Offset */
+-            Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;
++            TranslationOffset = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset));
+             break;
+         case 10: /* Address Length */
+-            Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer;
++            AddressLength = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));
+             LengthOp = InitializerOp;
+@@ -537,7 +576,7 @@ RsDoExtendedSpaceDescriptor (
+         case 11: /* Type-Specific Attributes */
+-            Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;
++            TypeSpecific = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));
+             break;
+@@ -559,13 +598,20 @@ RsDoExtendedSpaceDescriptor (
+     /* Validate the Min/Max/Len/Gran values */
+     RsLargeAddressCheck (
+-        Descriptor->ExtAddress64.Minimum,
+-        Descriptor->ExtAddress64.Maximum,
+-        Descriptor->ExtAddress64.AddressLength,
+-        Descriptor->ExtAddress64.Granularity,
++        Minimum,
++        Maximum,
++        AddressLength,
++        Granularity,
+         Descriptor->ExtAddress64.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Op);
++    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.Minimum, &Minimum);
++    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.Maximum, &Maximum);
++    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.AddressLength, &AddressLength);
++    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.Granularity, &Granularity);
++    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.TranslationOffset, &TranslationOffset);
++    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.TypeSpecific, &TypeSpecific);
++
+     Rnode->BufferLength = sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + StringLength;
+     return (Rnode);
+ }
+diff -up acpica-unix2-20140424/source/compiler/aslrestype2q.c.debian-big_endian acpica-unix2-20140424/source/compiler/aslrestype2q.c
+--- acpica-unix2-20140424/source/compiler/aslrestype2q.c.debian-big_endian     2014-04-24 11:49:00.000000000 -0400
++++ acpica-unix2-20140424/source/compiler/aslrestype2q.c       2014-06-06 20:43:34.721825238 -0400
+@@ -80,7 +86,13 @@ RsDoQwordIoDescriptor (
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT8                   *OptionalFields;
+     UINT16                  StringLength = 0;
++    UINT16                  ResourceLength = 0;
+     UINT32                  OptionIndex = 0;
++    UINT64                  Minimum = 0;
++    UINT64                  Maximum = 0;
++    UINT64                  AddressLength = 0;
++    UINT64                  Granularity = 0;
++    UINT64                  TranslationOffset = 0;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
+     BOOLEAN                 ResSourceIndex = FALSE;
+@@ -102,8 +101,7 @@ RsDoQwordIoDescriptor (
+      * optional fields present
+      */
+     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS64);
+-    Descriptor->Address64.ResourceLength = (UINT16)
+-        (sizeof (AML_RESOURCE_ADDRESS64) -
++    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS64) -
+          sizeof (AML_RESOURCE_LARGE_HEADER));
+     /* Process all child initialization nodes */
+@@ -147,7 +147,7 @@ RsDoQwordIoDescriptor (
+         case 5: /* Address Granularity */
+-            Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
++            Granularity = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
+             GranOp = InitializerOp;
+@@ -155,7 +155,7 @@ RsDoQwordIoDescriptor (
+         case 6: /* Address Min */
+-            Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
++            Minimum = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
+             MinOp = InitializerOp;
+@@ -163,7 +163,7 @@ RsDoQwordIoDescriptor (
+         case 7: /* Address Max */
+-            Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
++            Maximum = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
+             MaxOp = InitializerOp;
+@@ -171,14 +171,14 @@ RsDoQwordIoDescriptor (
+         case 8: /* Translation Offset */
+-            Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
++            TranslationOffset = InitializerOp->Asl.Value.Integer;
+             RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset));
+             break;
+         case 9: /* Address Length */
+-            Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer;
++            AddressLength = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
+             LengthOp = InitializerOp;
+@@ -190,7 +190,7 @@ RsDoQwordIoDescriptor (
+             {
+                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
+                 OptionIndex++;
+-                Descriptor->Address64.ResourceLength++;
++                ResourceLength++;
+                 ResSourceIndex = TRUE;
+             }
+             break;
+@@ -202,8 +201,7 @@ RsDoQwordIoDescriptor (
+             {
+                 if (StringLength)
+                 {
+-                    Descriptor->Address64.ResourceLength = (UINT16)
+-                        (Descriptor->Address64.ResourceLength + StringLength);
++                    ResourceLength = (UINT16) (ResourceLength + StringLength);
+                     strcpy ((char *)
+                         &OptionalFields[OptionIndex],
+@@ -263,13 +270,20 @@ RsDoQwordIoDescriptor (
+     /* Validate the Min/Max/Len/Gran values */
+     RsLargeAddressCheck (
+-        Descriptor->Address64.Minimum,
+-        Descriptor->Address64.Maximum,
+-        Descriptor->Address64.AddressLength,
+-        Descriptor->Address64.Granularity,
++        Minimum,
++        Maximum,
++        AddressLength,
++        Granularity,
+         Descriptor->Address64.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address64.ResourceLength, &ResourceLength);
++    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Minimum, &Minimum);
++    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Maximum, &Maximum);
++    ACPI_MOVE_64_TO_64(&Descriptor->Address64.AddressLength, &AddressLength);
++    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Granularity, &Granularity);
++    ACPI_MOVE_64_TO_64(&Descriptor->Address64.TranslationOffset, &TranslationOffset);
++
+     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS64) +
+         OptionIndex + StringLength;
+     return (Rnode);
+@@ -301,7 +307,13 @@ RsDoQwordMemoryDescriptor (
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT8                   *OptionalFields;
+     UINT16                  StringLength = 0;
++    UINT16                  ResourceLength = 0;
+     UINT32                  OptionIndex = 0;
++    UINT64                  Minimum = 0;
++    UINT64                  Maximum = 0;
++    UINT64                  AddressLength = 0;
++    UINT64                  Granularity = 0;
++    UINT64                  TranslationOffset = 0;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
+     BOOLEAN                 ResSourceIndex = FALSE;
+@@ -323,8 +322,7 @@ RsDoQwordMemoryDescriptor (
+      * optional fields present
+      */
+     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS64);
+-    Descriptor->Address64.ResourceLength = (UINT16)
+-        (sizeof (AML_RESOURCE_ADDRESS64) -
++    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS64) -
+          sizeof (AML_RESOURCE_LARGE_HEADER));
+     /* Process all child initialization nodes */
+@@ -375,7 +375,7 @@ RsDoQwordMemoryDescriptor (
+         case 6: /* Address Granularity */
+-            Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
++            Granularity = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
+             GranOp = InitializerOp;
+@@ -383,7 +383,7 @@ RsDoQwordMemoryDescriptor (
+         case 7: /* Min Address */
+-            Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
++            Minimum = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
+             MinOp = InitializerOp;
+@@ -391,7 +391,7 @@ RsDoQwordMemoryDescriptor (
+         case 8: /* Max Address */
+-            Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
++            Maximum = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
+             MaxOp = InitializerOp;
+@@ -399,14 +399,14 @@ RsDoQwordMemoryDescriptor (
+         case 9: /* Translation Offset */
+-            Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
++            TranslationOffset = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset));
+             break;
+         case 10: /* Address Length */
+-            Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer;
++            AddressLength = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
+             LengthOp = InitializerOp;
+@@ -418,7 +418,7 @@ RsDoQwordMemoryDescriptor (
+             {
+                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
+                 OptionIndex++;
+-                Descriptor->Address64.ResourceLength++;
++                ResourceLength++;
+                 ResSourceIndex = TRUE;
+             }
+             break;
+@@ -430,8 +429,7 @@ RsDoQwordMemoryDescriptor (
+             {
+                 if (StringLength)
+                 {
+-                    Descriptor->Address64.ResourceLength = (UINT16)
+-                        (Descriptor->Address64.ResourceLength + StringLength);
++                    ResourceLength = (UINT16) (ResourceLength + StringLength);
+                     strcpy ((char *)
+                         &OptionalFields[OptionIndex],
+@@ -492,13 +499,20 @@ RsDoQwordMemoryDescriptor (
+     /* Validate the Min/Max/Len/Gran values */
+     RsLargeAddressCheck (
+-        Descriptor->Address64.Minimum,
+-        Descriptor->Address64.Maximum,
+-        Descriptor->Address64.AddressLength,
+-        Descriptor->Address64.Granularity,
++        Minimum,
++        Maximum,
++        AddressLength,
++        Granularity,
+         Descriptor->Address64.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address64.ResourceLength, &ResourceLength);
++    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Minimum, &Minimum);
++    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Maximum, &Maximum);
++    ACPI_MOVE_64_TO_64(&Descriptor->Address64.AddressLength, &AddressLength);
++    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Granularity, &Granularity);
++    ACPI_MOVE_64_TO_64(&Descriptor->Address64.TranslationOffset, &TranslationOffset);
++
+     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS64) +
+         OptionIndex + StringLength;
+     return (Rnode);
+@@ -530,9 +536,15 @@ RsDoQwordSpaceDescriptor (
+     ASL_RESOURCE_NODE       *Rnode;
+     UINT8                   *OptionalFields;
+     UINT16                  StringLength = 0;
++    UINT16                  ResourceLength = 0;
+     UINT32                  OptionIndex = 0;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
++    UINT64                  Minimum = 0;
++    UINT64                  Maximum = 0;
++    UINT64                  AddressLength = 0;
++    UINT64                  Granularity = 0;
++    UINT64                  TranslationOffset = 0;
+     BOOLEAN                 ResSourceIndex = FALSE;
+@@ -551,8 +550,7 @@ RsDoQwordSpaceDescriptor (
+      * optional fields present
+      */
+     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS64);
+-    Descriptor->Address64.ResourceLength = (UINT16)
+-        (sizeof (AML_RESOURCE_ADDRESS64) -
++    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS64) -
+          sizeof (AML_RESOURCE_LARGE_HEADER));
+     /* Process all child initialization nodes */
+@@ -601,7 +601,7 @@ RsDoQwordSpaceDescriptor (
+         case 6: /* Address Granularity */
+-            Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
++            Granularity = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
+             GranOp = InitializerOp;
+@@ -609,7 +609,7 @@ RsDoQwordSpaceDescriptor (
+         case 7: /* Min Address */
+-            Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
++            Minimum = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
+             MinOp = InitializerOp;
+@@ -617,7 +617,7 @@ RsDoQwordSpaceDescriptor (
+         case 8: /* Max Address */
+-            Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
++            Maximum = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
+             MaxOp = InitializerOp;
+@@ -625,14 +625,14 @@ RsDoQwordSpaceDescriptor (
+         case 9: /* Translation Offset */
+-            Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
++            TranslationOffset = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset));
+             break;
+         case 10: /* Address Length */
+-            Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer;
++            AddressLength = InitializerOp->Asl.Value.Integer;
+             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
+             LengthOp = InitializerOp;
+@@ -644,7 +644,7 @@ RsDoQwordSpaceDescriptor (
+             {
+                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
+                 OptionIndex++;
+-                Descriptor->Address64.ResourceLength++;
++                ResourceLength++;
+                 ResSourceIndex = TRUE;
+             }
+             break;
+@@ -656,8 +655,7 @@ RsDoQwordSpaceDescriptor (
+             {
+                 if (StringLength)
+                 {
+-                    Descriptor->Address64.ResourceLength = (UINT16)
+-                        (Descriptor->Address64.ResourceLength + StringLength);
++                    ResourceLength = (UINT16) (ResourceLength + StringLength);
+                     strcpy ((char *)
+                         &OptionalFields[OptionIndex],
+@@ -703,13 +710,20 @@ RsDoQwordSpaceDescriptor (
+     /* Validate the Min/Max/Len/Gran values */
+     RsLargeAddressCheck (
+-        Descriptor->Address64.Minimum,
+-        Descriptor->Address64.Maximum,
+-        Descriptor->Address64.AddressLength,
+-        Descriptor->Address64.Granularity,
++        Minimum,
++        Maximum,
++        AddressLength,
++        Granularity,
+         Descriptor->Address64.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address64.ResourceLength, &ResourceLength);
++    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Minimum, &Minimum);
++    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Maximum, &Maximum);
++    ACPI_MOVE_64_TO_64(&Descriptor->Address64.AddressLength, &AddressLength);
++    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Granularity, &Granularity);
++    ACPI_MOVE_64_TO_64(&Descriptor->Address64.TranslationOffset, &TranslationOffset);
++
+     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS64) +
+         OptionIndex + StringLength;
+     return (Rnode);
+diff -up acpica-unix2-20140424/source/compiler/aslrestype2s.c.debian-big_endian acpica-unix2-20140424/source/compiler/aslrestype2s.c
+--- acpica-unix2-20140424/source/compiler/aslrestype2s.c.debian-big_endian     2014-04-24 11:49:00.000000000 -0400
++++ acpica-unix2-20140424/source/compiler/aslrestype2s.c       2014-06-06 20:43:34.721825238 -0400
+@@ -290,6 +293,9 @@ RsDoGpioIntDescriptor (
+     UINT16                  VendorLength;
+     UINT16                  InterruptLength;
+     UINT16                  DescriptorSize;
++    UINT16                  IntFlags = 0;
++    UINT16                  DebounceTimeout = 0;
++    UINT16                  Flags = 0;
+     UINT32                  CurrentByteOffset;
+     UINT32                  PinCount = 0;
+     UINT32                  i;
+@@ -349,21 +349,21 @@ RsDoGpioIntDescriptor (
+         {
+         case 0: /* Interrupt Mode - edge/level [Flag] (_MOD) */
+-            RsSetFlagBits16 (&Descriptor->Gpio.IntFlags, InitializerOp, 0, 0);
++            RsSetFlagBits16 (&IntFlags, InitializerOp, 0, 0);
+             RsCreateBitField (InitializerOp, ACPI_RESTAG_MODE,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.IntFlags), 0);
+             break;
+         case 1: /* Interrupt Polarity - Active high/low [Flags] (_POL) */
+-            RsSetFlagBits16 (&Descriptor->Gpio.IntFlags, InitializerOp, 1, 0);
++            RsSetFlagBits16 (&IntFlags, InitializerOp, 1, 0);
+             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_POLARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.IntFlags), 1, 2);
+             break;
+         case 2: /* Share Type - Default: exclusive (0) [Flags] (_SHR) */
+-            RsSetFlagBits16 (&Descriptor->Gpio.IntFlags, InitializerOp, 3, 0);
++            RsSetFlagBits16 (&IntFlags, InitializerOp, 3, 0);
+             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.IntFlags), 3, 2);
+             break;
+@@ -377,7 +377,7 @@ RsDoGpioIntDescriptor (
+         case 4: /* Debounce Timeout [WORD] (_DBT) */
+-            Descriptor->Gpio.DebounceTimeout = (UINT16) InitializerOp->Asl.Value.Integer;
++            DebounceTimeout = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_DEBOUNCETIME,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.DebounceTimeout));
+             break;
+@@ -403,7 +403,7 @@ RsDoGpioIntDescriptor (
+         case 7: /* Resource Usage (consumer/producer) */
+-            RsSetFlagBits16 (&Descriptor->Gpio.Flags, InitializerOp, 0, 1);
++            RsSetFlagBits16 (&Flags, InitializerOp, 0, 1);
+             break;
+         case 8: /* Resource Tag (Descriptor Name) */
+@@ -468,6 +472,10 @@ RsDoGpioIntDescriptor (
+         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+     }
++    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.IntFlags, &IntFlags);
++    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.DebounceTimeout, &DebounceTimeout);
++    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.Flags, &Flags);
++
+     MpSaveGpioInfo (Info->MappingOp, Descriptor, PinCount, PinList, ResourceSource);
+     return (Rnode);
+ }
+@@ -500,6 +504,10 @@ RsDoGpioIoDescriptor (
+     UINT16                  VendorLength;
+     UINT16                  InterruptLength;
+     UINT16                  DescriptorSize;
++    UINT16                  IntFlags = 0;
++    UINT16                  DebounceTimeout = 0;
++    UINT16                  DriveStrength = 0;
++    UINT16                  Flags = 0;
+     UINT32                  CurrentByteOffset;
+     UINT32                  PinCount = 0;
+     UINT32                  i;
+@@ -560,7 +560,7 @@ RsDoGpioIoDescriptor (
+         {
+         case 0: /* Share Type [Flags] (_SHR) */
+-            RsSetFlagBits16 (&Descriptor->Gpio.IntFlags, InitializerOp, 3, 0);
++            RsSetFlagBits16 (&IntFlags, InitializerOp, 3, 0);
+             RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.IntFlags), 3);
+             break;
+@@ -574,21 +574,21 @@ RsDoGpioIoDescriptor (
+         case 2: /* Debounce Timeout [WORD] (_DBT) */
+-            Descriptor->Gpio.DebounceTimeout = (UINT16) InitializerOp->Asl.Value.Integer;
++            DebounceTimeout = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_DEBOUNCETIME,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.DebounceTimeout));
+             break;
+         case 3: /* Drive Strength [WORD] (_DRS) */
+-            Descriptor->Gpio.DriveStrength = (UINT16) InitializerOp->Asl.Value.Integer;
++            DriveStrength = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_DRIVESTRENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.DriveStrength));
+             break;
+         case 4: /* I/O Restriction [Flag] (_IOR) */
+-            RsSetFlagBits16 (&Descriptor->Gpio.IntFlags, InitializerOp, 0, 0);
++            RsSetFlagBits16 (&IntFlags, InitializerOp, 0, 0);
+             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_IORESTRICTION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.IntFlags), 0, 2);
+             break;
+@@ -614,7 +614,7 @@ RsDoGpioIoDescriptor (
+         case 7: /* Resource Usage (consumer/producer) */
+-            RsSetFlagBits16 (&Descriptor->Gpio.Flags, InitializerOp, 0, 1);
++            RsSetFlagBits16 (&Flags, InitializerOp, 0, 1);
+             break;
+         case 8: /* Resource Tag (Descriptor Name) */
+@@ -678,6 +683,11 @@ RsDoGpioIoDescriptor (
+         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+     }
++    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.IntFlags, &IntFlags);
++    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.DebounceTimeout, &DebounceTimeout);
++    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.DriveStrength, &DriveStrength);
++    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.Flags, &Flags);
++
+     MpSaveGpioInfo (Info->MappingOp, Descriptor, PinCount, PinList, ResourceSource);
+     return (Rnode);
+ }
+@@ -707,6 +710,9 @@ RsDoI2cSerialBusDescriptor (
+     UINT16                  ResSourceLength;
+     UINT16                  VendorLength;
+     UINT16                  DescriptorSize;
++    UINT16                  SlaveAddress = 0;
++    UINT32                  ConnectionSpeed = 0;
++    UINT16                  TypeSpecificFlags = 0;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
+@@ -756,7 +756,7 @@ RsDoI2cSerialBusDescriptor (
+         {
+         case 0: /* Slave Address [WORD] (_ADR) */
+-            Descriptor->I2cSerialBus.SlaveAddress = (UINT16) InitializerOp->Asl.Value.Integer;
++            SlaveAddress = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_ADDRESS,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (I2cSerialBus.SlaveAddress));
+             break;
+@@ -770,14 +770,14 @@ RsDoI2cSerialBusDescriptor (
+         case 2: /* Connection Speed [DWORD] (_SPE) */
+-            Descriptor->I2cSerialBus.ConnectionSpeed = (UINT32) InitializerOp->Asl.Value.Integer;
++            ConnectionSpeed = (UINT32) InitializerOp->Asl.Value.Integer;
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_SPEED,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (I2cSerialBus.ConnectionSpeed));
+             break;
+         case 3: /* Addressing Mode [Flag] (_MOD) */
+-            RsSetFlagBits16 (&Descriptor->I2cSerialBus.TypeSpecificFlags, InitializerOp, 0, 0);
++            RsSetFlagBits16 (&TypeSpecificFlags, InitializerOp, 0, 0);
+             RsCreateBitField (InitializerOp, ACPI_RESTAG_MODE,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (I2cSerialBus.TypeSpecificFlags), 0);
+             break;
+@@ -825,6 +828,9 @@ RsDoI2cSerialBusDescriptor (
+         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+     }
++    ACPI_MOVE_16_TO_16(&Descriptor->I2cSerialBus.SlaveAddress, &SlaveAddress);
++    ACPI_MOVE_32_TO_32(&Descriptor->I2cSerialBus.ConnectionSpeed, &ConnectionSpeed);
++    ACPI_MOVE_16_TO_16(&Descriptor->I2cSerialBus.TypeSpecificFlags, &TypeSpecificFlags);
+     MpSaveSerialInfo (Info->MappingOp, Descriptor, ResourceSource);
+     return (Rnode);
+ }
+@@ -854,6 +857,9 @@ RsDoSpiSerialBusDescriptor (
+     UINT16                  ResSourceLength;
+     UINT16                  VendorLength;
+     UINT16                  DescriptorSize;
++    UINT16                  DeviceSelection = 0;
++    UINT32                  ConnectionSpeed = 0;
++    UINT16                  TypeSpecificFlags = 0;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
+@@ -903,21 +903,21 @@ RsDoSpiSerialBusDescriptor (
+         {
+         case 0: /* Device Selection [WORD] (_ADR) */
+-            Descriptor->SpiSerialBus.DeviceSelection = (UINT16) InitializerOp->Asl.Value.Integer;
++            DeviceSelection = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_ADDRESS,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.DeviceSelection));
+             break;
+         case 1: /* Device Polarity [Flag] (_DPL) */
+-            RsSetFlagBits16 (&Descriptor->SpiSerialBus.TypeSpecificFlags, InitializerOp, 1, 0);
++            RsSetFlagBits16 (&TypeSpecificFlags, InitializerOp, 1, 0);
+             RsCreateBitField (InitializerOp, ACPI_RESTAG_DEVICEPOLARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.TypeSpecificFlags), 1);
+             break;
+         case 2: /* Wire Mode [Flag] (_MOD) */
+-            RsSetFlagBits16 (&Descriptor->SpiSerialBus.TypeSpecificFlags, InitializerOp, 0, 0);
++            RsSetFlagBits16 (&TypeSpecificFlags, InitializerOp, 0, 0);
+             RsCreateBitField (InitializerOp, ACPI_RESTAG_MODE,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.TypeSpecificFlags), 0);
+             break;
+@@ -938,7 +938,7 @@ RsDoSpiSerialBusDescriptor (
+         case 5: /* Connection Speed [DWORD] (_SPE) */
+-            Descriptor->SpiSerialBus.ConnectionSpeed = (UINT32) InitializerOp->Asl.Value.Integer;
++            ConnectionSpeed = (UINT32) InitializerOp->Asl.Value.Integer;
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_SPEED,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.ConnectionSpeed));
+             break;
+@@ -1000,6 +1004,10 @@ RsDoSpiSerialBusDescriptor (
+         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+     }
++    ACPI_MOVE_16_TO_16(&Descriptor->SpiSerialBus.DeviceSelection, &DeviceSelection);
++    ACPI_MOVE_32_TO_32(&Descriptor->SpiSerialBus.ConnectionSpeed, &ConnectionSpeed);
++    ACPI_MOVE_16_TO_16(&Descriptor->SpiSerialBus.TypeSpecificFlags, &TypeSpecificFlags);
++
+     MpSaveSerialInfo (Info->MappingOp, Descriptor, ResourceSource);
+     return (Rnode);
+ }
+@@ -1029,6 +1033,10 @@ RsDoUartSerialBusDescriptor (
+     UINT16                  ResSourceLength;
+     UINT16                  VendorLength;
+     UINT16                  DescriptorSize;
++    UINT32                  DefaultBaudRate = 0;
++    UINT16                  TypeSpecificFlags = 0;
++    UINT16                  RxFifoSize = 0;
++    UINT16                  TxFifoSize = 0;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
+@@ -1078,21 +1078,21 @@ RsDoUartSerialBusDescriptor (
+         {
+         case 0: /* Connection Speed (Baud Rate) [DWORD] (_SPE) */
+-            Descriptor->UartSerialBus.DefaultBaudRate = (UINT32) InitializerOp->Asl.Value.Integer;
++            DefaultBaudRate = (UINT32) InitializerOp->Asl.Value.Integer;
+             RsCreateDwordField (InitializerOp, ACPI_RESTAG_SPEED,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.DefaultBaudRate));
+             break;
+         case 1: /* Bits Per Byte [Flags] (_LEN) */
+-            RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 4, 3);
++            RsSetFlagBits16 (&TypeSpecificFlags, InitializerOp, 4, 3);
+             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 4, 3);
+             break;
+         case 2: /* Stop Bits [Flags] (_STB) */
+-            RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 2, 1);
++            RsSetFlagBits16 (&TypeSpecificFlags, InitializerOp, 2, 1);
+             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_STOPBITS,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 2, 2);
+             break;
+@@ -1106,7 +1106,7 @@ RsDoUartSerialBusDescriptor (
+         case 4: /* Endianness [Flag] (_END) */
+-            RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 7, 0);
++            RsSetFlagBits16 (&TypeSpecificFlags, InitializerOp, 7, 0);
+             RsCreateBitField (InitializerOp, ACPI_RESTAG_ENDIANNESS,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 7);
+             break;
+@@ -1120,21 +1120,21 @@ RsDoUartSerialBusDescriptor (
+         case 6: /* Flow Control [Flags] (_FLC) */
+-            RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 0, 0);
++            RsSetFlagBits16 (&TypeSpecificFlags, InitializerOp, 0, 0);
+             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_FLOWCONTROL,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 0, 2);
+             break;
+         case 7: /* Rx Buffer Size [WORD] (_RXL) */
+-            Descriptor->UartSerialBus.RxFifoSize = (UINT16) InitializerOp->Asl.Value.Integer;
++            RxFifoSize = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH_RX,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.RxFifoSize));
+             break;
+         case 8: /* Tx Buffer Size [WORD] (_TXL) */
+-            Descriptor->UartSerialBus.TxFifoSize = (UINT16) InitializerOp->Asl.Value.Integer;
++            TxFifoSize = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH_TX,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TxFifoSize));
+             break;
+@@ -1192,6 +1197,11 @@ RsDoUartSerialBusDescriptor (
+         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
+     }
++    ACPI_MOVE_32_TO_32(&Descriptor->UartSerialBus.DefaultBaudRate, &DefaultBaudRate);
++    ACPI_MOVE_16_TO_16(&Descriptor->UartSerialBus.TypeSpecificFlags, &TypeSpecificFlags);
++    ACPI_MOVE_16_TO_16(&Descriptor->UartSerialBus.RxFifoSize, &RxFifoSize);
++    ACPI_MOVE_16_TO_16(&Descriptor->UartSerialBus.TxFifoSize, &TxFifoSize);
++
+     MpSaveSerialInfo (Info->MappingOp, Descriptor, ResourceSource);
+     return (Rnode);
+ }
+diff -up acpica-unix2-20140424/source/compiler/aslrestype2w.c.debian-big_endian acpica-unix2-20140424/source/compiler/aslrestype2w.c
+--- acpica-unix2-20140424/source/compiler/aslrestype2w.c.debian-big_endian     2014-04-24 11:49:00.000000000 -0400
++++ acpica-unix2-20140424/source/compiler/aslrestype2w.c       2014-06-06 20:43:34.721825238 -0400
+@@ -81,6 +87,12 @@ RsDoWordIoDescriptor (
+     UINT8                   *OptionalFields;
+     UINT16                  StringLength = 0;
+     UINT32                  OptionIndex = 0;
++    UINT16                  ResourceLength = 0;
++    UINT16                  Minimum = 0;
++    UINT16                  Maximum = 0;
++    UINT16                  AddressLength = 0;
++    UINT16                  Granularity = 0;
++    UINT16                  TranslationOffset = 0;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
+     BOOLEAN                 ResSourceIndex = FALSE;
+@@ -102,8 +101,7 @@ RsDoWordIoDescriptor (
+      * optional fields present
+      */
+     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS16);
+-    Descriptor->Address16.ResourceLength = (UINT16)
+-        (sizeof (AML_RESOURCE_ADDRESS16) -
++    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS16) -
+          sizeof (AML_RESOURCE_LARGE_HEADER));
+     /* Process all child initialization nodes */
+@@ -147,7 +147,7 @@ RsDoWordIoDescriptor (
+         case 5: /* Address Granularity */
+-            Descriptor->Address16.Granularity = (UINT16) InitializerOp->Asl.Value.Integer;
++            Granularity = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity));
+             GranOp = InitializerOp;
+@@ -155,7 +155,7 @@ RsDoWordIoDescriptor (
+         case 6: /* Address Min */
+-            Descriptor->Address16.Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
++            Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum));
+             MinOp = InitializerOp;
+@@ -163,7 +163,7 @@ RsDoWordIoDescriptor (
+         case 7: /* Address Max */
+-            Descriptor->Address16.Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
++            Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum));
+             MaxOp = InitializerOp;
+@@ -171,14 +171,14 @@ RsDoWordIoDescriptor (
+         case 8: /* Translation Offset */
+-            Descriptor->Address16.TranslationOffset = (UINT16) InitializerOp->Asl.Value.Integer;
++            TranslationOffset = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset));
+             break;
+         case 9: /* Address Length */
+-            Descriptor->Address16.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
++            AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                  CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength));
+             LengthOp = InitializerOp;
+@@ -190,7 +190,7 @@ RsDoWordIoDescriptor (
+             {
+                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
+                 OptionIndex++;
+-                Descriptor->Address16.ResourceLength++;
++                ResourceLength++;
+                 ResSourceIndex = TRUE;
+             }
+             break;
+@@ -202,8 +201,7 @@ RsDoWordIoDescriptor (
+             {
+                 if (StringLength)
+                 {
+-                    Descriptor->Address16.ResourceLength = (UINT16)
+-                        (Descriptor->Address16.ResourceLength + StringLength);
++                    ResourceLength = (UINT16) (ResourceLength + StringLength);
+                     strcpy ((char *)
+                         &OptionalFields[OptionIndex],
+@@ -263,13 +270,20 @@ RsDoWordIoDescriptor (
+     /* Validate the Min/Max/Len/Gran values */
+     RsLargeAddressCheck (
+-        (UINT64) Descriptor->Address16.Minimum,
+-        (UINT64) Descriptor->Address16.Maximum,
+-        (UINT64) Descriptor->Address16.AddressLength,
+-        (UINT64) Descriptor->Address16.Granularity,
++        Minimum,
++        Maximum,
++        AddressLength,
++        Granularity,
+         Descriptor->Address16.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address16.ResourceLength, &ResourceLength);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Minimum, &Minimum);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Maximum, &Maximum);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address16.AddressLength, &AddressLength);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Granularity, &Granularity);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address16.TranslationOffset, &TranslationOffset);
++
+     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) +
+         OptionIndex + StringLength;
+     return (Rnode);
+@@ -302,6 +308,12 @@ RsDoWordBusNumberDescriptor (
+     UINT8                   *OptionalFields;
+     UINT16                  StringLength = 0;
+     UINT32                  OptionIndex = 0;
++    UINT16                  ResourceLength = 0;
++    UINT16                  Minimum = 0;
++    UINT16                  Maximum = 0;
++    UINT16                  AddressLength = 0;
++    UINT16                  Granularity = 0;
++    UINT16                  TranslationOffset = 0;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
+     BOOLEAN                 ResSourceIndex = FALSE;
+@@ -323,8 +322,7 @@ RsDoWordBusNumberDescriptor (
+      * optional fields present
+      */
+     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS16);
+-    Descriptor->Address16.ResourceLength = (UINT16)
+-        (sizeof (AML_RESOURCE_ADDRESS16) -
++    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS16) -
+          sizeof (AML_RESOURCE_LARGE_HEADER));
+     /* Process all child initialization nodes */
+@@ -361,8 +360,7 @@ RsDoWordBusNumberDescriptor (
+         case 4: /* Address Granularity */
+-            Descriptor->Address16.Granularity =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            Granularity = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity));
+             GranOp = InitializerOp;
+@@ -370,8 +369,7 @@ RsDoWordBusNumberDescriptor (
+         case 5: /* Min Address */
+-            Descriptor->Address16.Minimum =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum));
+             MinOp = InitializerOp;
+@@ -379,8 +378,7 @@ RsDoWordBusNumberDescriptor (
+         case 6: /* Max Address */
+-            Descriptor->Address16.Maximum =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum));
+             MaxOp = InitializerOp;
+@@ -388,16 +386,14 @@ RsDoWordBusNumberDescriptor (
+         case 7: /* Translation Offset */
+-            Descriptor->Address16.TranslationOffset =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            TranslationOffset = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset));
+             break;
+         case 8: /* Address Length */
+-            Descriptor->Address16.AddressLength =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                  CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength));
+             LengthOp = InitializerOp;
+@@ -409,7 +409,7 @@ RsDoWordBusNumberDescriptor (
+             {
+                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
+                 OptionIndex++;
+-                Descriptor->Address16.ResourceLength++;
++                ResourceLength++;
+                 ResSourceIndex = TRUE;
+             }
+             break;
+@@ -421,8 +420,7 @@ RsDoWordBusNumberDescriptor (
+             {
+                 if (StringLength)
+                 {
+-                    Descriptor->Address16.ResourceLength = (UINT16)
+-                        (Descriptor->Address16.ResourceLength + StringLength);
++                    ResourceLength = (UINT16) (ResourceLength + StringLength);
+                     strcpy ((char *)
+                         &OptionalFields[OptionIndex],
+@@ -468,13 +475,20 @@ RsDoWordBusNumberDescriptor (
+     /* Validate the Min/Max/Len/Gran values */
+     RsLargeAddressCheck (
+-        (UINT64) Descriptor->Address16.Minimum,
+-        (UINT64) Descriptor->Address16.Maximum,
+-        (UINT64) Descriptor->Address16.AddressLength,
+-        (UINT64) Descriptor->Address16.Granularity,
++        Minimum,
++        Maximum,
++        AddressLength,
++        Granularity,
+         Descriptor->Address16.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address16.ResourceLength, &ResourceLength);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Minimum, &Minimum);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Maximum, &Maximum);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address16.AddressLength, &AddressLength);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Granularity, &Granularity);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address16.TranslationOffset, &TranslationOffset);
++
+     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) +
+         OptionIndex + StringLength;
+     return (Rnode);
+@@ -507,6 +513,12 @@ RsDoWordSpaceDescriptor (
+     UINT8                   *OptionalFields;
+     UINT16                  StringLength = 0;
+     UINT32                  OptionIndex = 0;
++    UINT16                  Minimum = 0;
++    UINT16                  Maximum = 0;
++    UINT16                  AddressLength = 0;
++    UINT16                  Granularity = 0;
++    UINT16                  TranslationOffset = 0;
++    UINT16                  ResourceLength = 0;
+     UINT32                  CurrentByteOffset;
+     UINT32                  i;
+     BOOLEAN                 ResSourceIndex = FALSE;
+@@ -527,8 +526,7 @@ RsDoWordSpaceDescriptor (
+      * optional fields present
+      */
+     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS16);
+-    Descriptor->Address16.ResourceLength = (UINT16)
+-        (sizeof (AML_RESOURCE_ADDRESS16) -
++    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS16) -
+          sizeof (AML_RESOURCE_LARGE_HEADER));
+     /* Process all child initialization nodes */
+@@ -577,8 +576,7 @@ RsDoWordSpaceDescriptor (
+         case 6: /* Address Granularity */
+-            Descriptor->Address16.Granularity =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            Granularity = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity));
+             GranOp = InitializerOp;
+@@ -586,8 +585,7 @@ RsDoWordSpaceDescriptor (
+         case 7: /* Min Address */
+-            Descriptor->Address16.Minimum =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum));
+             MinOp = InitializerOp;
+@@ -595,8 +594,7 @@ RsDoWordSpaceDescriptor (
+         case 8: /* Max Address */
+-            Descriptor->Address16.Maximum =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum));
+             MaxOp = InitializerOp;
+@@ -604,16 +602,14 @@ RsDoWordSpaceDescriptor (
+         case 9: /* Translation Offset */
+-            Descriptor->Address16.TranslationOffset =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            TranslationOffset = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset));
+             break;
+         case 10: /* Address Length */
+-            Descriptor->Address16.AddressLength =
+-                (UINT16) InitializerOp->Asl.Value.Integer;
++            AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
+             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
+                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength));
+             LengthOp = InitializerOp;
+@@ -625,7 +625,7 @@ RsDoWordSpaceDescriptor (
+             {
+                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
+                 OptionIndex++;
+-                Descriptor->Address16.ResourceLength++;
++                ResourceLength++;
+                 ResSourceIndex = TRUE;
+             }
+             break;
+@@ -637,8 +636,7 @@ RsDoWordSpaceDescriptor (
+             {
+                 if (StringLength)
+                 {
+-                    Descriptor->Address16.ResourceLength = (UINT16)
+-                        (Descriptor->Address16.ResourceLength + StringLength);
++                    ResourceLength = (UINT16) (ResourceLength + StringLength);
+                     strcpy ((char *)
+                         &OptionalFields[OptionIndex],
+@@ -684,13 +691,20 @@ RsDoWordSpaceDescriptor (
+     /* Validate the Min/Max/Len/Gran values */
+     RsLargeAddressCheck (
+-        (UINT64) Descriptor->Address16.Minimum,
+-        (UINT64) Descriptor->Address16.Maximum,
+-        (UINT64) Descriptor->Address16.AddressLength,
+-        (UINT64) Descriptor->Address16.Granularity,
++        Minimum,
++        Maximum,
++        AddressLength,
++        Granularity,
+         Descriptor->Address16.Flags,
+         MinOp, MaxOp, LengthOp, GranOp, Info->DescriptorTypeOp);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address16.ResourceLength, &ResourceLength);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Minimum, &Minimum);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Maximum, &Maximum);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address16.AddressLength, &AddressLength);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Granularity, &Granularity);
++    ACPI_MOVE_16_TO_16(&Descriptor->Address16.TranslationOffset, &TranslationOffset);
++
+     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) +
+         OptionIndex + StringLength;
+     return (Rnode);
+diff -up acpica-unix2-20140424/source/include/acmacros.h.debian-big_endian acpica-unix2-20140424/source/include/acmacros.h
+--- acpica-unix2-20140424/source/include/acmacros.h.debian-big_endian  2014-04-24 11:49:05.000000000 -0400
++++ acpica-unix2-20140424/source/include/acmacros.h    2014-06-06 20:43:34.721825238 -0400
+@@ -111,7 +111,8 @@
+ /* 32-bit source, 16/32/64 destination */
+-#define ACPI_MOVE_32_TO_16(d, s)        ACPI_MOVE_16_TO_16(d, s)    /* Truncate to 16 */
++#define ACPI_MOVE_32_TO_16(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[3];\
++                                         ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[2];}
+ #define ACPI_MOVE_32_TO_32(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[3];\
+                                          ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[2];\
+@@ -126,9 +127,13 @@
+ /* 64-bit source, 16/32/64 destination */
+-#define ACPI_MOVE_64_TO_16(d, s)        ACPI_MOVE_16_TO_16(d, s)    /* Truncate to 16 */
++#define ACPI_MOVE_64_TO_16(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[7];\
++                                         ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[6];}
+-#define ACPI_MOVE_64_TO_32(d, s)        ACPI_MOVE_32_TO_32(d, s)    /* Truncate to 32 */
++#define ACPI_MOVE_64_TO_32(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[7];\
++                                         ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[6];\
++                                         ((  UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[5];\
++                                         ((  UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[4];}
+ #define ACPI_MOVE_64_TO_64(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[7];\
+                                          ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[6];\
+@@ -155,7 +160,9 @@
+ /* 32-bit source, 16/32/64 destination */
+-#define ACPI_MOVE_32_TO_16(d, s)        ACPI_MOVE_16_TO_16(d, s)    /* Truncate to 16 */
++#define ACPI_MOVE_32_TO_16(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\
++                                         ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[1];}
++
+ #define ACPI_MOVE_32_TO_32(d, s)        *(UINT32 *)(void *)(d) = *(UINT32 *)(void *)(s)
+ #define ACPI_MOVE_32_TO_64(d, s)        *(UINT64 *)(void *)(d) = *(UINT32 *)(void *)(s)
+diff -up acpica-unix2-20140424/source/include/platform/aclinux.h.debian-big_endian acpica-unix2-20140424/source/include/platform/aclinux.h
+--- acpica-unix2-20140424/source/include/platform/aclinux.h.debian-big_endian  2014-04-24 11:49:06.000000000 -0400
++++ acpica-unix2-20140424/source/include/platform/aclinux.h    2014-06-06 20:44:28.781825238 -0400
+@@ -167,6 +167,7 @@
+ #include <stdlib.h>
+ #include <ctype.h>
+ #include <unistd.h>
++#include <endian.h>
+ /* Define/disable kernel-specific declarators */
+@@ -179,8 +180,7 @@
+ #define ACPI_FLUSH_CPU_CACHE()
+ #define ACPI_CAST_PTHREAD_T(Pthread) ((ACPI_THREAD_ID) (Pthread))
+-#if defined(__ia64__)    || defined(__x86_64__) ||\
+-    defined(__aarch64__) || defined(__PPC64__)
++#if __SIZEOF_LONG__ == 8
+ #define ACPI_MACHINE_WIDTH          64
+ #define COMPILER_DEPENDENT_INT64    long
+ #define COMPILER_DEPENDENT_UINT64   unsigned long
+@@ -191,6 +191,10 @@
+ #define ACPI_USE_NATIVE_DIVIDE
+ #endif
++#if __BYTE_ORDER == __BIG_ENDIAN
++#define ACPI_BIG_ENDIAN
++#endif
++
+ #ifndef __cdecl
+ #define __cdecl
+ #endif
diff --git a/debian-unaligned.patch b/debian-unaligned.patch
new file mode 100644 (file)
index 0000000..a042148
--- /dev/null
@@ -0,0 +1,163 @@
+Patch carried over from the prior iasl package and updated.  This allows
+for builds on systems requiring aligned memory access. Please see
+http://lists.acpica.org/pipermail/devel/2010-July/000159.html.  Resolves
+BZ#865013 and BZ#856856.
+--
+
+Add more platforms to the list of the ones requiring aligned memory access.
+Also fix callsites where wrong assumptions where made in terms of aligment.
+
+Signed-off-by: Mattia Dongili <malattia@linux.it>
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+---
+ source/compiler/asltree.c             | 15 ++++++++++-----
+ source/components/executer/exoparg2.c | 12 +++++++++---
+ source/include/actypes.h              | 26 +++++++++++++-------------
+ 3 file modificati, 32 inserzioni(+), 21 rimozioni(-)
+
+diff --git a/source/compiler/asltree.c b/source/compiler/asltree.c
+index ebf87f3..fd859d7 100644
+--- a/source/compiler/asltree.c
++++ b/source/compiler/asltree.c
+@@ -782,28 +592,31 @@ TrCreateValuedLeafNode (
+         "\nCreateValuedLeafNode  Ln/Col %u/%u NewNode %p  Op %s  Value %8.8X%8.8X  ",
+         Op->Asl.LineNumber, Op->Asl.Column, Op, UtGetOpName(ParseOpcode),
+         ACPI_FORMAT_UINT64 (Value));
+-    Op->Asl.Value.Integer = Value;
+     switch (ParseOpcode)
+     {
+     case PARSEOP_STRING_LITERAL:
+
+-        DbgPrint (ASL_PARSE_OUTPUT, "STRING->%s", Value);
++        Op->Asl.Value.String = (ACPI_STRING) (ACPI_SIZE) Value;
++        DbgPrint (ASL_PARSE_OUTPUT, "STRING->%s", Op->Asl.Value.String);
+         break;
+     case PARSEOP_NAMESEG:
+
+-        DbgPrint (ASL_PARSE_OUTPUT, "NAMESEG->%s", Value);
++        Op->Asl.Value.String = (ACPI_STRING) (ACPI_SIZE) Value;
++        DbgPrint (ASL_PARSE_OUTPUT, "NAMESEG->%s", Op->Asl.Value.String);
+         break;
+     case PARSEOP_NAMESTRING:
+
+-        DbgPrint (ASL_PARSE_OUTPUT, "NAMESTRING->%s", Value);
++        Op->Asl.Value.String = (ACPI_STRING) (ACPI_SIZE) Value;
++        DbgPrint (ASL_PARSE_OUTPUT, "NAMESTRING->%s", Op->Asl.Value.String);
+         break;
+     case PARSEOP_EISAID:
+
+-        DbgPrint (ASL_PARSE_OUTPUT, "EISAID->%s", Value);
++        Op->Asl.Value.String = (ACPI_STRING) (ACPI_SIZE) Value;
++        DbgPrint (ASL_PARSE_OUTPUT, "EISAID->%s", Op->Asl.Value.String);
+         break;
+     case PARSEOP_METHOD:
+@@ -813,11 +622,13 @@ TrCreateValuedLeafNode (
+     case PARSEOP_INTEGER:
+
++        Op->Asl.Value.Integer = Value;
+         DbgPrint (ASL_PARSE_OUTPUT, "INTEGER");
+         break;
+     default:
+
++        Op->Asl.Value.Integer = Value;
+         break;
+     }
+diff --git a/source/components/executer/exoparg2.c b/source/components/executer/exoparg2.c
+index e55f40c..ed5b1fd 100644
+--- a/source/components/executer/exoparg2.c
++++ b/source/components/executer/exoparg2.c
+@@ -172,6 +176,8 @@ AcpiExOpcode_2A_2T_1R (
+     ACPI_OPERAND_OBJECT     **Operand = &WalkState->Operands[0];
+     ACPI_OPERAND_OBJECT     *ReturnDesc1 = NULL;
+     ACPI_OPERAND_OBJECT     *ReturnDesc2 = NULL;
++    UINT64                  ReturnValue1 = 0;
++    UINT64                  ReturnValue2 = 0;
+     ACPI_STATUS             Status;
+@@ -205,8 +211,10 @@ AcpiExOpcode_2A_2T_1R (
+         Status = AcpiUtDivide (Operand[0]->Integer.Value,
+                                Operand[1]->Integer.Value,
+-                               &ReturnDesc1->Integer.Value,
+-                               &ReturnDesc2->Integer.Value);
++                               &ReturnValue1, &ReturnValue2);
++        ReturnDesc1->Integer.Value = ReturnValue1;
++        ReturnDesc2->Integer.Value = ReturnValue2;
++
+         if (ACPI_FAILURE (Status))
+         {
+             goto Cleanup;
+@@ -280,6 +285,7 @@ AcpiExOpcode_2A_1T_1R (
+     ACPI_OPERAND_OBJECT     **Operand = &WalkState->Operands[0];
+     ACPI_OPERAND_OBJECT     *ReturnDesc = NULL;
+     UINT64                  Index;
++    UINT64                  ReturnValue = 0;
+     ACPI_STATUS             Status = AE_OK;
+     ACPI_SIZE               Length = 0;
+@@ -323,7 +333,8 @@ AcpiExOpcode_2A_1T_1R (
+         Status = AcpiUtDivide (Operand[0]->Integer.Value,
+                                Operand[1]->Integer.Value,
+                                NULL,
+-                               &ReturnDesc->Integer.Value);
++                               &ReturnValue);
++        ReturnDesc->Integer.Value = ReturnValue;
+         break;
+     case AML_CONCAT_OP: /* Concatenate (Data1, Data2, Result) */
+diff --git a/source/include/actypes.h b/source/include/actypes.h
+index 07fb7d5..08bdf2f 100644
+--- a/source/include/actypes.h
++++ b/source/include/actypes.h
+@@ -143,6 +156,19 @@ typedef COMPILER_DEPENDENT_INT64        INT64;
+  */
+ #define ACPI_THREAD_ID                  UINT64
++/*
++ * In the case of the Itanium Processor Family (IPF), the hardware does not
++ * support misaligned memory transfers. Set the MISALIGNMENT_NOT_SUPPORTED flag
++ * to indicate that special precautions must be taken to avoid alignment faults.
++ * (IA64 or ia64 is currently used by existing compilers to indicate IPF.)
++ *
++ * Note: EM64T and other X86-64 processors support misaligned transfers,
++ * so there is no need to define this flag.
++ */
++#if defined (__IA64__) || defined (__ia64__) || defined(__alpha__) || defined(__sparc__) || defined(__hppa__) || defined(__arm__)
++#define ACPI_MISALIGNMENT_NOT_SUPPORTED
++#endif
++
+ /*******************************************************************************
+  *
+@@ -169,19 +182,6 @@ typedef UINT64                          ACPI_PHYSICAL_ADDRESS;
+ #define ACPI_SIZE_MAX                   ACPI_UINT64_MAX
+ #define ACPI_USE_NATIVE_DIVIDE          /* Has native 64-bit integer support */
+-/*
+- * In the case of the Itanium Processor Family (IPF), the hardware does not
+- * support misaligned memory transfers. Set the MISALIGNMENT_NOT_SUPPORTED flag
+- * to indicate that special precautions must be taken to avoid alignment faults.
+- * (IA64 or ia64 is currently used by existing compilers to indicate IPF.)
+- *
+- * Note: EM64T and other X86-64 processors support misaligned transfers,
+- * so there is no need to define this flag.
+- */
+-#if defined (__IA64__) || defined (__ia64__)
+-#define ACPI_MISALIGNMENT_NOT_SUPPORTED
+-#endif
+-
+ /*******************************************************************************
+  *
+-- 
+1.7.12.1
+
diff --git a/name-miscompare.patch b/name-miscompare.patch
new file mode 100644 (file)
index 0000000..c7b136f
--- /dev/null
@@ -0,0 +1,27 @@
+On big-endian machines, a test case looking for the methods _L1D and _E1D
+in the same scope would fail (see tests/misc/badcode.asl:184).  The names
+to be compared were being treated as 32-bit ints, and not strings.  Hence,
+the characters were re-ordered incorrectly, mismatching the assumptions
+made in the remainder of the function.
+
+diff -urN acpica-unix2-20130214/source/compiler/aslanalyze.c acpica-unix2-20130214-names/source/compiler/aslanalyze.c
+--- acpica-unix2-20130214/source/compiler/aslanalyze.c 2013-03-21 17:31:25.803324990 -0600
++++ acpica-unix2-20130214-names/source/compiler/aslanalyze.c   2013-03-21 17:43:45.357616802 -0600
+@@ -445,7 +445,7 @@
+     /* Need a null-terminated string version of NameSeg */
+-    ACPI_MOVE_32_TO_32 (Name, &Op->Asl.NameSeg);
++    ACPI_MOVE_NAME (Name, &Op->Asl.NameSeg);
+     Name[ACPI_NAME_SIZE] = 0;
+     /*
+@@ -472,7 +472,7 @@
+      * We are now sure we have an _Lxx or _Exx.
+      * Create the target name that would cause collision (Flip E/L)
+      */
+-    ACPI_MOVE_32_TO_32 (Target, Name);
++    ACPI_MOVE_NAME (Target, Name);
+     /* Inject opposite letter ("L" versus "E") */
diff --git a/re-enable-big-endian.patch b/re-enable-big-endian.patch
new file mode 100644 (file)
index 0000000..9c1e86e
--- /dev/null
@@ -0,0 +1,26 @@
+Re-enable use of these tools on big-endian machines.
+
+Al Stone <ahs3@redhat.com>
+
+diff -Naur acpica-unix2-20140424/source/compiler/aslmain.c acpica-unix2-20140424-patch/source/compiler/aslmain.c
+--- acpica-unix2-20140424/source/compiler/aslmain.c    2014-04-24 09:48:59.000000000 -0600
++++ acpica-unix2-20140424-patch/source/compiler/aslmain.c      2014-05-22 12:55:47.634904320 -0600
+@@ -331,18 +319,6 @@
+     int                     ReturnStatus = 0;
+-    /*
+-     * Big-endian machines are not currently supported. ACPI tables must
+-     * be little-endian, and support for big-endian machines needs to
+-     * be implemented.
+-     */
+-    if (AcpiIsBigEndianMachine ())
+-    {
+-        fprintf (stderr,
+-            "iASL is not currently supported on big-endian machines.\n");
+-        return (-1);
+-    }
+-
+     AcpiOsInitialize ();
+     ACPI_DEBUG_INITIALIZE (); /* For debug version only */
This page took 0.499611 seconds and 4 git commands to generate.