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 #include #include +#include /* 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