Merge ACPICA 20160527.

Relnotes:	yes
This commit is contained in:
Jung-uk Kim 2016-05-27 22:16:46 +00:00
commit 3920312eeb
13 changed files with 112 additions and 59 deletions

View file

@ -1,3 +1,36 @@
----------------------------------------
27 May 2016. Summary of changes for version 20160527:
This release is available at https://acpica.org/downloads
1) ACPICA kernel-resident subsystem:
Temporarily reverted the new arbitrary bit length/alignment support in
AcpiHwRead/AcpiHwWrite for the Generic Address Structure. There have been
a number of regressions with the new code that need to be fully resolved
and tested before this support can be finally integrated into ACPICA.
Apologies for any inconveniences these issues may have caused.
The ACPI message macros are not configurable (ACPI_MSG_ERROR,
ACPI_MSG_EXCEPTION, ACPI_MSG_WARNING, ACPI_MSG_INFO, ACPI_MSG_BIOS_ERROR,
and ACPI_MSG_BIOS_WARNING). Lv Zheng.
Fixed a couple of GCC warnings associated with the use of the -Wcast-qual
option. Adds a new return macro, return_STR. Junk-uk Kim.
Example Code and Data Size: These are the sizes for the OS-independent
acpica.lib produced by the Microsoft Visual C++ 9.0 32-bit compiler. The
debug version of the code includes the debug output trace mechanism and
has a much larger code and data size.
Current Release:
Non-Debug Version: 136.8K Code, 51.6K Data, 188.4K Total
Debug Version: 201.5K Code, 82.2K Data, 283.7K Total
Previous Release:
Non-Debug Version: 137.4K Code, 52.6K Data, 190.0K Total
Debug Version: 200.9K Code, 82.2K Data, 283.1K Total
----------------------------------------
22 April 2016. Summary of changes for version 20160422:

View file

@ -541,9 +541,13 @@ AslDoOptions (
case 'e':
/* Disable External opcode generation */
/* iASL: Disable External opcode generation */
Gbl_DoExternals = FALSE;
/* Disassembler: Emit embedded external operators */
AcpiGbl_DmEmitExternalOpcodes = TRUE;
break;
case 'f':

View file

@ -161,10 +161,10 @@ AcpiDbDecodeInternalObject (
case ACPI_TYPE_STRING:
AcpiOsPrintf ("(%u) \"%.24s",
AcpiOsPrintf ("(%u) \"%.60s",
ObjDesc->String.Length, ObjDesc->String.Pointer);
if (ObjDesc->String.Length > 24)
if (ObjDesc->String.Length > 60)
{
AcpiOsPrintf ("...");
}

View file

@ -971,7 +971,16 @@ AcpiDmDisassembleOneOp (
case AML_EXTERNAL_OP:
break;
if (AcpiGbl_DmEmitExternalOpcodes)
{
AcpiOsPrintf ("/* Opcode 0x15 */ ");
/* Fallthrough */
}
else
{
break;
}
default:

View file

@ -462,21 +462,26 @@ AcpiDmDescendingOp (
{
NextOp->Common.DisasmFlags |= ACPI_PARSEOP_PARAMETER_LIST;
/*
* A Zero predicate indicates the possibility of one or more
* External() opcodes within the If() block.
*/
if (NextOp->Common.AmlOpcode == AML_ZERO_OP)
/* Don't emit the actual embedded externals unless asked */
if (!AcpiGbl_DmEmitExternalOpcodes)
{
NextOp2 = NextOp->Common.Next;
if (NextOp2 &&
(NextOp2->Common.AmlOpcode == AML_EXTERNAL_OP))
/*
* A Zero predicate indicates the possibility of one or more
* External() opcodes within the If() block.
*/
if (NextOp->Common.AmlOpcode == AML_ZERO_OP)
{
/* Ignore the If 0 block and all children */
NextOp2 = NextOp->Common.Next;
Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
return (AE_CTRL_DEPTH);
if (NextOp2 &&
(NextOp2->Common.AmlOpcode == AML_EXTERNAL_OP))
{
/* Ignore the If 0 block and all children */
Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
return (AE_CTRL_DEPTH);
}
}
}
}

View file

@ -603,12 +603,14 @@ AcpiDsCreateOperand (
}
else if (ParentOp->Common.AmlOpcode == AML_EXTERNAL_OP)
{
/* TBD: May only be temporary */
ObjDesc = AcpiUtCreateStringObject ((ACPI_SIZE) NameLength);
strncpy (ObjDesc->String.Pointer, NameString, NameLength);
Status = AE_OK;
/*
* This opcode should never appear here. It is used only
* by AML disassemblers and is surrounded by an If(0)
* by the ASL compiler.
*
* Therefore, if we see it here, it is a serious error.
*/
Status = AE_AML_BAD_OPCODE;
}
else
{

View file

@ -946,9 +946,20 @@ AcpiExInsertIntoField (
AccessBitWidth = ACPI_MUL_8 (ObjDesc->CommonField.AccessByteWidth);
/* Create the bitmasks used for bit insertion */
/*
* Create the bitmasks used for bit insertion.
* Note: This if/else is used to bypass compiler differences with the
* shift operator
*/
if (AccessBitWidth == ACPI_INTEGER_BIT_SIZE)
{
WidthMask = ACPI_UINT64_MAX;
}
else
{
WidthMask = ACPI_MASK_BITS_ABOVE (AccessBitWidth);
}
WidthMask = ACPI_MASK_BITS_ABOVE_64 (AccessBitWidth);
Mask = WidthMask &
ACPI_MASK_BITS_BELOW (ObjDesc->CommonField.StartFieldBitOffset);

View file

@ -91,10 +91,6 @@ AcpiHwValidateRegister (
UINT8 MaxBitWidth,
UINT64 *Address)
{
UINT8 BitWidth;
UINT8 BitEnd;
UINT8 AccessWidth;
/* Must have a valid pointer to a GAS structure */
@ -124,28 +120,24 @@ AcpiHwValidateRegister (
return (AE_SUPPORT);
}
/* Validate the AccessWidth */
/* Validate the BitWidth */
if (Reg->AccessWidth > 4)
if ((Reg->BitWidth != 8) &&
(Reg->BitWidth != 16) &&
(Reg->BitWidth != 32) &&
(Reg->BitWidth != MaxBitWidth))
{
ACPI_ERROR ((AE_INFO,
"Unsupported register access width: 0x%X", Reg->AccessWidth));
"Unsupported register bit width: 0x%X", Reg->BitWidth));
return (AE_SUPPORT);
}
/* Validate the BitWidth, convert AccessWidth into number of bits */
/* Validate the BitOffset. Just a warning for now. */
BitEnd = Reg->BitOffset + Reg->BitWidth;
AccessWidth = Reg->AccessWidth ? Reg->AccessWidth : 1;
AccessWidth = 1 << (AccessWidth + 2);
BitWidth = ACPI_ROUND_UP (BitEnd, AccessWidth) -
ACPI_ROUND_DOWN (Reg->BitOffset, AccessWidth);
if (MaxBitWidth < BitWidth)
if (Reg->BitOffset != 0)
{
ACPI_WARNING ((AE_INFO,
"Requested bit width 0x%X is smaller than register bit width 0x%X",
MaxBitWidth, BitWidth));
return (AE_SUPPORT);
"Unsupported register bit offset: 0x%X", Reg->BitOffset));
}
return (AE_OK);

View file

@ -381,7 +381,7 @@ AcpiNsDumpOneObject (
case ACPI_TYPE_STRING:
AcpiOsPrintf ("Len %.2X ", ObjDesc->String.Length);
AcpiUtPrintString (ObjDesc->String.Pointer, 32);
AcpiUtPrintString (ObjDesc->String.Pointer, 80);
AcpiOsPrintf ("\n");
break;

View file

@ -321,6 +321,7 @@ ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_IgnoreNoopOperator, FALSE);
ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_CstyleDisassembly, TRUE);
ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_ForceAmlDisassembly, FALSE);
ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DmOpt_Verbose, TRUE);
ACPI_INIT_GLOBAL (BOOLEAN, AcpiGbl_DmEmitExternalOpcodes, FALSE);
ACPI_GLOBAL (BOOLEAN, AcpiGbl_DmOpt_Disasm);
ACPI_GLOBAL (BOOLEAN, AcpiGbl_DmOpt_Listing);

View file

@ -264,30 +264,14 @@
#define ACPI_IS_MISALIGNED(value) (((ACPI_SIZE) value) & (sizeof(ACPI_SIZE)-1))
/* Generic (power-of-two) rounding */
#define ACPI_IS_POWER_OF_TWO(a) (((a) & ((a) - 1)) == 0)
/*
* Bitmask creation
* Bit positions start at zero.
* MASK_BITS_ABOVE creates a mask starting AT the position and above
* MASK_BITS_BELOW creates a mask starting one bit BELOW the position
* MASK_BITS_ABOVE/BELOW accpets a bit offset to create a mask
* MASK_BITS_ABOVE/BELOW_32/64 accpets a bit width to create a mask
* Note: The ACPI_INTEGER_BIT_SIZE check is used to bypass compiler
* differences with the shift operator
*/
#define ACPI_MASK_BITS_ABOVE(position) (~((ACPI_UINT64_MAX) << ((UINT32) (position))))
#define ACPI_MASK_BITS_BELOW(position) ((ACPI_UINT64_MAX) << ((UINT32) (position)))
#define ACPI_MASK_BITS_ABOVE_32(width) ((UINT32) ACPI_MASK_BITS_ABOVE(width))
#define ACPI_MASK_BITS_BELOW_32(width) ((UINT32) ACPI_MASK_BITS_BELOW(width))
#define ACPI_MASK_BITS_ABOVE_64(width) ((width) == ACPI_INTEGER_BIT_SIZE ? \
ACPI_UINT64_MAX : \
ACPI_MASK_BITS_ABOVE(width))
#define ACPI_MASK_BITS_BELOW_64(width) ((width) == ACPI_INTEGER_BIT_SIZE ? \
(UINT64) 0 : \
ACPI_MASK_BITS_BELOW(width))
/* Bitfields within ACPI registers */

View file

@ -46,7 +46,7 @@
/* Current ACPICA subsystem version in YYYYMMDD format */
#define ACPI_CA_VERSION 0x20160422
#define ACPI_CA_VERSION 0x20160527
#include <contrib/dev/acpica/include/acconfig.h>
#include <contrib/dev/acpica/include/actypes.h>

View file

@ -115,13 +115,25 @@ extern const char *AcpiGbl_PtDecode[];
/*
* Common error message prefixes
*/
#ifndef ACPI_MSG_ERROR
#define ACPI_MSG_ERROR "ACPI Error: "
#endif
#ifndef ACPI_MSG_EXCEPTION
#define ACPI_MSG_EXCEPTION "ACPI Exception: "
#endif
#ifndef ACPI_MSG_WARNING
#define ACPI_MSG_WARNING "ACPI Warning: "
#endif
#ifndef ACPI_MSG_INFO
#define ACPI_MSG_INFO "ACPI: "
#endif
#ifndef ACPI_MSG_BIOS_ERROR
#define ACPI_MSG_BIOS_ERROR "ACPI BIOS Error (bug): "
#endif
#ifndef ACPI_MSG_BIOS_WARNING
#define ACPI_MSG_BIOS_WARNING "ACPI BIOS Warning (bug): "
#endif
/*
* Common message suffix