From owner-svn-src-head@freebsd.org Fri Mar 27 00:29:48 2020 Return-Path: Delivered-To: svn-src-head@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 7B0F826589B; Fri, 27 Mar 2020 00:29:48 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48pN630r0lz4bgP; Fri, 27 Mar 2020 00:29:47 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3CA10FD99; Fri, 27 Mar 2020 00:29:39 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id 02R0Tdrx062406; Fri, 27 Mar 2020 00:29:39 GMT (envelope-from jkim@FreeBSD.org) Received: (from jkim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id 02R0TX25062379; Fri, 27 Mar 2020 00:29:33 GMT (envelope-from jkim@FreeBSD.org) Message-Id: <202003270029.02R0TX25062379@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jkim set sender to jkim@FreeBSD.org using -f From: Jung-uk Kim Date: Fri, 27 Mar 2020 00:29:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r359346 - in head/sys: amd64/vmm/amd contrib/dev/acpica contrib/dev/acpica/common contrib/dev/acpica/compiler contrib/dev/acpica/components/debugger contrib/dev/acpica/components/dispat... X-SVN-Group: head X-SVN-Commit-Author: jkim X-SVN-Commit-Paths: in head/sys: amd64/vmm/amd contrib/dev/acpica contrib/dev/acpica/common contrib/dev/acpica/compiler contrib/dev/acpica/components/debugger contrib/dev/acpica/components/dispatcher contrib/dev/acpica/c... X-SVN-Commit-Revision: 359346 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 27 Mar 2020 00:29:49 -0000 Author: jkim Date: Fri Mar 27 00:29:33 2020 New Revision: 359346 URL: https://svnweb.freebsd.org/changeset/base/359346 Log: Merge ACPICA 20200326. Modified: head/sys/amd64/vmm/amd/amdvi_priv.h head/sys/amd64/vmm/amd/ivrs_drv.c head/sys/contrib/dev/acpica/changes.txt head/sys/contrib/dev/acpica/common/ahtable.c head/sys/contrib/dev/acpica/common/dmtable.c head/sys/contrib/dev/acpica/common/dmtbdump2.c head/sys/contrib/dev/acpica/common/dmtbinfo2.c head/sys/contrib/dev/acpica/common/dmtbinfo3.c head/sys/contrib/dev/acpica/compiler/aslcompile.c head/sys/contrib/dev/acpica/compiler/aslcompiler.h head/sys/contrib/dev/acpica/compiler/aslcompiler.l head/sys/contrib/dev/acpica/compiler/asldefine.h head/sys/contrib/dev/acpica/compiler/aslerror.c head/sys/contrib/dev/acpica/compiler/aslglobal.h head/sys/contrib/dev/acpica/compiler/aslload.c head/sys/contrib/dev/acpica/compiler/asloptions.c head/sys/contrib/dev/acpica/compiler/asltypes.h head/sys/contrib/dev/acpica/compiler/dtcompiler.h head/sys/contrib/dev/acpica/compiler/dtcompilerparser.l head/sys/contrib/dev/acpica/compiler/dtcompilerparser.y head/sys/contrib/dev/acpica/compiler/dtparser.l head/sys/contrib/dev/acpica/compiler/dttable1.c head/sys/contrib/dev/acpica/compiler/dtutils.c head/sys/contrib/dev/acpica/compiler/prparser.l head/sys/contrib/dev/acpica/components/debugger/dbinput.c head/sys/contrib/dev/acpica/components/debugger/dbxface.c head/sys/contrib/dev/acpica/components/dispatcher/dswexec.c head/sys/contrib/dev/acpica/components/dispatcher/dswload.c head/sys/contrib/dev/acpica/components/dispatcher/dswload2.c head/sys/contrib/dev/acpica/components/hardware/hwsleep.c head/sys/contrib/dev/acpica/components/namespace/nsnames.c head/sys/contrib/dev/acpica/components/utilities/utdecode.c head/sys/contrib/dev/acpica/components/utilities/utdelete.c head/sys/contrib/dev/acpica/include/acdisasm.h head/sys/contrib/dev/acpica/include/acnamesp.h head/sys/contrib/dev/acpica/include/acpixf.h head/sys/contrib/dev/acpica/include/actbinfo.h head/sys/contrib/dev/acpica/include/actbl2.h head/sys/contrib/dev/acpica/include/actbl3.h head/sys/contrib/dev/acpica/include/acuuid.h Directory Properties: head/sys/contrib/dev/acpica/ (props changed) Modified: head/sys/amd64/vmm/amd/amdvi_priv.h ============================================================================== --- head/sys/amd64/vmm/amd/amdvi_priv.h Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/amd64/vmm/amd/amdvi_priv.h Fri Mar 27 00:29:33 2020 (r359346) @@ -357,33 +357,15 @@ struct amdvi_domain { }; /* - * I/O Virtualization Hardware Definition Block (IVHD) type 0x10 (legacy) - * uses ACPI_IVRS_HARDWARE define in contrib/dev/acpica/include/actbl2.h - * New IVHD types 0x11 and 0x40 as defined in AMD IOMMU spec[48882] are missing in - * ACPI code. These new types add extra field EFR(Extended Feature Register). - * XXX : Use definition from ACPI when it is available. - */ -typedef struct acpi_ivrs_hardware_efr_sup -{ - ACPI_IVRS_HEADER Header; - UINT16 CapabilityOffset; /* Offset for IOMMU control fields */ - UINT64 BaseAddress; /* IOMMU control registers */ - UINT16 PciSegmentGroup; - UINT16 Info; /* MSI number and unit ID */ - UINT32 Attr; /* IOMMU Feature */ - UINT64 ExtFR; /* IOMMU Extended Feature */ - UINT64 Reserved; /* v1 feature or v2 attribute */ -} __attribute__ ((__packed__)) ACPI_IVRS_HARDWARE_EFRSUP; -CTASSERT(sizeof(ACPI_IVRS_HARDWARE_EFRSUP) == 40); - -/* * Different type of IVHD. * XXX: Use AcpiIvrsType once new IVHD types are available. */ enum IvrsType { - IVRS_TYPE_HARDWARE_LEGACY = 0x10, /* Legacy without EFRi support. */ - IVRS_TYPE_HARDWARE_EFR = 0x11, /* With EFR support. */ + IVRS_TYPE_HARDWARE_LEGACY = ACPI_IVRS_TYPE_HARDWARE1, + /* Legacy without EFRi support. */ + IVRS_TYPE_HARDWARE_EFR = ACPI_IVRS_TYPE_HARDWARE2, + /* With EFR support. */ IVRS_TYPE_HARDWARE_MIXED = 0x40, /* Mixed with EFR support. */ }; Modified: head/sys/amd64/vmm/amd/ivrs_drv.c ============================================================================== --- head/sys/amd64/vmm/amd/ivrs_drv.c Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/amd64/vmm/amd/ivrs_drv.c Fri Mar 27 00:29:33 2020 (r359346) @@ -54,7 +54,7 @@ int ivhd_count; /* Number of IVHD header. */ * Cached IVHD header list. * Single entry for each IVHD, filtered the legacy one. */ -ACPI_IVRS_HARDWARE *ivhd_hdrs[10]; +ACPI_IVRS_HARDWARE1 *ivhd_hdrs[10]; extern int amdvi_ptp_level; /* Page table levels. */ @@ -161,7 +161,7 @@ ivrs_hdr_find_iter(ACPI_IVRS_HEADER * ivrs_hdr, void * return (1); } -static ACPI_IVRS_HARDWARE * +static ACPI_IVRS_HARDWARE1 * ivhd_find_by_index(int idx) { struct find_ivrs_hdr_args fi; @@ -171,7 +171,7 @@ ivhd_find_by_index(int idx) ivrs_hdr_iterate_tbl(ivrs_hdr_find_iter, &fi); - return ((ACPI_IVRS_HARDWARE *)fi.ptr); + return ((ACPI_IVRS_HARDWARE1 *)fi.ptr); } static void @@ -195,7 +195,7 @@ ivhd_dev_add_entry(struct amdvi_softc *softc, uint32_t * Record device attributes as suggested by BIOS. */ static int -ivhd_dev_parse(ACPI_IVRS_HARDWARE* ivhd, struct amdvi_softc *softc) +ivhd_dev_parse(ACPI_IVRS_HARDWARE1 *ivhd, struct amdvi_softc *softc) { ACPI_IVRS_DE_HEADER *de; uint8_t *p, *end; @@ -209,12 +209,12 @@ ivhd_dev_parse(ACPI_IVRS_HARDWARE* ivhd, struct amdvi_ switch (ivhd->Header.Type) { case IVRS_TYPE_HARDWARE_LEGACY: - p = (uint8_t *)ivhd + sizeof(ACPI_IVRS_HARDWARE); + p = (uint8_t *)ivhd + sizeof(ACPI_IVRS_HARDWARE1); break; case IVRS_TYPE_HARDWARE_EFR: case IVRS_TYPE_HARDWARE_MIXED: - p = (uint8_t *)ivhd + sizeof(ACPI_IVRS_HARDWARE_EFRSUP); + p = (uint8_t *)ivhd + sizeof(ACPI_IVRS_HARDWARE2); break; default: @@ -327,7 +327,7 @@ static void ivhd_identify(driver_t *driver, device_t parent) { ACPI_TABLE_IVRS *ivrs; - ACPI_IVRS_HARDWARE *ivhd; + ACPI_IVRS_HARDWARE1 *ivhd; ACPI_STATUS status; int i, count = 0; uint32_t ivrs_ivinfo; @@ -408,7 +408,7 @@ ivhd_identify(driver_t *driver, device_t parent) static int ivhd_probe(device_t dev) { - ACPI_IVRS_HARDWARE *ivhd; + ACPI_IVRS_HARDWARE1 *ivhd; int unit; if (acpi_get_handle(dev) != NULL) @@ -582,7 +582,7 @@ ivhd_print_ext_feature(device_t dev, uint64_t ext_feat } static int -ivhd_print_cap(struct amdvi_softc *softc, ACPI_IVRS_HARDWARE * ivhd) +ivhd_print_cap(struct amdvi_softc *softc, ACPI_IVRS_HARDWARE1 * ivhd) { device_t dev; int max_ptp_level; @@ -612,8 +612,8 @@ ivhd_print_cap(struct amdvi_softc *softc, ACPI_IVRS_HA static int ivhd_attach(device_t dev) { - ACPI_IVRS_HARDWARE *ivhd; - ACPI_IVRS_HARDWARE_EFRSUP *ivhd_efr; + ACPI_IVRS_HARDWARE1 *ivhd; + ACPI_IVRS_HARDWARE2 *ivhd_efr; struct amdvi_softc *softc; int status, unit; @@ -637,7 +637,7 @@ ivhd_attach(device_t dev) * On lgeacy IVHD type(0x10), it is documented as feature * but in newer type it is attribute. */ - softc->ivhd_feature = ivhd->Reserved; + softc->ivhd_feature = ivhd->FeatureReporting; /* * PCI capability has more capabilities that are not part of IVRS. */ @@ -648,12 +648,11 @@ ivhd_attach(device_t dev) softc->event_msix = ivhd->Info & 0x1F; #endif switch (ivhd->Header.Type) { - case IVRS_TYPE_HARDWARE_EFR: - case IVRS_TYPE_HARDWARE_MIXED: - ivhd_efr = (ACPI_IVRS_HARDWARE_EFRSUP *)ivhd; - softc->ext_feature = ivhd_efr->ExtFR; - break; - + case IVRS_TYPE_HARDWARE_EFR: + case IVRS_TYPE_HARDWARE_MIXED: + ivhd_efr = (ACPI_IVRS_HARDWARE2 *)ivhd; + softc->ext_feature = ivhd_efr->EfrRegisterImage; + break; } softc->ctrl = (struct amdvi_ctrl *) PHYS_TO_DMAP(ivhd->BaseAddress); Modified: head/sys/contrib/dev/acpica/changes.txt ============================================================================== --- head/sys/contrib/dev/acpica/changes.txt Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/changes.txt Fri Mar 27 00:29:33 2020 (r359346) @@ -1,4 +1,99 @@ ---------------------------------------- +26 March 2020. Summary of changes for version 20200326: + + +1) ACPICA kernel-resident subsystem: + +Performed a code clean-up to prevent build errors on early versions of +GCC-10. + +Added the NHLT table signature. iASL data table compiler/disassembler +support for this table is coming soon. + + +2) iASL Compiler/Disassembler and ACPICA tools: + +AcpiExec: Fixed several problems with the namespace initialization file +(-fi option). Includes fixes to prevent AE_ALREADY_EXISTS +errors, several seg faults, and enhancements to line parsing within the +init file. In addition, each object found in the init file and it's new +value is displayed, as well as any such entries that do not have a +corresponding name in the namespace. For reference, the syntax for the +various supported data types are presented below: + PCHG 0x777788889999BBBB // Integer + \DEV1.STR1 "XYZ" // String + BUF1 (88 99 AA) // Buffer + PKG1 [0x1111 0x2222] // Package + \BF1 0x7980 // BufferField + RCRV 0x0123456789ABCDEF // Field Unit + +iASL: Added a custom iASL macro __EXPECT__(iASL-Error-Code). This macro +can be used anywhere in a given ASL file to configure iASL to expect an +iASL compiler error code on the line where this macro was placed. If the +error code does not exist, an error is generated. This is intended to be +used for ACPICA's ASL test suite, but can be used by ASL developers as +well. + +iASL: table compiler: Implemented IVRS IVHD type 11h parsing. The AMD +IVRS table parsing supported only IVHD type 10h structures. Parsing an +IVHD type 11h caused the iasl to report unknown subtable type. Add +necessary structure definition for IVHD type 11h and apply correct +parsing method based on subtable type. Micha? ?ygowski. + +iASL: table compiler: Fixed IVRS table IVHD type 10h reserved field name +According to AMD IOMMU Specification Revision 3.05 the reserved field +should be IOMMU Feature Reporting. Change the name of the field to the +correct one. Micha? ?ygowski. + +acpiexec: removed redeclaration of AcpiGbl_DbOpt_NoRegionSupport. Patch +based on suggestions by David Seifert and Benjamin Berg. + +iASL: table compiler: removed an unused variable (DtCompilerParserResult) +causing linking errors. Patch based on suggestions by David Seifert and +Benjamin Berg. + +iASL: table compiler: make LexBuffer static to avoid linking errors in +newer compilers. Patch based on suggestions by David Seifert and Benjamin +Berg. + +iASL: fixed type matching between External and Named objects. External +object types can only be expressed with ACPI object type values that are +defined in the ACPI spec. However, iASL uses ACPI object type values that +are local to ACPICA in addition to the values defined in the ACPI spec. +This change implements type matching to map some object type values +specific to ACPICA to ones that are defined in the ACPI spec. + +iASL: Dropped the type mismatch compiler error that can arise from +External declarations to a warning. This warning can occur when there is +a type difference between the external declaration and the actual object +declaration (when compiling multiple files/modules simultaneously). + +iASL: removed an incorrect error message regarding externals. This change +removes an incorrect error that is emitted when a duplicate external +declaration does not contain a type that opens a scope. This is incorrect +because the duplicate external with conflicting types are already caught +by iASL and it doesn't make any sense to enforce what this conflicting +type should be. + +AcpiXtract: fix AX_IS_TABLE_BLOCK_HEADER macro. This macro needs to be +surrounded by parens. Otherwise, a logical statement that applies a +logical not operator to this macro could result in a computation that +applies the operator to the left side of the logical and but not the +right. Reported-by: John Levon + +Fixed a problem with the local version of sprint(): On 32-bit, the +provided sprintf() is non-functional: with a size of ACPI_UINT32_MAX, +String + Size will wrap, meaning End < Start, and +AcpiUtBoundStringOutput() will never output anything as a result. The +symptom seen of this was acpixtract failing to output anything -- with a +custom build that included utprint.c. Signed-off-by: John Levon + + +iASL: Changed the "PlatformCommChannel" ASL keyword to "PCC", as per the +ACPI specification. + + +---------------------------------------- 14 February 2020. Summary of changes for version 20200214: Modified: head/sys/contrib/dev/acpica/common/ahtable.c ============================================================================== --- head/sys/contrib/dev/acpica/common/ahtable.c Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/common/ahtable.c Fri Mar 27 00:29:33 2020 (r359346) @@ -258,7 +258,7 @@ const AH_TABLE AcpiGbl_SupportedTables[] = {ACPI_SIG_WDDT, "Watchdog Description Table"}, {ACPI_SIG_WDRT, "Watchdog Resource Table"}, {ACPI_SIG_WPBT, "Windows Platform Binary Table"}, - {ACPI_SIG_WSMT, "Windows SMM Security Migrations Table"}, + {ACPI_SIG_WSMT, "Windows SMM Security Mitigations Table"}, {ACPI_SIG_XENV, "Xen Environment table"}, {ACPI_SIG_XSDT, "Extended System Description Table"}, {NULL, NULL} Modified: head/sys/contrib/dev/acpica/common/dmtable.c ============================================================================== --- head/sys/contrib/dev/acpica/common/dmtable.c Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/common/dmtable.c Fri Mar 27 00:29:33 2020 (r359346) @@ -1676,7 +1676,8 @@ AcpiDmDumpTable ( Temp8 = *Target; switch (Temp8) { - case ACPI_IVRS_TYPE_HARDWARE: + case ACPI_IVRS_TYPE_HARDWARE1: + case ACPI_IVRS_TYPE_HARDWARE2: Name = AcpiDmIvrsSubnames[0]; break; Modified: head/sys/contrib/dev/acpica/common/dmtbdump2.c ============================================================================== --- head/sys/contrib/dev/acpica/common/dmtbdump2.c Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/common/dmtbdump2.c Fri Mar 27 00:29:33 2020 (r359346) @@ -475,11 +475,16 @@ AcpiDmDumpIvrs ( switch (Subtable->Type) { - case ACPI_IVRS_TYPE_HARDWARE: + case ACPI_IVRS_TYPE_HARDWARE1: InfoTable = AcpiDmTableInfoIvrs0; break; + case ACPI_IVRS_TYPE_HARDWARE2: + + InfoTable = AcpiDmTableInfoIvrs01; + break; + case ACPI_IVRS_TYPE_MEMORY1: case ACPI_IVRS_TYPE_MEMORY2: case ACPI_IVRS_TYPE_MEMORY3: @@ -514,11 +519,21 @@ AcpiDmDumpIvrs ( /* The hardware subtable can contain multiple device entries */ - if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE) + if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE1 || + Subtable->Type == ACPI_IVRS_TYPE_HARDWARE2) { - EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE); - DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable, - sizeof (ACPI_IVRS_HARDWARE)); + if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE1) + { + EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE1); + DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable, + sizeof (ACPI_IVRS_HARDWARE1)); + } + else if (Subtable->Type == ACPI_IVRS_TYPE_HARDWARE2) + { + EntryOffset = Offset + sizeof (ACPI_IVRS_HARDWARE2); + DeviceEntry = ACPI_ADD_PTR (ACPI_IVRS_DE_HEADER, Subtable, + sizeof (ACPI_IVRS_HARDWARE2)); + } while (EntryOffset < (Offset + Subtable->Length)) { Modified: head/sys/contrib/dev/acpica/common/dmtbinfo2.c ============================================================================== --- head/sys/contrib/dev/acpica/common/dmtbinfo2.c Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/common/dmtbinfo2.c Fri Mar 27 00:29:33 2020 (r359346) @@ -403,7 +403,21 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs0[] = {ACPI_DMT_UINT64, ACPI_IVRS0_OFFSET (BaseAddress), "Base Address", 0}, {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (PciSegmentGroup), "PCI Segment Group", 0}, {ACPI_DMT_UINT16, ACPI_IVRS0_OFFSET (Info), "Virtualization Info", 0}, - {ACPI_DMT_UINT32, ACPI_IVRS0_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_IVRS0_OFFSET (FeatureReporting), "Feature Reporting", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 0x10: I/O Virtualization Hardware Definition (IVHD) Block */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoIvrs01[] = +{ + {ACPI_DMT_UINT16, ACPI_IVRS01_OFFSET (CapabilityOffset), "Capability Offset", 0}, + {ACPI_DMT_UINT64, ACPI_IVRS01_OFFSET (BaseAddress), "Base Address", 0}, + {ACPI_DMT_UINT16, ACPI_IVRS01_OFFSET (PciSegmentGroup), "PCI Segment Group", 0}, + {ACPI_DMT_UINT16, ACPI_IVRS01_OFFSET (Info), "Virtualization Info", 0}, + {ACPI_DMT_UINT32, ACPI_IVRS01_OFFSET (Attributes), "Attributes", 0}, + {ACPI_DMT_UINT64, ACPI_IVRS01_OFFSET (EfrRegisterImage), "EFR Image", 0}, + {ACPI_DMT_UINT64, ACPI_IVRS01_OFFSET (Reserved), "Reserved", 0}, ACPI_DMT_TERMINATOR }; Modified: head/sys/contrib/dev/acpica/common/dmtbinfo3.c ============================================================================== --- head/sys/contrib/dev/acpica/common/dmtbinfo3.c Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/common/dmtbinfo3.c Fri Mar 27 00:29:33 2020 (r359346) @@ -691,7 +691,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoWpbt0[] = /******************************************************************************* * - * WSMT - Windows SMM Security Migrations Table + * WSMT - Windows SMM Security Mitigations Table * ******************************************************************************/ Modified: head/sys/contrib/dev/acpica/compiler/aslcompile.c ============================================================================== --- head/sys/contrib/dev/acpica/compiler/aslcompile.c Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/compiler/aslcompile.c Fri Mar 27 00:29:33 2020 (r359346) @@ -283,6 +283,7 @@ CmDoCompile ( LsDumpParseTree (); + UtEndEvent (Event); UtEndEvent (FullCompile); return (AE_OK); Modified: head/sys/contrib/dev/acpica/compiler/aslcompiler.h ============================================================================== --- head/sys/contrib/dev/acpica/compiler/aslcompiler.h Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/compiler/aslcompiler.h Fri Mar 27 00:29:33 2020 (r359346) @@ -488,7 +488,7 @@ AslCheckExpectedExceptions ( void); ACPI_STATUS -AslExpectException ( +AslLogExpectedException ( char *MessageIdString); ACPI_STATUS @@ -501,8 +501,14 @@ AslDisableException ( BOOLEAN AslIsExceptionIgnored ( + char *Filename, + UINT32 LineNumber, UINT8 Level, UINT16 MessageId); + +void +AslLogExpectedExceptionByLine ( + char *MessageIdString); void AslCoreSubsystemError ( Modified: head/sys/contrib/dev/acpica/compiler/aslcompiler.l ============================================================================== --- head/sys/contrib/dev/acpica/compiler/aslcompiler.l Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/compiler/aslcompiler.l Fri Mar 27 00:29:33 2020 (r359346) @@ -156,7 +156,6 @@ #include #include -YYSTYPE AslCompilerlval; /* * Generation: Use the following command line: @@ -195,6 +194,7 @@ count (int type); LeadNameChar [A-Za-z_] DigitChar [0-9] +ErrorCode [(][ ]*[1-9][0-9][0-9][0-9][ ]*[)] OctalChar [0-7] HexDigitChar [A-Fa-f0-9] RootChar [\\] @@ -692,7 +692,7 @@ NamePathTail [.]{NameSeg} "IPMI" { count (0); return (PARSEOP_REGIONSPACE_IPMI); } "GeneralPurposeIo" { count (0); return (PARSEOP_REGIONSPACE_GPIO); } /* ACPI 5.0 */ "GenericSerialBus" { count (0); return (PARSEOP_REGIONSPACE_GSBUS); } /* ACPI 5.0 */ -"PlatformCommChannel" { count (0); return (PARSEOP_REGIONSPACE_PCC); } /* ACPI 5.0 */ +"PCC" { count (0); return (PARSEOP_REGIONSPACE_PCC); } /* ACPI 5.0 */ "FFixedHW" { count (0); return (PARSEOP_REGIONSPACE_FFIXEDHW); } /* ResourceTypeKeyword: Resource Usage - Resource Descriptors */ @@ -810,6 +810,22 @@ NamePathTail [.]{NameSeg} "__LINE__" { count (0); return (PARSEOP___LINE__); } "__PATH__" { count (0); return (PARSEOP___PATH__); } "__METHOD__" { count (0); return (PARSEOP___METHOD__); } +"__EXPECT__"{ErrorCode} { char *s; + int index = 0; + count (0); + while (!isdigit (AslCompilertext[index])) + { + index++; + } + + /* + * The eror code is contained inside the + * {ErrorCode} pattern. Extract it and log it + * as the expected error code. + */ + s = UtLocalCacheCalloc (ASL_ERROR_CODE_LENGTH + 1); + memcpy (s, AslCompilertext + index, ASL_ERROR_CODE_LENGTH); + AslLogExpectedExceptionByLine (s); } {NameSeg} { char *s; count (0); Modified: head/sys/contrib/dev/acpica/compiler/asldefine.h ============================================================================== --- head/sys/contrib/dev/acpica/compiler/asldefine.h Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/compiler/asldefine.h Fri Mar 27 00:29:33 2020 (r359346) @@ -227,6 +227,7 @@ #define ASL_NO_ABORT FALSE #define ASL_EOF ACPI_UINT32_MAX #define ASL_IGNORE_LINE (ACPI_UINT32_MAX -1) +#define ASL_ERROR_CODE_LENGTH 4 /* Listings */ Modified: head/sys/contrib/dev/acpica/compiler/aslerror.c ============================================================================== --- head/sys/contrib/dev/acpica/compiler/aslerror.c Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/compiler/aslerror.c Fri Mar 27 00:29:33 2020 (r359346) @@ -162,6 +162,8 @@ AeAddToErrorLog ( static BOOLEAN AslIsExceptionExpected ( + char *Filename, + UINT32 LineNumber, UINT8 Level, UINT16 MessageId); @@ -170,7 +172,8 @@ AslIsExceptionDisabled ( UINT8 Level, UINT16 MessageId); -static void AslInitEnode ( +static void +AslInitEnode ( ASL_ERROR_MSG **Enode, UINT8 Level, UINT16 MessageId, @@ -956,7 +959,7 @@ AslCommonError ( { /* Check if user wants to ignore this exception */ - if (AslIsExceptionIgnored (Level, MessageId)) + if (AslIsExceptionIgnored (Filename, LogicalLineNumber, Level, MessageId)) { return; } @@ -1087,6 +1090,8 @@ GetModifiedLevel ( BOOLEAN AslIsExceptionIgnored ( + char *Filename, + UINT32 LineNumber, UINT8 Level, UINT16 MessageId) { @@ -1096,7 +1101,8 @@ AslIsExceptionIgnored ( /* Note: this allows exception to be disabled and expected */ ExceptionIgnored = AslIsExceptionDisabled (Level, MessageId); - ExceptionIgnored |= AslIsExceptionExpected (Level, MessageId); + ExceptionIgnored |= + AslIsExceptionExpected (Filename, LineNumber, Level, MessageId); return (AslGbl_AllExceptionsDisabled || ExceptionIgnored); } @@ -1104,7 +1110,7 @@ AslIsExceptionIgnored ( /******************************************************************************* * - * FUNCTION: AslCheckExpectException + * FUNCTION: AslCheckExpectedException * * PARAMETERS: none * @@ -1120,6 +1126,8 @@ AslCheckExpectedExceptions ( void) { UINT8 i; + ASL_EXPECTED_MSG_NODE *Current = AslGbl_ExpectedErrorCodeList; + ASL_LOCATION_NODE *LocationNode; for (i = 0; i < AslGbl_ExpectedMessagesIndex; ++i) @@ -1130,12 +1138,32 @@ AslCheckExpectedExceptions ( AslGbl_ExpectedMessages[i].MessageIdStr); } } + + while (Current) + { + LocationNode = Current->LocationList; + + while (LocationNode) + { + if (!LocationNode->MessageReceived) + { + AslCommonError (ASL_ERROR, ASL_MSG_EXCEPTION_NOT_RECEIVED, + LocationNode->LineNumber, LocationNode->LineNumber, + LocationNode->LogicalByteOffset, LocationNode->Column, + LocationNode->Filename, Current->MessageIdStr); + } + + LocationNode = LocationNode->Next; + } + + Current = Current->Next; + } } /******************************************************************************* * - * FUNCTION: AslExpectException + * FUNCTION: AslLogExpectedException * * PARAMETERS: MessageIdString - ID of excepted exception during compile * @@ -1148,7 +1176,7 @@ AslCheckExpectedExceptions ( ******************************************************************************/ ACPI_STATUS -AslExpectException ( +AslLogExpectedException ( char *MessageIdString) { UINT32 MessageId; @@ -1184,6 +1212,61 @@ AslExpectException ( /******************************************************************************* * + * FUNCTION: AslLogExpectedExceptionByLine + * + * PARAMETERS: MessageIdString - ID of excepted exception during compile + * + * RETURN: Status + * + * DESCRIPTION: Enter a message ID into the global expected messages table + * based on file and line number. If these messages are not raised + * during the compilation, throw an error. + * + ******************************************************************************/ + +void +AslLogExpectedExceptionByLine ( + char *MessageIdString) +{ + ASL_LOCATION_NODE *NewErrorLocationNode; + ASL_EXPECTED_MSG_NODE *Current = AslGbl_ExpectedErrorCodeList; + UINT32 MessageId; + + + NewErrorLocationNode = UtLocalCalloc (sizeof (ASL_LOCATION_NODE)); + + NewErrorLocationNode->LineNumber = AslGbl_CurrentLineNumber; + NewErrorLocationNode->Filename = AslGbl_Files[ASL_FILE_INPUT].Filename; + NewErrorLocationNode->LogicalByteOffset = AslGbl_CurrentLineOffset; + NewErrorLocationNode->Column = AslGbl_CurrentColumn; + + MessageId = (UINT32) strtoul (MessageIdString, NULL, 0); + + /* search the existing list for a matching message ID */ + + while (Current && Current->MessageId != MessageId ) + { + Current = Current->Next; + } + if (!Current) + { + /* ID was not found, create a new node for this message ID */ + + Current = UtLocalCalloc (sizeof (ASL_EXPECTED_MSG_NODE)); + + Current->Next = AslGbl_ExpectedErrorCodeList; + Current->MessageIdStr = MessageIdString; + Current->MessageId = MessageId; + AslGbl_ExpectedErrorCodeList = Current; + } + + NewErrorLocationNode->Next = Current->LocationList; + Current->LocationList = NewErrorLocationNode; +} + + +/******************************************************************************* + * * FUNCTION: AslDisableException * * PARAMETERS: MessageIdString - ID to be disabled @@ -1272,6 +1355,7 @@ AslElevateException ( return (AE_OK); } + /******************************************************************************* * * FUNCTION: AslIsExceptionDisabled @@ -1288,9 +1372,13 @@ AslElevateException ( static BOOLEAN AslIsExceptionExpected ( + char *Filename, + UINT32 LineNumber, UINT8 Level, UINT16 MessageId) { + ASL_EXPECTED_MSG_NODE *Current = AslGbl_ExpectedErrorCodeList; + ASL_LOCATION_NODE *CurrentErrorLocation; UINT32 EncodedMessageId; UINT32 i; @@ -1308,6 +1396,28 @@ AslIsExceptionExpected ( } } + while (Current && Current->MessageId != EncodedMessageId) + { + Current = Current->Next; + } + if (!Current) + { + return (FALSE); + } + + CurrentErrorLocation = Current->LocationList; + + while (CurrentErrorLocation) + { + if (!strcmp (CurrentErrorLocation->Filename, Filename) && + CurrentErrorLocation->LineNumber == LineNumber) + { + return (CurrentErrorLocation->MessageReceived = TRUE); + } + + CurrentErrorLocation = CurrentErrorLocation->Next; + } + return (FALSE); } @@ -1410,7 +1520,8 @@ AslDualParseOpError ( /* Check if user wants to ignore this exception */ - if (AslIsExceptionIgnored (Level, MainMsgId) || !MainOp) + if (!MainOp || AslIsExceptionIgnored (MainOp->Asl.Filename, + MainOp->Asl.LogicalLineNumber, Level, MainMsgId)) { return; } Modified: head/sys/contrib/dev/acpica/compiler/aslglobal.h ============================================================================== --- head/sys/contrib/dev/acpica/compiler/aslglobal.h Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/compiler/aslglobal.h Fri Mar 27 00:29:33 2020 (r359346) @@ -420,6 +420,7 @@ ASL_EXTERN char ASL_INIT_GLOBAL (* ASL_EXTERN char ASL_INIT_GLOBAL (*AslGbl_TableId, "NO_ID"); ASL_EXTERN ASL_FILE_INFO ASL_INIT_GLOBAL (*AslGbl_Files, NULL); ASL_EXTERN ASL_GLOBAL_FILE_NODE ASL_INIT_GLOBAL (*AslGbl_FilesList, NULL); +ASL_EXTERN ASL_EXPECTED_MSG_NODE ASL_INIT_GLOBAL (*AslGbl_ExpectedErrorCodeList, NULL); /* Specific to the -q option */ Modified: head/sys/contrib/dev/acpica/compiler/aslload.c ============================================================================== --- head/sys/contrib/dev/acpica/compiler/aslload.c Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/compiler/aslload.c Fri Mar 27 00:29:33 2020 (r359346) @@ -1022,6 +1022,74 @@ FinishNode: * * FUNCTION: LdAnalyzeExternals * + * PARAMETERS: Type1 + * Type2 + * + * RETURN: BOOLEAN + * + * DESCRIPTION: Match Type1 and Type2 with the assumption that one might be + * using external types and another might be using local types. + * This should be used to compare the types found in external + * declarations with types found in other external declarations or + * named object declaration. This should not be used to match two + * object type declarations. + * + ******************************************************************************/ + +static BOOLEAN +LdTypesMatchExternType ( + ACPI_OBJECT_TYPE Type1, + ACPI_OBJECT_TYPE Type2) +{ + BOOLEAN Type1IsLocal = Type1 > ACPI_TYPE_EXTERNAL_MAX; + BOOLEAN Type2IsLocal = Type2 > ACPI_TYPE_EXTERNAL_MAX; + ACPI_OBJECT_TYPE ExternalType; + ACPI_OBJECT_TYPE LocalType; + + + /* + * The inputs could represent types that are local to ACPICA or types that + * are known externally. Some local types, such as the OperationRegion + * field units, are defined with more granularity than ACPICA local types. + * + * Therefore, map the local types to the external types before matching. + */ + if (Type1IsLocal && !Type2IsLocal) + { + LocalType = Type1; + ExternalType = Type2; + } + else if (!Type1IsLocal && Type2IsLocal) + { + LocalType = Type2; + ExternalType = Type1; + } + else + { + return (Type1 == Type2); + } + + switch (LocalType) + { + case ACPI_TYPE_LOCAL_REGION_FIELD: + case ACPI_TYPE_LOCAL_BANK_FIELD: + case ACPI_TYPE_LOCAL_INDEX_FIELD: + + LocalType = ACPI_TYPE_FIELD_UNIT; + break; + + default: + break; + } + + return (LocalType == ExternalType); +} + + +/******************************************************************************* + * + * FUNCTION: LdAnalyzeExternals + * * PARAMETERS: Node - Node that represents the named object * Op - Named object declaring this named object * ExternalOpType - Type of ExternalOp @@ -1072,12 +1140,12 @@ LdAnalyzeExternals ( if ((ActualOpType != ACPI_TYPE_ANY) && (ActualExternalOpType != ACPI_TYPE_ANY) && - (ActualExternalOpType != ActualOpType)) + !LdTypesMatchExternType (ActualExternalOpType, ActualOpType)) { if (Op->Asl.ParseOpcode == PARSEOP_EXTERNAL && Node->Op->Asl.ParseOpcode == PARSEOP_EXTERNAL) { - AslDualParseOpError (ASL_ERROR, + AslDualParseOpError (ASL_WARNING, ASL_MSG_DUPLICATE_EXTERN_MISMATCH, Op, NULL, ASL_MSG_DUPLICATE_EXTERN_FOUND_HERE, Node->Op, NULL); } @@ -1094,7 +1162,7 @@ LdAnalyzeExternals ( ExternalOp = Node->Op; ActualOp = Op; } - AslDualParseOpError (ASL_ERROR, + AslDualParseOpError (ASL_WARNING, ASL_MSG_DECLARATION_TYPE_MISMATCH, ExternalOp, NULL, ASL_MSG_TYPE_MISMATCH_FOUND_HERE, ActualOp, NULL); } @@ -1139,18 +1207,8 @@ LdAnalyzeExternals ( { /* Allow update of externals of unknown type. */ - if (AcpiNsOpensScope (ExternalOpType)) - { - Node->Type = (UINT8) ExternalOpType; - Status = AE_OK; - } - else - { - sprintf (AslGbl_MsgBuffer, "%s [%s]", Op->Asl.ExternalName, - AcpiUtGetTypeName (Node->Type)); - AslError (ASL_ERROR, ASL_MSG_SCOPE_TYPE, Op, AslGbl_MsgBuffer); - Status = AE_ERROR; - } + Node->Type = (UINT8) ExternalOpType; + Status = AE_OK; } return (Status); Modified: head/sys/contrib/dev/acpica/compiler/asloptions.c ============================================================================== --- head/sys/contrib/dev/acpica/compiler/asloptions.c Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/compiler/asloptions.c Fri Mar 27 00:29:33 2020 (r359346) @@ -942,7 +942,7 @@ AslDoOptions ( return (-1); } - Status = AslExpectException (AcpiGbl_Optarg); + Status = AslLogExpectedException (AcpiGbl_Optarg); if (ACPI_FAILURE (Status)) { return (-1); Modified: head/sys/contrib/dev/acpica/compiler/asltypes.h ============================================================================== --- head/sys/contrib/dev/acpica/compiler/asltypes.h Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/compiler/asltypes.h Fri Mar 27 00:29:33 2020 (r359346) @@ -381,11 +381,36 @@ typedef struct asl_error_msg typedef struct asl_expected_message { - UINT32 MessageId; - char *MessageIdStr; - BOOLEAN MessageReceived; + UINT32 MessageId; + char *MessageIdStr; + BOOLEAN MessageReceived; } ASL_EXPECTED_MESSAGE; + +/* + * An entry in the line-based expected messages list + * + * TBD: might be possible to merge this with ASL_EXPECTED_MESSAGE + */ +typedef struct asl_expected_msg_node +{ + struct asl_expected_msg_node *Next; + UINT32 MessageId; + char *MessageIdStr; + struct asl_location_node *LocationList; + +} ASL_EXPECTED_MSG_NODE; + +typedef struct asl_location_node +{ + struct asl_location_node *Next; + char *Filename; + UINT32 LineNumber; + UINT32 Column; + UINT32 LogicalByteOffset; + BOOLEAN MessageReceived; + +} ASL_LOCATION_NODE; /* An entry in the listing file stack (for include files) */ Modified: head/sys/contrib/dev/acpica/compiler/dtcompiler.h ============================================================================== --- head/sys/contrib/dev/acpica/compiler/dtcompiler.h Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/compiler/dtcompiler.h Fri Mar 27 00:29:33 2020 (r359346) @@ -461,7 +461,6 @@ DtCreateTableUnit ( /* dtparser - lex/yacc files */ -UINT64 DtCompilerParserResult; /* Expression return value */ int DtCompilerParserparse ( void); Modified: head/sys/contrib/dev/acpica/compiler/dtcompilerparser.l ============================================================================== --- head/sys/contrib/dev/acpica/compiler/dtcompilerparser.l Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/compiler/dtcompilerparser.l Fri Mar 27 00:29:33 2020 (r359346) @@ -153,7 +153,6 @@ #include #include "dtcompilerparser.y.h" -YYSTYPE DtCompilerlval; #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("dtcompilerscanner") Modified: head/sys/contrib/dev/acpica/compiler/dtcompilerparser.y ============================================================================== --- head/sys/contrib/dev/acpica/compiler/dtcompilerparser.y Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/compiler/dtcompilerparser.y Fri Mar 27 00:29:33 2020 (r359346) @@ -170,7 +170,6 @@ extern char *DtCompilerParsertext; extern DT_FIELD *AslGbl_CurrentField; extern int DtLabelByteOffset; -extern UINT64 DtCompilerParserResult; /* Expression return value */ extern UINT64 DtCompilerParserlineno; /* Current line number */ extern UINT32 DtTokenFirstLine; Modified: head/sys/contrib/dev/acpica/compiler/dtparser.l ============================================================================== --- head/sys/contrib/dev/acpica/compiler/dtparser.l Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/compiler/dtparser.l Fri Mar 27 00:29:33 2020 (r359346) @@ -208,7 +208,7 @@ NewLine [\n] /* * Local support functions */ -YY_BUFFER_STATE LexBuffer; +static YY_BUFFER_STATE LexBuffer; /****************************************************************************** * Modified: head/sys/contrib/dev/acpica/compiler/dttable1.c ============================================================================== --- head/sys/contrib/dev/acpica/compiler/dttable1.c Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/compiler/dttable1.c Fri Mar 27 00:29:33 2020 (r359346) @@ -1967,11 +1967,16 @@ DtCompileIvrs ( switch (IvrsHeader->Type) { - case ACPI_IVRS_TYPE_HARDWARE: + case ACPI_IVRS_TYPE_HARDWARE1: InfoTable = AcpiDmTableInfoIvrs0; break; + case ACPI_IVRS_TYPE_HARDWARE2: + + InfoTable = AcpiDmTableInfoIvrs01; + break; + case ACPI_IVRS_TYPE_MEMORY1: case ACPI_IVRS_TYPE_MEMORY2: case ACPI_IVRS_TYPE_MEMORY3: @@ -1994,7 +1999,8 @@ DtCompileIvrs ( ParentTable = DtPeekSubtable (); DtInsertSubtable (ParentTable, Subtable); - if (IvrsHeader->Type == ACPI_IVRS_TYPE_HARDWARE) + if (IvrsHeader->Type == ACPI_IVRS_TYPE_HARDWARE1 || + IvrsHeader->Type == ACPI_IVRS_TYPE_HARDWARE2) { while (*PFieldList && !strcmp ((*PFieldList)->Name, "Entry Type")) Modified: head/sys/contrib/dev/acpica/compiler/dtutils.c ============================================================================== --- head/sys/contrib/dev/acpica/compiler/dtutils.c Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/compiler/dtutils.c Fri Mar 27 00:29:33 2020 (r359346) @@ -189,7 +189,8 @@ DtError ( /* Check if user wants to ignore this exception */ - if (AslIsExceptionIgnored (Level, MessageId)) + if (AslIsExceptionIgnored (AslGbl_Files[ASL_FILE_INPUT].Filename, + FieldObject->Line, Level, MessageId)) { return; } Modified: head/sys/contrib/dev/acpica/compiler/prparser.l ============================================================================== --- head/sys/contrib/dev/acpica/compiler/prparser.l Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/compiler/prparser.l Fri Mar 27 00:29:33 2020 (r359346) @@ -224,7 +224,7 @@ Identifier [a-zA-Z][0-9a-zA-Z]* /* * Local support functions */ -YY_BUFFER_STATE LexBuffer; +static YY_BUFFER_STATE LexBuffer; /****************************************************************************** Modified: head/sys/contrib/dev/acpica/components/debugger/dbinput.c ============================================================================== --- head/sys/contrib/dev/acpica/components/debugger/dbinput.c Thu Mar 26 22:08:31 2020 (r359345) +++ head/sys/contrib/dev/acpica/components/debugger/dbinput.c Fri Mar 27 00:29:33 2020 (r359346) @@ -637,19 +637,16 @@ AcpiDbGetNextToken ( return (NULL); } - /* Remove any spaces at the beginning */ + /* Remove any spaces at the beginning, ignore blank lines */ - if (*String == ' ') + while (*String && isspace (*String)) { - while (*String && (*String == ' ')) - { - String++; - } + String++; + } - if (!(*String)) - { - return (NULL); - } + if (!(*String)) + { + return (NULL); } *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***