From 705c538931446b23ef7f028f71c9da55c78bbf23 Mon Sep 17 00:00:00 2001 From: Jung-uk Kim Date: Wed, 20 Jun 2012 17:51:04 +0000 Subject: [PATCH 1/2] Import ACPICA 20120620. --- changes.txt | 64 ++++ generate/unix/iasl/Makefile | 1 + source/common/ahpredef.c | 323 ++++++++++++++++++++ source/common/dmextern.c | 6 +- source/common/dmrestag.c | 21 +- source/compiler/Makefile | 1 + source/compiler/aslcompile.c | 80 +++-- source/compiler/aslerror.c | 2 +- source/compiler/aslfiles.c | 18 +- source/compiler/asllookup.c | 2 +- source/compiler/aslmain.c | 44 ++- source/compiler/aslsupport.l | 36 ++- source/compiler/aslutils.c | 90 +++--- source/compiler/dttemplate.c | 2 +- source/components/debugger/dbdisply.c | 11 +- source/components/debugger/dbexec.c | 6 +- source/components/debugger/dbutils.c | 4 +- source/components/disassembler/dmopcode.c | 213 ++++++++++++++ source/components/disassembler/dmwalk.c | 55 +++- source/components/dispatcher/dsfield.c | 4 +- source/components/dispatcher/dsopcode.c | 14 +- source/components/events/evgpe.c | 15 +- source/components/events/evgpeutil.c | 19 ++ source/components/events/evxfgpe.c | 80 +++-- source/components/executer/exconfig.c | 2 +- source/components/utilities/utmisc.c | 4 +- source/include/acdebug.h | 2 +- source/include/acdisasm.h | 8 + source/include/acglobal.h | 10 + source/include/aclocal.h | 32 +- source/include/acpixf.h | 2 +- source/include/acpredef.h | 6 +- source/include/acutils.h | 2 +- source/include/platform/acwin64.h | 1 + source/tools/acpiexec/aeexec.c | 5 +- source/tools/acpihelp/acpihelp.h | 9 - source/tools/acpihelp/ahpredef.c | 312 -------------------- source/tools/acpisrc/acpisrc.h | 3 +- source/tools/acpisrc/ascase.c | 340 +++++++++++++--------- source/tools/acpisrc/asfile.c | 2 +- source/tools/acpisrc/asmain.c | 16 +- source/tools/acpisrc/astable.c | 1 + 42 files changed, 1212 insertions(+), 656 deletions(-) create mode 100644 source/common/ahpredef.c delete mode 100644 source/tools/acpihelp/ahpredef.c diff --git a/changes.txt b/changes.txt index d31e91405caa..21239371ccd8 100644 --- a/changes.txt +++ b/changes.txt @@ -1,3 +1,67 @@ +---------------------------------------- +20 June 2012. Summary of changes for version 20120620: + +This release is available at https://www.acpica.org/downloads +The ACPI 5.0 specification is available at www.acpi.info + +1) ACPICA Kernel-resident Subsystem: + +Implemented support to expand the "implicit notify" feature to allow multiple +devices to be notified by a single GPE. This feature automatically generates a +runtime device notification in the absence of a BIOS-provided GPE control +method (_Lxx/_Exx) or a host-installed handler for the GPE. Implicit notify is +provided by ACPICA for Windows compatibility, and is a workaround for BIOS AML +code errors. See the description of the AcpiSetupGpeForWake interface in the +APCICA reference. Bob Moore, Rafael Wysocki. ACPICA BZ 918. + +Changed some comments and internal function names to simplify and ensure +correctness of the Linux code translation. No functional changes. + +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. + + Previous Release: + Non-Debug Version: 93.0K Code, 25.1K Data, 118.1K Total + Debug Version: 172.7K Code, 73.6K Data, 246.3K Total + Current Release: + Non-Debug Version: 93.1K Code, 25.1K Data, 118.2K Total + Debug Version: 172.9K Code, 73.6K Data, 246.5K Total + + +2) iASL Compiler/Disassembler and Tools: + +Disassembler: Added support to emit short, commented descriptions for the ACPI +predefined names in order to improve the readability of the disassembled +output. ACPICA BZ 959. Changes include: + 1) Emit descriptions for all standard predefined names (_INI, _STA, _PRW, +etc.) + 2) Emit generic descriptions for the special names (_Exx, _Qxx, etc.) + 3) Emit descriptions for the resource descriptor names (_MIN, _LEN, etc.) + +AcpiSrc: Fixed several long-standing Linux code translation issues. Argument +descriptions in function headers are now translated properly to lower case and +underscores. ACPICA BZ 961. Also fixes translation problems such as these: +(old -> new) + i_aSL -> iASL + 00-7_f -> 00-7F + 16_k -> 16K + local_fADT -> local_FADT + execute_oSI -> execute_OSI + +iASL: Fixed a problem where null bytes were inadvertently emitted into some +listing files. + +iASL: Added the existing debug options to the standard help screen. There are +no longer two different help screens. ACPICA BZ 957. + +AcpiHelp: Fixed some typos in the various predefined name descriptions. Also +expand some of the descriptions where appropriate. + +iASL: Fixed the -ot option (display compile times/statistics). Was not working +properly for standard output; only worked for the debug file case. + ---------------------------------------- 18 May 2012. Summary of changes for version 20120518: diff --git a/generate/unix/iasl/Makefile b/generate/unix/iasl/Makefile index 8d9dff706dda..53ba00141a95 100644 --- a/generate/unix/iasl/Makefile +++ b/generate/unix/iasl/Makefile @@ -45,6 +45,7 @@ OBJECTS = \ $(OBJDIR)/adfile.o \ $(OBJDIR)/adisasm.o \ $(OBJDIR)/adwalk.o \ + $(OBJDIR)/ahpredef.o \ $(OBJDIR)/aslanalyze.o \ $(OBJDIR)/aslbtypes.o \ $(OBJDIR)/aslcodegen.o \ diff --git a/source/common/ahpredef.c b/source/common/ahpredef.c new file mode 100644 index 000000000000..b3f1496e24d9 --- /dev/null +++ b/source/common/ahpredef.c @@ -0,0 +1,323 @@ +/****************************************************************************** + * + * Module Name: ahpredef - Table of all known ACPI predefined names + * + *****************************************************************************/ + +/* + * Copyright (C) 2000 - 2012, Intel Corp. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions, and the following disclaimer, + * without modification. + * 2. Redistributions in binary form must reproduce at minimum a disclaimer + * substantially similar to the "NO WARRANTY" disclaimer below + * ("Disclaimer") and any redistribution must be conditioned upon + * including a substantially similar Disclaimer requirement for further + * binary redistribution. + * 3. Neither the names of the above-listed copyright holders nor the names + * of any contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * Alternatively, this software may be distributed under the terms of the + * GNU General Public License ("GPL") version 2 as published by the Free + * Software Foundation. + * + * NO WARRANTY + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGES. + */ + +#include "acpi.h" +#include "accommon.h" + +/* + * iASL only needs a partial table (short descriptions only). + * AcpiHelp needs the full table. + */ +#ifdef ACPI_ASL_COMPILER +#define AH_PREDEF(Name, ShortDesc, LongDesc) {Name, ShortDesc} +#else +#define AH_PREDEF(Name, ShortDesc, LongDesc) {Name, ShortDesc, LongDesc} +#endif + +/* + * Predefined ACPI names, with short description and return value. + * This table was extracted directly from the ACPI specification. + */ +const AH_PREDEFINED_NAME AslPredefinedInfo[] = +{ + AH_PREDEF ("_ACx", "Active Cooling", "Returns the active cooling policy threshold values"), + AH_PREDEF ("_ADR", "Address", "Returns the address of a device on its parent bus"), + AH_PREDEF ("_AEI", "ACPI Event Interrupts", "Returns a list of GPIO events to be used as ACPI events"), + AH_PREDEF ("_ALC", "Ambient Light Chromaticity", "Returns the ambient light color chromaticity"), + AH_PREDEF ("_ALI", "Ambient Light Illuminance", "Returns the ambient light brightness"), + AH_PREDEF ("_ALN", "Alignment", "Base alignment, Resource Descriptor field"), + AH_PREDEF ("_ALP", "Ambient Light Polling", "Returns the ambient light sensor polling frequency"), + AH_PREDEF ("_ALR", "Ambient Light Response", "Returns the ambient light brightness to display brightness mappings"), + AH_PREDEF ("_ALT", "Ambient Light Temperature", "Returns the ambient light color temperature"), + AH_PREDEF ("_ALx", "Active List", "Returns a list of active cooling device objects"), + AH_PREDEF ("_ART", "Active Cooling Relationship Table", "Returns thermal relationship information between platform devices and fan devices"), + AH_PREDEF ("_ASI", "Address Space Id", "Resource Descriptor field"), + AH_PREDEF ("_ASZ", "Access Size", "Resource Descriptor field"), + AH_PREDEF ("_ATT", "Type-Specific Attribute", "Resource Descriptor field"), + AH_PREDEF ("_BAS", "Base Address", "Range base address, Resource Descriptor field"), + AH_PREDEF ("_BBN", "BIOS Bus Number", "Returns the PCI bus number returned by the BIOS"), + AH_PREDEF ("_BCL", "Brightness Control Levels", "Returns a list of supported brightness control levels"), + AH_PREDEF ("_BCM", "Brightness Control Method", "Sets the brightness level of the display device"), + AH_PREDEF ("_BCT", "Battery Charge Time", "Returns time remaining to complete charging battery"), + AH_PREDEF ("_BDN", "BIOS Dock Name", "Returns the Dock ID returned by the BIOS"), + AH_PREDEF ("_BFS", "Back From Sleep", "Inform AML of a wake event"), + AH_PREDEF ("_BIF", "Battery Information", "Returns a Control Method Battery information block"), + AH_PREDEF ("_BIX", "Battery Information Extended", "Returns a Control Method Battery extended information block"), + AH_PREDEF ("_BLT", "Battery Level Threshold", "Set battery level threshold preferences"), + AH_PREDEF ("_BM_", "Bus Master", "Resource Descriptor field"), + AH_PREDEF ("_BMA", "Battery Measurement Averaging Interval", "Sets battery measurement averaging interval"), + AH_PREDEF ("_BMC", "Battery Maintenance Control", "Sets battery maintenance and control features"), + AH_PREDEF ("_BMD", "Battery Maintenance Data", "Returns battery maintenance, control, and state data"), + AH_PREDEF ("_BMS", "Battery Measurement Sampling Time", "Sets the battery measurement sampling time"), + AH_PREDEF ("_BQC", "Brightness Query Current", "Returns the current display brightness level"), + AH_PREDEF ("_BST", "Battery Status", "Returns a Control Method Battery status block"), + AH_PREDEF ("_BTM", "Battery Time", "Returns the battery runtime"), + AH_PREDEF ("_BTP", "Battery Trip Point", "Sets a Control Method Battery trip point"), + AH_PREDEF ("_CBA", "Configuration Base Address", "Sets the base address for a PCI Express host bridge"), + AH_PREDEF ("_CDM", "Clock Domain", "Returns a logical processor's clock domain identifier"), + AH_PREDEF ("_CID", "Compatible ID", "Returns a device's Plug and Play Compatible ID list"), + AH_PREDEF ("_CLS", "Class Code", "Returns PCI class code and subclass"), + AH_PREDEF ("_CPC", "Continuous Performance Control", "Returns a list of performance control interfaces"), + AH_PREDEF ("_CRS", "Current Resource Settings", "Returns the current resource settings for a device"), + AH_PREDEF ("_CRT", "Critical Temperature", "Returns the shutdown critical temperature"), + AH_PREDEF ("_CSD", "C-State Dependencies", "Returns a list of C-state dependencies"), + AH_PREDEF ("_CST", "C-States", "Returns a list of supported C-states"), + AH_PREDEF ("_CWS", "Clear Wake Alarm Status", "Clear the status of wake alarms"), + AH_PREDEF ("_DBT", "Debounce Timeout", "Timeout value, Resource Descriptor field"), + AH_PREDEF ("_DCK", "Dock Present", "Sets docking isolation. Presence indicates device is a docking station"), + AH_PREDEF ("_DCS", "Display Current Status", "Returns status of the display output device"), + AH_PREDEF ("_DDC", "Display Data Current", "Returns the EDID for the display output device"), + AH_PREDEF ("_DDN", "DOS Device Name", "Returns a device logical name"), + AH_PREDEF ("_DEC", "Decode", "Device decoding type, Resource Descriptor field"), + AH_PREDEF ("_DEP", "Dependencies", "Returns a list of operation region dependencies"), + AH_PREDEF ("_DGS", "Display Graphics State", "Return the current state of the output device"), + AH_PREDEF ("_DIS", "Disable Device", "Disables a device"), + AH_PREDEF ("_DLM", "Device Lock Mutex", "Defines mutex for OS/AML sharing"), + AH_PREDEF ("_DMA", "Direct Memory Access", "Returns a device's current resources for DMA transactions"), + AH_PREDEF ("_DOD", "Display Output Devices", "Enumerate all devices attached to the display adapter"), + AH_PREDEF ("_DOS", "Disable Output Switching", "Sets the display output switching mode"), + AH_PREDEF ("_DPL", "Device Selection Polarity", "Polarity of Device Selection signal, Resource Descriptor field"), + AH_PREDEF ("_DRS", "Drive Strength", "Drive Strength setting for GPIO connection, Resource Descriptor field"), + AH_PREDEF ("_DSM", "Device-Specific Method", "Executes device-specific functions"), + AH_PREDEF ("_DSS", "Device Set State", "Sets the display device state"), + AH_PREDEF ("_DSW", "Device Sleep Wake", "Sets the sleep and wake transition states for a device"), + AH_PREDEF ("_DTI", "Device Temperature Indication", "Conveys native device temperature to the platform"), + AH_PREDEF ("_Exx", "Edge-Triggered GPE", "Method executed as a result of a general-purpose event"), + AH_PREDEF ("_EC_", "Embedded Controller", "returns EC offset and query information"), + AH_PREDEF ("_EDL", "Eject Device List", "Returns a list of devices that are dependent on a device (docking)"), + AH_PREDEF ("_EJD", "Ejection Dependent Device", "Returns the name of dependent (parent) device (docking)"), + AH_PREDEF ("_EJx", "Eject Device", "Begin or cancel a device ejection request (docking)"), + AH_PREDEF ("_END", "Endianness", "Endian orientation, Resource Descriptor field"), + AH_PREDEF ("_EVT", "Event", "Event method for GPIO events"), + AH_PREDEF ("_FDE", "Floppy Disk Enumerate", "Returns floppy disk configuration information"), + AH_PREDEF ("_FDI", "Floppy Drive Information", "Returns a floppy drive information block"), + AH_PREDEF ("_FDM", "Floppy Drive Mode", "Sets a floppy drive speed"), + AH_PREDEF ("_FIF", "Fan Information", "Returns fan device information"), + AH_PREDEF ("_FIX", "Fixed Register Resource Provider", "Returns a list of devices that implement FADT register blocks"), + AH_PREDEF ("_FLC", "Flow Control", "Flow control, Resource Descriptor field"), + AH_PREDEF ("_FPS", "Fan Performance States", "Returns a list of supported fan performance states"), + AH_PREDEF ("_FSL", "Fan Set Level", "Control method that sets the fan device's speed level (performance state)"), + AH_PREDEF ("_FST", "Fan Status", "Returns current status information for a fan device"), + AH_PREDEF ("_GAI", "Get Averaging Interval", "Returns the power meter averaging interval"), + AH_PREDEF ("_GCP", "Get Capabilities", "Get device time capabilities"), + AH_PREDEF ("_GHL", "Get Hardware Limit", "Returns the hardware limit enforced by the power meter"), + AH_PREDEF ("_GL_", "Global Lock", "OS-defined Global Lock mutex object"), + AH_PREDEF ("_GLK", "Get Global Lock Requirement", "Returns a device's Global Lock requirement for device access"), + AH_PREDEF ("_GPD", "Get Post Data", "Returns the value of the VGA device that will be posted at boot"), + AH_PREDEF ("_GPE", "General Purpose Events", "Predefined scope (\\_GPE) or SCI number for EC"), + AH_PREDEF ("_GRA", "Granularity", "Address space granularity, Resource Descriptor field"), + AH_PREDEF ("_GRT", "Get Real Time", "Returns current time-of-day from a time/alarm device"), + AH_PREDEF ("_GSB", "Global System Interrupt Base", "Returns the GSB for a I/O APIC device"), + AH_PREDEF ("_GTF", "Get Task File", "Returns a list of ATA commands to restore a drive to default state"), + AH_PREDEF ("_GTM", "Get Timing Mode", "Returns a list of IDE controller timing information"), + AH_PREDEF ("_GTS", "Going To Sleep", "Inform AML of pending sleep"), + AH_PREDEF ("_GWS", "Get Wake Status", "Return status of wake alarms"), + AH_PREDEF ("_HE_", "High-Edge", "Interrupt triggering, Resource Descriptor field"), + AH_PREDEF ("_HID", "Hardware ID", "Returns a device's Plug and Play Hardware ID"), + AH_PREDEF ("_HOT", "Hot Temperature", "Returns the critical temperature for sleep (entry to S4)"), + AH_PREDEF ("_HPP", "Hot Plug Parameters", "Returns a list of hot-plug information for a PCI device"), + AH_PREDEF ("_HPX", "Hot Plug Parameter Extensions", "Returns a list of hot-plug information for a PCI device. Supersedes _HPP"), + AH_PREDEF ("_HRV", "Hardware Revision", "Returns a hardware revision value"), + AH_PREDEF ("_IFT", "IPMI Interface Type", "See the Intelligent Platform Management Interface Specification"), + AH_PREDEF ("_INI", "Initialize", "Performs device specific initialization"), + AH_PREDEF ("_INT", "Interrupts", "Interrupt mask bits, Resource Descriptor field"), + AH_PREDEF ("_IOR", "I/O Restriction", "Restriction type, Resource Descriptor field"), + AH_PREDEF ("_IRC", "Inrush Current", "Presence indicates that a device has a significant inrush current draw"), + AH_PREDEF ("_Lxx", "Level-Triggered GPE", "Control method executed as a result of a general-purpose event"), + AH_PREDEF ("_LCK", "Lock Device", "Locks or unlocks a device (docking)"), + AH_PREDEF ("_LEN", "Length", "Range length, Resource Descriptor field"), + AH_PREDEF ("_LID", "Lid Status", "Returns the open/closed status of the lid on a mobile system"), + AH_PREDEF ("_LIN", "Lines In Use", "Handshake lines, Resource Descriptor field"), + AH_PREDEF ("_LL_", "Low Level", "Interrupt polarity, Resource Descriptor field"), + AH_PREDEF ("_MAF", "Maximum Address Fixed", "Resource Descriptor field"), + AH_PREDEF ("_MAT", "Multiple APIC Table Entry", "Returns a list of MADT APIC structure entries"), + AH_PREDEF ("_MAX", "Maximum Base Address", "Resource Descriptor field"), + AH_PREDEF ("_MBM", "Memory Bandwidth Monitoring Data", "Returns bandwidth monitoring data for a memory device"), + AH_PREDEF ("_MEM", "Memory Attributes", "Resource Descriptor field"), + AH_PREDEF ("_MIF", "Minimum Address Fixed", "Resource Descriptor field"), + AH_PREDEF ("_MIN", "Minimum Base Address", "Resource Descriptor field"), + AH_PREDEF ("_MLS", "Multiple Language String", "Returns a device description in multiple languages"), + AH_PREDEF ("_MOD", "Mode", "Interrupt mode, Resource Descriptor field"), + AH_PREDEF ("_MSG", "Message", "Sets the system message waiting status indicator"), + AH_PREDEF ("_MSM", "Memory Set Monitoring", "Sets bandwidth monitoring parameters for a memory device"), + AH_PREDEF ("_MTP", "Memory Type", "Resource Descriptor field"), + AH_PREDEF ("_NTT", "Notification Temperature Threshold", "Returns a threshold for device temperature change that requires platform notification"), + AH_PREDEF ("_OFF", "Power Off", "Sets a power resource to the off state"), + AH_PREDEF ("_ON_", "Power On", "Sets a power resource to the on state"), + AH_PREDEF ("_OS_", "Operating System", "Returns a string that identifies the operating system"), + AH_PREDEF ("_OSC", "Operating System Capabilities", "Inform AML of host features and capabilities"), + AH_PREDEF ("_OSI", "Operating System Interfaces", "Returns supported interfaces, behaviors, and features"), + AH_PREDEF ("_OST", "OSPM Status Indication", "Inform AML of event processing status"), + AH_PREDEF ("_PAI", "Power Averaging Interval", "Sets the averaging interval for a power meter"), + AH_PREDEF ("_PAR", "Parity", "Parity bits, Resource Descriptor field"), + AH_PREDEF ("_PCL", "Power Consumer List", "Returns a list of devices powered by a power source"), + AH_PREDEF ("_PCT", "Performance Control", "Returns processor performance control and status registers"), + AH_PREDEF ("_PDC", "Processor Driver Capabilities", "Inform AML of processor driver capabilities"), + AH_PREDEF ("_PDL", "P-state Depth Limit", "Returns the lowest available performance P-state"), + AH_PREDEF ("_PHA", "Clock Phase", "Clock phase, Resource Descriptor field"), + AH_PREDEF ("_PIC", "Interrupt Model", "Inform AML of the interrupt model in use"), + AH_PREDEF ("_PIF", "Power Source Information", "Returns a Power Source information block"), + AH_PREDEF ("_PIN", "Pin List", "Pin list, Resource Descriptor field"), + AH_PREDEF ("_PLD", "Physical Device Location", "Returns a device's physical location information"), + AH_PREDEF ("_PMC", "Power Meter Capabilities", "Returns a list of Power Meter capabilities info"), + AH_PREDEF ("_PMD", "Power Metered Devices", "Returns a list of devices that are measured by the power meter device"), + AH_PREDEF ("_PMM", "Power Meter Measurement", "Returns the current value of the Power Meter"), + AH_PREDEF ("_POL", "Polarity", "Interrupt polarity, Resource Descriptor field"), + AH_PREDEF ("_PPC", "Performance Present Capabilites", "Returns a list of the performance states currently supported by the platform"), + AH_PREDEF ("_PPE", "Polling for Platform Error", "Returns the polling interval to retrieve Corrected Platform Error information"), + AH_PREDEF ("_PPI", "Pin Configuration", "Resource Descriptor field"), + AH_PREDEF ("_PR", "Processor", "Predefined scope for processor objects"), + AH_PREDEF ("_PR0", "Power Resources for D0", "Returns a list of dependent power resources to enter state D0 (fully on)"), + AH_PREDEF ("_PR1", "Power Resources for D1", "Returns a list of dependent power resources to enter state D1"), + AH_PREDEF ("_PR2", "Power Resources for D2", "Returns a list of dependent power resources to enter state D2"), + AH_PREDEF ("_PR3", "Power Resources for D3hot", "Returns a list of dependent power resources to enter state D3hot"), + AH_PREDEF ("_PRE", "Power Resources for Enumeration", "Returns a list of dependent power resources to enumerate devices on a bus"), + AH_PREDEF ("_PRL", "Power Source Redundancy List", "Returns a list of power source devices in the same redundancy grouping"), + AH_PREDEF ("_PRS", "Possible Resource Settings", "Returns a list of a device's possible resource settings"), + AH_PREDEF ("_PRT", "PCI Routing Table", "Returns a list of PCI interrupt mappings"), + AH_PREDEF ("_PRW", "Power Resources for Wake", "Returns a list of dependent power resources for waking"), + AH_PREDEF ("_PS0", "Power State 0", "Sets a device's power state to D0 (device fully on)"), + AH_PREDEF ("_PS1", "Power State 1", "Sets a device's power state to D1"), + AH_PREDEF ("_PS2", "Power State 2", "Sets a device's power state to D2"), + AH_PREDEF ("_PS3", "Power State 3", "Sets a device's power state to D3 (device off)"), + AH_PREDEF ("_PSC", "Power State Current", "Returns a device's current power state"), + AH_PREDEF ("_PSD", "Power State Dependencies", "Returns processor P-State dependencies"), + AH_PREDEF ("_PSE", "Power State for Enumeration", "Put a bus into enumeration power mode"), + AH_PREDEF ("_PSL", "Passive List", "Returns a list of passive cooling device objects"), + AH_PREDEF ("_PSR", "Power Source", "Returns the power source device currently in use"), + AH_PREDEF ("_PSS", "Performance Supported States", "Returns a list of supported processor performance states"), + AH_PREDEF ("_PSV", "Passive Temperature", "Returns the passive trip point temperature"), + AH_PREDEF ("_PSW", "Power State Wake", "Sets a device's wake function"), + AH_PREDEF ("_PTC", "Processor Throttling Control", "Returns throttling control and status registers"), + AH_PREDEF ("_PTP", "Power Trip Points", "Sets trip points for the Power Meter device"), + AH_PREDEF ("_PTS", "Prepare To Sleep", "Inform the platform of an impending sleep transition"), + AH_PREDEF ("_PUR", "Processor Utilization Request", "Returns the number of processors that the platform would like to idle"), + AH_PREDEF ("_PXM", "Device Proximity", "Returns a device's proximity domain identifier"), + AH_PREDEF ("_Qxx", "EC Query", "Embedded Controller query and SMBus Alarm control method"), + AH_PREDEF ("_RBO", "Register Bit Offset", "Resource Descriptor field"), + AH_PREDEF ("_RBW", "Register Bit Width", "Resource Descriptor field"), + AH_PREDEF ("_REG", "Region Availability", "Inform AML code of an operation region availability change"), + AH_PREDEF ("_REV", "Supported ACPI Revision", "Returns the revision of the ACPI specification that is implemented"), + AH_PREDEF ("_RMV", "Removal Status", "Returns a device's removal ability status (docking)"), + AH_PREDEF ("_RNG", "Range", "Memory range type, Resource Descriptor field"), + AH_PREDEF ("_ROM", "Read-Only Memory", "Returns a copy of the ROM data for a display device"), + AH_PREDEF ("_RT_", "Resource Type", "Resource Descriptor field"), + AH_PREDEF ("_RTV", "Relative Temperature Values", "Returns temperature value information"), + AH_PREDEF ("_RW_", "Read-Write Status", "Resource Descriptor field"), + AH_PREDEF ("_RXL", "Receive Buffer Size", "Serial channel buffer, Resource Descriptor field"), + AH_PREDEF ("_S0_", "S0 System State", "Returns values to enter the system into the S0 state"), + AH_PREDEF ("_S1_", "S1 System State", "Returns values to enter the system into the S1 state"), + AH_PREDEF ("_S2_", "S2 System State", "Returns values to enter the system into the S2 state"), + AH_PREDEF ("_S3_", "S3 System State", "Returns values to enter the system into the S3 state"), + AH_PREDEF ("_S4_", "S4 System State", "Returns values to enter the system into the S4 state"), + AH_PREDEF ("_S5_", "S5 System State", "Returns values to enter the system into the S5 state"), + AH_PREDEF ("_S1D", "S1 Device State", "Returns the highest D-state supported by a device when in the S1 state"), + AH_PREDEF ("_S2D", "S2 Device State", "Returns the highest D-state supported by a device when in the S2 state"), + AH_PREDEF ("_S3D", "S3 Device State", "Returns the highest D-state supported by a device when in the S3 state"), + AH_PREDEF ("_S4D", "S4 Device State", "Returns the highest D-state supported by a device when in the S4 state"), + AH_PREDEF ("_S0W", "S0 Device Wake State", "Returns the lowest D-state that the device can wake itself from S0"), + AH_PREDEF ("_S1W", "S1 Device Wake State", "Returns the lowest D-state for this device that can wake the system from S1"), + AH_PREDEF ("_S2W", "S2 Device Wake State", "Returns the lowest D-state for this device that can wake the system from S2"), + AH_PREDEF ("_S3W", "S3 Device Wake State", "Returns the lowest D-state for this device that can wake the system from S3"), + AH_PREDEF ("_S4W", "S4 Device Wake State", "Returns the lowest D-state for this device that can wake the system from S4"), + AH_PREDEF ("_SB_", "System Bus", "Predefined scope for device and bus objects"), + AH_PREDEF ("_SBS", "Smart Battery Subsystem", "Returns the subsystem configuration"), + AH_PREDEF ("_SCP", "Set Cooling Policy", "Sets the cooling policy (active or passive)"), + AH_PREDEF ("_SDD", "Set Device Data", "Sets data for a SATA device"), + AH_PREDEF ("_SEG", "PCI Segment", "Returns a device's PCI Segment Group number"), + AH_PREDEF ("_SHL", "Set Hardware Limit", "Sets the hardware limit enforced by the Power Meter"), + AH_PREDEF ("_SHR", "Sharable", "Interrupt share status, Resource Descriptor field"), + AH_PREDEF ("_SI_", "System Indicators", "Predefined scope"), + AH_PREDEF ("_SIZ", "Size", "DMA transfer size, Resource Descriptor field"), + AH_PREDEF ("_SLI", "System Locality Information", "Returns a list of NUMA system localities"), + AH_PREDEF ("_SLV", "Slave Mode", "Mode setting, Resource Descriptor field"), + AH_PREDEF ("_SPD", "Set Post Device", "Sets which video device will be posted at boot"), + AH_PREDEF ("_SPE", "Speed", "Connection speed, Resource Descriptor field"), + AH_PREDEF ("_SRS", "Set Resource Settings", "Sets a device's resource allocation"), + AH_PREDEF ("_SRT", "Set Real Time", "Sets the current time for a time/alarm device"), + AH_PREDEF ("_SRV", "IPMI Spec Revision", "See the Intelligent Platform Management Interface Specification"), + AH_PREDEF ("_SST", "System Status", "Sets the system status indicator"), + AH_PREDEF ("_STA", "Status", "Returns the current status of a Device or Power Resource"), + AH_PREDEF ("_STB", "Stop Bits", "Serial channel stop bits, Resource Descriptor field"), + AH_PREDEF ("_STM", "Set Timing Mode", "Sets an IDE controller transfer timings"), + AH_PREDEF ("_STP", "Set Expired Timer Wake Policy", "Sets expired timer policies of the wake alarm device"), + AH_PREDEF ("_STR", "Description String", "Returns a device's description string"), + AH_PREDEF ("_STV", "Set Timer Value", "Set timer values of the wake alarm device"), + AH_PREDEF ("_SUB", "Subsystem ID", "Returns the subsystem ID for a device"), + AH_PREDEF ("_SUN", "Slot User Number", "Returns the slot unique ID number"), + AH_PREDEF ("_SWS", "System Wake Source", "Returns the source event that caused the system to wake"), + AH_PREDEF ("_T_x", "Emitted by ASL Compiler", "Reserved for use by ASL compilers"), + AH_PREDEF ("_TC1", "Thermal Constant 1", "Returns TC1 for the passive cooling formula"), + AH_PREDEF ("_TC2", "Thermal Constant 2", "Returns TC2 for the passive cooling formula"), + AH_PREDEF ("_TDL", "T-State Depth Limit", "Returns the _TSS entry number of the lowest power throttling state"), + AH_PREDEF ("_TIP", "Expired Timer Wake Policy", "Returns timer policies of the wake alarm device"), + AH_PREDEF ("_TIV", "Timer Values", "Returns remaining time of the wake alarm device"), + AH_PREDEF ("_TMP", "Temperature", "Returns a thermal zone's current temperature"), + AH_PREDEF ("_TPC", "Throttling Present Capabilities", "Returns the current number of supported throttling states"), + AH_PREDEF ("_TPT", "Trip Point Temperature", "Inform AML that a device's embedded temperature sensor has crossed a temperature trip point"), + AH_PREDEF ("_TRA", "Translation", "Address translation offset, Resource Descriptor field"), + AH_PREDEF ("_TRS", "Translation Sparse", "Sparse/dense flag, Resource Descriptor field"), + AH_PREDEF ("_TRT", "Thermal Relationship Table", "Returns thermal relationships between platform devices"), + AH_PREDEF ("_TSD", "Throttling State Dependencies", "Returns a list of T-state dependencies"), + AH_PREDEF ("_TSF", "Type-Specific Flags", "Resource Descriptor field"), + AH_PREDEF ("_TSP", "Thermal Sampling Period", "Returns the thermal sampling period for passive cooling"), + AH_PREDEF ("_TSS", "Throttling Supported States", "Returns supported throttling state information"), + AH_PREDEF ("_TST", "Temperature Sensor Threshold", "Returns the minimum separation for a device's temperature trip points"), + AH_PREDEF ("_TTP", "Translation Type", "Translation/static flag, Resource Descriptor field"), + AH_PREDEF ("_TTS", "Transition To State", "Inform AML of an S-state transition"), + AH_PREDEF ("_TXL", "Transmit Buffer Size", "Serial Channel buffer, Resource Descriptor field"), + AH_PREDEF ("_TYP", "Type", "DMA channel type (speed), Resource Descriptor field"), + AH_PREDEF ("_TZ_", "Thermal Zone", "Predefined scope: ACPI 1.0"), + AH_PREDEF ("_TZD", "Thermal Zone Devices", "Returns a list of device names associated with a Thermal Zone"), + AH_PREDEF ("_TZM", "Thermal Zone Member", "Returns a reference to the thermal zone of which a device is a member"), + AH_PREDEF ("_TZP", "Thermal Zone Polling", "Returns a Thermal zone's polling frequency"), + AH_PREDEF ("_UID", "Unique ID", "Return a device's unique persistent ID"), + AH_PREDEF ("_UPC", "USB Port Capabilities", "Returns a list of USB port capabilities"), + AH_PREDEF ("_UPD", "User Presence Detect", "Returns user detection information"), + AH_PREDEF ("_UPP", "User Presence Polling", "Returns the recommended user presence polling interval"), + AH_PREDEF ("_VEN", "Vendor Data", "Resource Descriptor field"), + AH_PREDEF ("_VPO", "Video Post Options", "Returns the implemented video post options"), + AH_PREDEF ("_WAK", "Wake", "Inform AML that the system has just awakened"), + AH_PREDEF ("_Wxx", "Wake Event", "Method executed as a result of a wake event"), + AH_PREDEF (NULL, NULL, NULL) +}; diff --git a/source/common/dmextern.c b/source/common/dmextern.c index d509c8ae9256..195290063a4e 100644 --- a/source/common/dmextern.c +++ b/source/common/dmextern.c @@ -221,8 +221,10 @@ AcpiDmNormalizeParentPrefix ( */ ACPI_STRCAT (Fullpath, ParentPath); - /* Add dot separator (don't need dot if parent fullpath is a single "\") */ - + /* + * Add dot separator + * (don't need dot if parent fullpath is a single backslash) + */ if (ParentPath[1]) { ACPI_STRCAT (Fullpath, "."); diff --git a/source/common/dmrestag.c b/source/common/dmrestag.c index 13b3bbc3d46d..58a43e6ddba6 100644 --- a/source/common/dmrestag.c +++ b/source/common/dmrestag.c @@ -73,6 +73,7 @@ AcpiDmGetResourceTag ( static char * AcpiGetTagPathname ( + ACPI_PARSE_OBJECT *Op, ACPI_NAMESPACE_NODE *BufferNode, ACPI_NAMESPACE_NODE *ResourceNode, UINT32 BitIndex); @@ -443,7 +444,6 @@ AcpiDmCheckResourceReference ( ACPI_NAMESPACE_NODE *BufferNode; ACPI_NAMESPACE_NODE *ResourceNode; const ACPI_OPCODE_INFO *OpInfo; - char *Pathname; UINT32 BitIndex; @@ -519,14 +519,7 @@ AcpiDmCheckResourceReference ( /* Translate the Index to a resource tag pathname */ - Pathname = AcpiGetTagPathname (BufferNode, ResourceNode, BitIndex); - if (Pathname) - { - /* Complete the conversion of the Index to a symbol */ - - IndexOp->Common.AmlOpcode = AML_INT_NAMEPATH_OP; - IndexOp->Common.Value.String = Pathname; - } + AcpiGetTagPathname (IndexOp, BufferNode, ResourceNode, BitIndex); } @@ -597,6 +590,7 @@ AcpiDmGetResourceNode ( static char * AcpiGetTagPathname ( + ACPI_PARSE_OBJECT *IndexOp, ACPI_NAMESPACE_NODE *BufferNode, ACPI_NAMESPACE_NODE *ResourceNode, UINT32 BitIndex) @@ -689,6 +683,15 @@ AcpiGetTagPathname ( AcpiNsInternalizeName (Pathname, &InternalPath); ACPI_FREE (Pathname); + + /* Update the Op with the symbol */ + + AcpiPsInitOp (IndexOp, AML_INT_NAMEPATH_OP); + IndexOp->Common.Value.String = InternalPath; + + /* We will need the tag later. Cheat by putting it in the Node field */ + + IndexOp->Common.Node = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE, Tag); return (InternalPath); } diff --git a/source/compiler/Makefile b/source/compiler/Makefile index 379f38889387..9f704d2dbd3c 100644 --- a/source/compiler/Makefile +++ b/source/compiler/Makefile @@ -77,6 +77,7 @@ OBJECTS = \ adfile.o \ adisasm.o \ adwalk.o \ + ahpredef.o \ aslanalyze.o \ aslbtypes.o \ aslcodegen.o \ diff --git a/source/compiler/aslcompile.c b/source/compiler/aslcompile.c index 2a87a0162e4f..a6ffe1e89b90 100644 --- a/source/compiler/aslcompile.c +++ b/source/compiler/aslcompile.c @@ -67,6 +67,10 @@ FlConsumeNewComment ( FILE *Handle, ASL_FILE_STATUS *Status); +static void +CmDumpAllEvents ( + void); + /******************************************************************************* * @@ -717,45 +721,65 @@ CmDoOutputFiles ( /******************************************************************************* * - * FUNCTION: CmDumpEvent + * FUNCTION: CmDumpAllEvents * - * PARAMETERS: Event - A compiler event struct + * PARAMETERS: None * * RETURN: None. * - * DESCRIPTION: Dump a compiler event struct + * DESCRIPTION: Dump all compiler events * ******************************************************************************/ static void -CmDumpEvent ( - ASL_EVENT_INFO *Event) +CmDumpAllEvents ( + void) { + ASL_EVENT_INFO *Event; UINT32 Delta; UINT32 USec; UINT32 MSec; + UINT32 i; - if (!Event->Valid) + + Event = AslGbl_Events; + + DbgPrint (ASL_DEBUG_OUTPUT, "\n\nElapsed time for major events\n\n"); + if (Gbl_CompileTimesFlag) { - return; + printf ("\nElapsed time for major events\n\n"); } - /* Delta will be in 100-nanosecond units */ - - Delta = (UINT32) (Event->EndTime - Event->StartTime); - - USec = Delta / 10; - MSec = Delta / 10000; - - /* Round milliseconds up */ - - if ((USec - (MSec * 1000)) >= 500) + for (i = 0; i < AslGbl_NextEvent; i++) { - MSec++; - } + if (Event->Valid) + { + /* Delta will be in 100-nanosecond units */ - DbgPrint (ASL_DEBUG_OUTPUT, "%8u usec %8u msec - %s\n", - USec, MSec, Event->EventName); + Delta = (UINT32) (Event->EndTime - Event->StartTime); + + USec = Delta / 10; + MSec = Delta / 10000; + + /* Round milliseconds up */ + + if ((USec - (MSec * 1000)) >= 500) + { + MSec++; + } + + DbgPrint (ASL_DEBUG_OUTPUT, "%8u usec %8u msec - %s\n", + USec, MSec, Event->EventName); + + if (Gbl_CompileTimesFlag) + { + printf ("%8u usec %8u msec - %s\n", + USec, MSec, Event->EventName); + } + } + + Event++; + } } @@ -786,20 +810,12 @@ CmCleanupAndExit ( AePrintErrorLog (ASL_FILE_STDOUT); } - DbgPrint (ASL_DEBUG_OUTPUT, "\n\nElapsed time for major events\n\n"); - for (i = 0; i < AslGbl_NextEvent; i++) - { - CmDumpEvent (&AslGbl_Events[i]); - } + /* Emit compile times if enabled */ + + CmDumpAllEvents (); if (Gbl_CompileTimesFlag) { - printf ("\nElapsed time for major events\n\n"); - for (i = 0; i < AslGbl_NextEvent; i++) - { - CmDumpEvent (&AslGbl_Events[i]); - } - printf ("\nMiscellaneous compile statistics\n\n"); printf ("%11u : %s\n", TotalParseNodes, "Parse nodes"); printf ("%11u : %s\n", Gbl_NsLookupCount, "Namespace searches"); diff --git a/source/compiler/aslerror.c b/source/compiler/aslerror.c index cd0875d1ab3d..e00f5e40cd0e 100644 --- a/source/compiler/aslerror.c +++ b/source/compiler/aslerror.c @@ -341,7 +341,7 @@ AePrintException ( if (Gbl_VerboseErrors) { - fprintf (OutputFile, "%s %4.4d - ", + fprintf (OutputFile, "%s %4.4d -", AslErrorLevel[Enode->Level], Enode->MessageId + ((Enode->Level+1) * 1000)); } diff --git a/source/compiler/aslfiles.c b/source/compiler/aslfiles.c index 64f391f4f0a8..bc5b52dcfe1d 100644 --- a/source/compiler/aslfiles.c +++ b/source/compiler/aslfiles.c @@ -754,7 +754,7 @@ FlOpenInputFile ( /* Open the input ASL file, text mode */ - FlOpenFile (ASL_FILE_INPUT, InputFilename, "r"); + FlOpenFile (ASL_FILE_INPUT, InputFilename, "rt"); AslCompilerin = Gbl_Files[ASL_FILE_INPUT].Handle; return (AE_OK); @@ -838,7 +838,7 @@ FlOpenMiscOutputFiles ( /* Open the hex file, text mode */ - FlOpenFile (ASL_FILE_HEX_OUTPUT, Filename, "w+"); + FlOpenFile (ASL_FILE_HEX_OUTPUT, Filename, "w+t"); AslCompilerSignon (ASL_FILE_HEX_OUTPUT); AslCompilerFileHeader (ASL_FILE_HEX_OUTPUT); @@ -889,7 +889,7 @@ FlOpenMiscOutputFiles ( /* Open the listing file, text mode */ - FlOpenFile (ASL_FILE_LISTING_OUTPUT, Filename, "w+"); + FlOpenFile (ASL_FILE_LISTING_OUTPUT, Filename, "w+t"); AslCompilerSignon (ASL_FILE_LISTING_OUTPUT); AslCompilerFileHeader (ASL_FILE_LISTING_OUTPUT); @@ -907,7 +907,7 @@ FlOpenMiscOutputFiles ( return (AE_ERROR); } - FlOpenFile (ASL_FILE_PREPROCESSOR, Filename, "w+b"); + FlOpenFile (ASL_FILE_PREPROCESSOR, Filename, "w+t"); } /* All done for data table compiler */ @@ -952,7 +952,7 @@ FlOpenMiscOutputFiles ( /* Open the assembly code source file, text mode */ - FlOpenFile (ASL_FILE_ASM_SOURCE_OUTPUT, Filename, "w+"); + FlOpenFile (ASL_FILE_ASM_SOURCE_OUTPUT, Filename, "w+t"); AslCompilerSignon (ASL_FILE_ASM_SOURCE_OUTPUT); AslCompilerFileHeader (ASL_FILE_ASM_SOURCE_OUTPUT); @@ -972,7 +972,7 @@ FlOpenMiscOutputFiles ( /* Open the C code source file, text mode */ - FlOpenFile (ASL_FILE_C_SOURCE_OUTPUT, Filename, "w+"); + FlOpenFile (ASL_FILE_C_SOURCE_OUTPUT, Filename, "w+t"); FlPrintFile (ASL_FILE_C_SOURCE_OUTPUT, "/*\n"); AslCompilerSignon (ASL_FILE_C_SOURCE_OUTPUT); @@ -993,7 +993,7 @@ FlOpenMiscOutputFiles ( /* Open the assembly include file, text mode */ - FlOpenFile (ASL_FILE_ASM_INCLUDE_OUTPUT, Filename, "w+"); + FlOpenFile (ASL_FILE_ASM_INCLUDE_OUTPUT, Filename, "w+t"); AslCompilerSignon (ASL_FILE_ASM_INCLUDE_OUTPUT); AslCompilerFileHeader (ASL_FILE_ASM_INCLUDE_OUTPUT); @@ -1013,7 +1013,7 @@ FlOpenMiscOutputFiles ( /* Open the C include file, text mode */ - FlOpenFile (ASL_FILE_C_INCLUDE_OUTPUT, Filename, "w+"); + FlOpenFile (ASL_FILE_C_INCLUDE_OUTPUT, Filename, "w+t"); FlPrintFile (ASL_FILE_C_INCLUDE_OUTPUT, "/*\n"); AslCompilerSignon (ASL_FILE_C_INCLUDE_OUTPUT); @@ -1034,7 +1034,7 @@ FlOpenMiscOutputFiles ( /* Open the namespace file, text mode */ - FlOpenFile (ASL_FILE_NAMESPACE_OUTPUT, Filename, "w+"); + FlOpenFile (ASL_FILE_NAMESPACE_OUTPUT, Filename, "w+t"); AslCompilerSignon (ASL_FILE_NAMESPACE_OUTPUT); AslCompilerFileHeader (ASL_FILE_NAMESPACE_OUTPUT); diff --git a/source/compiler/asllookup.c b/source/compiler/asllookup.c index 655f9833639a..6df64366b3bf 100644 --- a/source/compiler/asllookup.c +++ b/source/compiler/asllookup.c @@ -1098,7 +1098,7 @@ LkNamespaceLocateBegin ( if (Message) { - sprintf (MsgBuffer, "Tag: %u bit%s, Field: %u bit%s", + sprintf (MsgBuffer, "Size mismatch, Tag: %u bit%s, Field: %u bit%s", TagBitLength, (TagBitLength > 1) ? "s" : "", FieldBitLength, (FieldBitLength > 1) ? "s" : ""); diff --git a/source/compiler/aslmain.c b/source/compiler/aslmain.c index ae288b374d17..0e3e34d2bd95 100644 --- a/source/compiler/aslmain.c +++ b/source/compiler/aslmain.c @@ -63,7 +63,7 @@ Options ( void); static void -HelpMessage ( +FilenameHelp ( void); static void @@ -170,27 +170,36 @@ Options ( ACPI_OPTION ("-g", "Get ACPI tables and write to files (*.dat)"); printf ("\nHelp:\n"); - ACPI_OPTION ("-h", "Additional help and compiler debug options"); + ACPI_OPTION ("-h", "This message"); ACPI_OPTION ("-hc", "Display operators allowed in constant expressions"); + ACPI_OPTION ("-hf", "Display help for output filename generation"); ACPI_OPTION ("-hr", "Display ACPI reserved method names"); ACPI_OPTION ("-ht", "Display currently supported ACPI table names"); + + printf ("\nDebug Options:\n"); + ACPI_OPTION ("-bf -bt", "Create debug file (full or parse tree only) (*.txt)"); + ACPI_OPTION ("-f", "Ignore errors, force creation of AML output file(s)"); + ACPI_OPTION ("-n", "Parse only, no output generation"); + ACPI_OPTION ("-ot", "Display compile times and statistics"); + ACPI_OPTION ("-x ", "Set debug level for trace output"); + ACPI_OPTION ("-z", "Do not insert new compiler ID for DataTables"); } /******************************************************************************* * - * FUNCTION: HelpMessage + * FUNCTION: FilenameHelp * * PARAMETERS: None * * RETURN: None * - * DESCRIPTION: Display help message + * DESCRIPTION: Display help message for output filename generation * ******************************************************************************/ static void -HelpMessage ( +FilenameHelp ( void) { @@ -202,17 +211,6 @@ HelpMessage ( printf (" 2) The prefix of the AMLFileName in the ASL Definition Block\n"); printf (" 3) The prefix of the input filename\n"); printf ("\n"); - - Options (); - - printf ("\nCompiler/Disassembler Debug Options:\n"); - ACPI_OPTION ("-bb -bp -bt", "Create compiler debug/trace file (*.txt)"); - ACPI_OPTION ("", "Types: Parse/Tree/Both"); - ACPI_OPTION ("-f", "Ignore errors, force creation of AML output file(s)"); - ACPI_OPTION ("-n", "Parse only, no output generation"); - ACPI_OPTION ("-ot", "Display compile times"); - ACPI_OPTION ("-x ", "Set debug level for trace output"); - ACPI_OPTION ("-z", "Do not insert new compiler ID for DataTables"); } @@ -430,13 +428,7 @@ AslDoOptions ( case 'b': /* Debug output options */ switch (AcpiGbl_Optarg[0]) { - case 'b': - AslCompilerdebug = 1; /* same as yydebug */ - DtParserdebug = 1; - PrParserdebug = 1; - break; - - case 'p': + case 'f': AslCompilerdebug = 1; /* same as yydebug */ DtParserdebug = 1; PrParserdebug = 1; @@ -530,13 +522,17 @@ AslDoOptions ( switch (AcpiGbl_Optarg[0]) { case '^': - HelpMessage (); + Usage (); exit (0); case 'c': UtDisplayConstantOpcodes (); exit (0); + case 'f': + FilenameHelp (); + exit (0); + case 'r': /* reserved names */ diff --git a/source/compiler/aslsupport.l b/source/compiler/aslsupport.l index 65dd19bf6992..2f739001bc7b 100644 --- a/source/compiler/aslsupport.l +++ b/source/compiler/aslsupport.l @@ -92,19 +92,23 @@ static void AslDoLineDirective ( void) { - char c; + UINT8 c; char *Token; UINT32 LineNumber; char *Filename; + UINT32 i; /* Eat the entire line that contains the #line directive */ - while ((c = (char) input()) != '\n' && c != EOF) + Gbl_LineBufPtr = Gbl_CurrentLineBuffer; + + while ((c = (UINT8) input()) != '\n' && c != EOF) { - AslInsertLineBuffer (c); + *Gbl_LineBufPtr = c; + Gbl_LineBufPtr++; } - AslInsertLineBuffer (0); + *Gbl_LineBufPtr = 0; /* First argument is the actual line number */ @@ -114,10 +118,23 @@ AslDoLineDirective ( goto ResetAndExit; } - /* Convert line number. Subtract one to handle _this_ line */ + /* First argument is the line number */ LineNumber = (UINT32) UtDoConstant (Token); - FlSetLineNumber (LineNumber - 1); + + /* Emit the appropriate number of newlines */ + + Gbl_CurrentColumn = 0; + if (LineNumber > Gbl_CurrentLineNumber) + { + for (i = 0; i < (LineNumber - Gbl_CurrentLineNumber); i++) + { + FlWriteFile (ASL_FILE_SOURCE_OUTPUT, "\n", 1); + Gbl_CurrentColumn++; + } + } + + FlSetLineNumber (LineNumber); /* Second argument is the optional filename (in double quotes) */ @@ -132,7 +149,12 @@ AslDoLineDirective ( /* Third argument is not supported at this time */ ResetAndExit: - AslResetCurrentLineBuffer (); + + /* Reset globals for a new line */ + + Gbl_CurrentLineOffset += Gbl_CurrentColumn; + Gbl_CurrentColumn = 0; + Gbl_LineBufPtr = Gbl_CurrentLineBuffer; } diff --git a/source/compiler/aslutils.c b/source/compiler/aslutils.c index de8ad247a579..9cc109b66ea8 100644 --- a/source/compiler/aslutils.c +++ b/source/compiler/aslutils.c @@ -139,7 +139,7 @@ UtDisplaySupportedTables ( /******************************************************************************* * - * FUNCTION: AcpiPsDisplayConstantOpcodes + * FUNCTION: UtDisplayConstantOpcodes * * PARAMETERS: None * @@ -172,11 +172,11 @@ UtDisplayConstantOpcodes ( * * FUNCTION: UtLocalCalloc * - * PARAMETERS: Size - Bytes to be allocated + * PARAMETERS: Size - Bytes to be allocated * - * RETURN: Pointer to the allocated memory. Guaranteed to be valid. + * RETURN: Pointer to the allocated memory. Guaranteed to be valid. * - * DESCRIPTION: Allocate zero-initialized memory. Aborts the compile on an + * DESCRIPTION: Allocate zero-initialized memory. Aborts the compile on an * allocation failure, on the assumption that nothing more can be * accomplished. * @@ -211,9 +211,9 @@ UtLocalCalloc ( * * FUNCTION: UtBeginEvent * - * PARAMETERS: Name - Ascii name of this event + * PARAMETERS: Name - Ascii name of this event * - * RETURN: Event - Event number (integer index) + * RETURN: Event number (integer index) * * DESCRIPTION: Saves the current time with this event * @@ -244,7 +244,7 @@ UtBeginEvent ( * * FUNCTION: UtEndEvent * - * PARAMETERS: Event - Event number (integer index) + * PARAMETERS: Event - Event number (integer index) * * RETURN: None * @@ -254,7 +254,7 @@ UtBeginEvent ( void UtEndEvent ( - UINT8 Event) + UINT8 Event) { if (Event >= ASL_NUM_EVENTS) @@ -272,7 +272,7 @@ UtEndEvent ( * * FUNCTION: UtHexCharToValue * - * PARAMETERS: HexChar - Hex character in Ascii + * PARAMETERS: HexChar - Hex character in Ascii * * RETURN: The binary value of the hex character * @@ -303,12 +303,13 @@ UtHexCharToValue ( * * FUNCTION: UtConvertByteToHex * - * PARAMETERS: RawByte - Binary data - * Buffer - Pointer to where the hex bytes will be stored + * PARAMETERS: RawByte - Binary data + * Buffer - Pointer to where the hex bytes will be + * stored * * RETURN: Ascii hex byte is stored in Buffer. * - * DESCRIPTION: Perform hex-to-ascii translation. The return data is prefixed + * DESCRIPTION: Perform hex-to-ascii translation. The return data is prefixed * with "0x" * ******************************************************************************/ @@ -331,12 +332,13 @@ UtConvertByteToHex ( * * FUNCTION: UtConvertByteToAsmHex * - * PARAMETERS: RawByte - Binary data - * Buffer - Pointer to where the hex bytes will be stored + * PARAMETERS: RawByte - Binary data + * Buffer - Pointer to where the hex bytes will be + * stored * * RETURN: Ascii hex byte is stored in Buffer. * - * DESCRIPTION: Perform hex-to-ascii translation. The return data is prefixed + * DESCRIPTION: Perform hex-to-ascii translation. The return data is prefixed * with "0x" * ******************************************************************************/ @@ -358,13 +360,13 @@ UtConvertByteToAsmHex ( * * FUNCTION: DbgPrint * - * PARAMETERS: Type - Type of output - * Fmt - Printf format string - * ... - variable printf list + * PARAMETERS: Type - Type of output + * Fmt - Printf format string + * ... - variable printf list * * RETURN: None * - * DESCRIPTION: Conditional print statement. Prints to stderr only if the + * DESCRIPTION: Conditional print statement. Prints to stderr only if the * debug flag is set. * ******************************************************************************/ @@ -438,7 +440,7 @@ UtPrintFormattedName ( * * FUNCTION: UtSetParseOpName * - * PARAMETERS: Op + * PARAMETERS: Op - Parse op to be named. * * RETURN: None * @@ -460,7 +462,7 @@ UtSetParseOpName ( * * FUNCTION: UtDisplaySummary * - * PARAMETERS: FileID - ID of outpout file + * PARAMETERS: FileID - ID of outpout file * * RETURN: None * @@ -571,11 +573,11 @@ UtDisplaySummary ( /******************************************************************************* * - * FUNCTION: UtDisplaySummary + * FUNCTION: UtCheckIntegerRange * - * PARAMETERS: Op - Integer parse node - * LowValue - Smallest allowed value - * HighValue - Largest allowed value + * PARAMETERS: Op - Integer parse node + * LowValue - Smallest allowed value + * HighValue - Largest allowed value * * RETURN: Op if OK, otherwise NULL * @@ -626,11 +628,11 @@ UtCheckIntegerRange ( * * FUNCTION: UtGetStringBuffer * - * PARAMETERS: Length - Size of buffer requested + * PARAMETERS: Length - Size of buffer requested * - * RETURN: Pointer to the buffer. Aborts on allocation failure + * RETURN: Pointer to the buffer. Aborts on allocation failure * - * DESCRIPTION: Allocate a string buffer. Bypass the local + * DESCRIPTION: Allocate a string buffer. Bypass the local * dynamic memory manager for performance reasons (This has a * major impact on the speed of the compiler.) * @@ -661,8 +663,8 @@ UtGetStringBuffer ( * * FUNCTION: UtInternalizeName * - * PARAMETERS: ExternalName - Name to convert - * ConvertedName - Where the converted name is returned + * PARAMETERS: ExternalName - Name to convert + * ConvertedName - Where the converted name is returned * * RETURN: Status * @@ -714,8 +716,8 @@ UtInternalizeName ( * * FUNCTION: UtPadNameWithUnderscores * - * PARAMETERS: NameSeg - Input nameseg - * PaddedNameSeg - Output padded nameseg + * PARAMETERS: NameSeg - Input nameseg + * PaddedNameSeg - Output padded nameseg * * RETURN: Padded nameseg. * @@ -752,8 +754,8 @@ UtPadNameWithUnderscores ( * * FUNCTION: UtAttachNameseg * - * PARAMETERS: Op - Parent parse node - * Name - Full ExternalName + * PARAMETERS: Op - Parent parse node + * Name - Full ExternalName * * RETURN: None; Sets the NameSeg field in parent node * @@ -809,12 +811,12 @@ UtAttachNameseg ( * * FUNCTION: UtAttachNamepathToOwner * - * PARAMETERS: Op - Parent parse node - * NameOp - Node that contains the name + * PARAMETERS: Op - Parent parse node + * NameOp - Node that contains the name * * RETURN: Sets the ExternalName and Namepath in the parent node * - * DESCRIPTION: Store the name in two forms in the parent node: The original + * DESCRIPTION: Store the name in two forms in the parent node: The original * (external) name, and the internalized name that is used within * the ACPI namespace manager. * @@ -854,11 +856,11 @@ UtAttachNamepathToOwner ( * * FUNCTION: UtDoConstant * - * PARAMETERS: String - Hex, Octal, or Decimal string + * PARAMETERS: String - Hex, Octal, or Decimal string * * RETURN: Converted Integer * - * DESCRIPTION: Convert a string to an integer. With error checking. + * DESCRIPTION: Convert a string to an integer, with error checking. * ******************************************************************************/ @@ -889,10 +891,10 @@ UtDoConstant ( * * FUNCTION: UtStrtoul64 * - * PARAMETERS: String - Null terminated string - * Terminater - Where a pointer to the terminating byte is - * returned - * Base - Radix of the string + * PARAMETERS: String - Null terminated string + * Terminater - Where a pointer to the terminating byte + * is returned + * Base - Radix of the string * * RETURN: Converted value * @@ -1072,5 +1074,3 @@ UtStrtoul64 ( return (Status); } - - diff --git a/source/compiler/dttemplate.c b/source/compiler/dttemplate.c index 27b032fa7b48..60844f030002 100644 --- a/source/compiler/dttemplate.c +++ b/source/compiler/dttemplate.c @@ -226,7 +226,7 @@ DtCreateAllTemplates ( } /* - * Create the "special ACPI tables: + * Create the special ACPI tables: * 1) DSDT/SSDT are AML tables, not data tables * 2) FACS and RSDP have non-standard headers */ diff --git a/source/components/debugger/dbdisply.c b/source/components/debugger/dbdisply.c index 7facc8dd08ff..b58cb1c346fb 100644 --- a/source/components/debugger/dbdisply.c +++ b/source/components/debugger/dbdisply.c @@ -792,10 +792,12 @@ AcpiDbDisplayGpes ( ACPI_GPE_EVENT_INFO *GpeEventInfo; ACPI_GPE_REGISTER_INFO *GpeRegisterInfo; char *GpeType; + ACPI_GPE_NOTIFY_INFO *Notify; UINT32 GpeIndex; UINT32 Block = 0; UINT32 i; UINT32 j; + UINT32 Count; char Buffer[80]; ACPI_BUFFER RetBuf; ACPI_STATUS Status; @@ -916,7 +918,14 @@ AcpiDbDisplayGpes ( AcpiOsPrintf ("Handler"); break; case ACPI_GPE_DISPATCH_NOTIFY: - AcpiOsPrintf ("Notify"); + Count = 0; + Notify = GpeEventInfo->Dispatch.NotifyList; + while (Notify) + { + Count++; + Notify = Notify->Next; + } + AcpiOsPrintf ("Implicit Notify on %u devices", Count); break; default: AcpiOsPrintf ("UNKNOWN: %X", diff --git a/source/components/debugger/dbexec.c b/source/components/debugger/dbexec.c index 7818c9ddbef8..4b59f22053a7 100644 --- a/source/components/debugger/dbexec.c +++ b/source/components/debugger/dbexec.c @@ -872,8 +872,8 @@ AcpiDbMethodThread ( if (Info->InitArgs) { - AcpiDbUInt32ToHexString (Info->NumCreated, Info->IndexOfThreadStr); - AcpiDbUInt32ToHexString ((UINT32) AcpiOsGetThreadId (), Info->IdOfThreadStr); + AcpiDbUint32ToHexString (Info->NumCreated, Info->IndexOfThreadStr); + AcpiDbUint32ToHexString ((UINT32) AcpiOsGetThreadId (), Info->IdOfThreadStr); } if (Info->Threads && (Info->NumCreated < Info->NumThreads)) @@ -1063,7 +1063,7 @@ AcpiDbCreateExecutionThreads ( AcpiGbl_DbMethodInfo.ArgTypes[1] = ACPI_TYPE_INTEGER; AcpiGbl_DbMethodInfo.ArgTypes[2] = ACPI_TYPE_INTEGER; - AcpiDbUInt32ToHexString (NumThreads, AcpiGbl_DbMethodInfo.NumThreadsStr); + AcpiDbUint32ToHexString (NumThreads, AcpiGbl_DbMethodInfo.NumThreadsStr); AcpiDbExecuteSetup (&AcpiGbl_DbMethodInfo); diff --git a/source/components/debugger/dbutils.c b/source/components/debugger/dbutils.c index cf29b225de0f..7ce909033965 100644 --- a/source/components/debugger/dbutils.c +++ b/source/components/debugger/dbutils.c @@ -360,7 +360,7 @@ AcpiDbLocalNsLookup ( /******************************************************************************* * - * FUNCTION: AcpiDbUInt32ToHexString + * FUNCTION: AcpiDbUint32ToHexString * * PARAMETERS: Value - The value to be converted to string * Buffer - Buffer for result (not less than 11 bytes) @@ -375,7 +375,7 @@ AcpiDbLocalNsLookup ( ******************************************************************************/ void -AcpiDbUInt32ToHexString ( +AcpiDbUint32ToHexString ( UINT32 Value, char *Buffer) { diff --git a/source/components/disassembler/dmopcode.c b/source/components/disassembler/dmopcode.c index 6d2c3e1ecf55..b52bdb28151f 100644 --- a/source/components/disassembler/dmopcode.c +++ b/source/components/disassembler/dmopcode.c @@ -46,6 +46,7 @@ #include "acparser.h" #include "amlcode.h" #include "acdisasm.h" +#include "acnamesp.h" #ifdef ACPI_DISASSEMBLER @@ -59,6 +60,218 @@ AcpiDmMatchKeyword ( ACPI_PARSE_OBJECT *Op); +/******************************************************************************* + * + * FUNCTION: AcpiDmPredefinedDescription + * + * PARAMETERS: Op - Name() parse object + * + * RETURN: None + * + * DESCRIPTION: Emit a description comment for a predefined ACPI name. + * Used for iASL compiler only. + * + ******************************************************************************/ + +void +AcpiDmPredefinedDescription ( + ACPI_PARSE_OBJECT *Op) +{ +#ifdef ACPI_ASL_COMPILER + const AH_PREDEFINED_NAME *Info; + char *NameString; + int LastCharIsDigit; + int LastCharsAreHex; + + + if (!Op) + { + return; + } + + /* Ensure that the comment field is emitted only once */ + + if (Op->Common.DisasmFlags & ACPI_PARSEOP_PREDEF_CHECKED) + { + return; + } + Op->Common.DisasmFlags |= ACPI_PARSEOP_PREDEF_CHECKED; + + /* Predefined name must start with an underscore */ + + NameString = ACPI_CAST_PTR (char, &Op->Named.Name); + if (NameString[0] != '_') + { + return; + } + + /* + * Check for the special ACPI names: + * _ACd, _ALd, _EJd, _Exx, _Lxx, _Qxx, _Wxx, _T_a + * (where d=decimal_digit, x=hex_digit, a=anything) + * + * Convert these to the generic name for table lookup. + * Note: NameString is guaranteed to be upper case here. + */ + LastCharIsDigit = + (ACPI_IS_DIGIT (NameString[3])); /* d */ + LastCharsAreHex = + (ACPI_IS_XDIGIT (NameString[2]) && /* xx */ + ACPI_IS_XDIGIT (NameString[3])); + + switch (NameString[1]) + { + case 'A': + if ((NameString[2] == 'C') && (LastCharIsDigit)) + { + NameString = "_ACx"; + } + else if ((NameString[2] == 'L') && (LastCharIsDigit)) + { + NameString = "_ALx"; + } + break; + + case 'E': + if ((NameString[2] == 'J') && (LastCharIsDigit)) + { + NameString = "_EJx"; + } + else if (LastCharsAreHex) + { + NameString = "_Exx"; + } + break; + + case 'L': + if (LastCharsAreHex) + { + NameString = "_Lxx"; + } + break; + + case 'Q': + if (LastCharsAreHex) + { + NameString = "_Qxx"; + } + break; + + case 'T': + if (NameString[2] == '_') + { + NameString = "_T_x"; + } + break; + + case 'W': + if (LastCharsAreHex) + { + NameString = "_Wxx"; + } + break; + + default: + break; + } + + /* Match the name in the info table */ + + for (Info = AslPredefinedInfo; Info->Name; Info++) + { + if (ACPI_COMPARE_NAME (NameString, Info->Name)) + { + AcpiOsPrintf (" // %4.4s: %s", + NameString, ACPI_CAST_PTR (char, Info->Description)); + return; + } + } + +#endif + return; +} + + +/******************************************************************************* + * + * FUNCTION: AcpiDmFieldPredefinedDescription + * + * PARAMETERS: Op - Parse object + * + * RETURN: None + * + * DESCRIPTION: Emit a description comment for a resource descriptor tag + * (which is a predefined ACPI name.) Used for iASL compiler only. + * + ******************************************************************************/ + +void +AcpiDmFieldPredefinedDescription ( + ACPI_PARSE_OBJECT *Op) +{ +#ifdef ACPI_ASL_COMPILER + ACPI_PARSE_OBJECT *IndexOp; + char *Tag; + const ACPI_OPCODE_INFO *OpInfo; + const AH_PREDEFINED_NAME *Info; + + + if (!Op) + { + return; + } + + /* Ensure that the comment field is emitted only once */ + + if (Op->Common.DisasmFlags & ACPI_PARSEOP_PREDEF_CHECKED) + { + return; + } + Op->Common.DisasmFlags |= ACPI_PARSEOP_PREDEF_CHECKED; + + /* + * Op must be one of the Create* operators: CreateField, CreateBitField, + * CreateByteField, CreateWordField, CreateDwordField, CreateQwordField + */ + OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode); + if (!(OpInfo->Flags & AML_CREATE)) + { + return; + } + + /* Second argument is the Index argument */ + + IndexOp = Op->Common.Value.Arg; + IndexOp = IndexOp->Common.Next; + + /* Index argument must be a namepath */ + + if (IndexOp->Common.AmlOpcode != AML_INT_NAMEPATH_OP) + { + return; + } + + /* Major cheat: We previously put the Tag ptr in the Node field */ + + Tag = ACPI_CAST_PTR (char, IndexOp->Common.Node); + + /* Match the name in the info table */ + + for (Info = AslPredefinedInfo; Info->Name; Info++) + { + if (ACPI_COMPARE_NAME (Tag, Info->Name)) + { + AcpiOsPrintf (" // %4.4s: %s", Tag, + ACPI_CAST_PTR (char, Info->Description)); + return; + } + } + +#endif + return; +} + + /******************************************************************************* * * FUNCTION: AcpiDmMethodFlags diff --git a/source/components/disassembler/dmwalk.c b/source/components/disassembler/dmwalk.c index dd3ee002557b..6a6b95e1f71d 100644 --- a/source/components/disassembler/dmwalk.c +++ b/source/components/disassembler/dmwalk.c @@ -453,7 +453,7 @@ AcpiDmDescendingOp ( * keep track of the current column. */ Info->Count++; - if (Info->Count /*+Info->LastLevel*/ > 10) + if (Info->Count /* +Info->LastLevel */ > 10) { Info->Count = 0; AcpiOsPrintf ("\n"); @@ -533,6 +533,10 @@ AcpiDmDescendingOp ( AcpiDmMethodFlags (Op); AcpiOsPrintf (")"); + + /* Emit description comment for Method() with a predefined ACPI name */ + + AcpiDmPredefinedDescription (Op); break; @@ -603,7 +607,8 @@ AcpiDmDescendingOp ( default: - AcpiOsPrintf ("*** Unhandled named opcode %X\n", Op->Common.AmlOpcode); + AcpiOsPrintf ("*** Unhandled named opcode %X\n", + Op->Common.AmlOpcode); break; } } @@ -644,7 +649,8 @@ AcpiDmDescendingOp ( NextOp = NextOp->Common.Next; Info->Flags = ACPI_PARSEOP_PARAMLIST; - AcpiDmWalkParseTree (NextOp, AcpiDmDescendingOp, AcpiDmAscendingOp, Info); + AcpiDmWalkParseTree (NextOp, AcpiDmDescendingOp, + AcpiDmAscendingOp, Info); Info->Flags = 0; Info->Level = Level; @@ -686,12 +692,18 @@ AcpiDmDescendingOp ( if (Op->Common.DisasmOpcode == ACPI_DASM_RESOURCE) { /* - * We have a resource list. Don't need to output - * the buffer size Op. Open up a new block + * We have a resource list. Don't need to output + * the buffer size Op. Open up a new block */ NextOp->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; NextOp = NextOp->Common.Next; - AcpiOsPrintf (")\n"); + AcpiOsPrintf (")"); + + /* Emit description comment for Name() with a predefined ACPI name */ + + AcpiDmPredefinedDescription (Op->Asl.Parent); + + AcpiOsPrintf ("\n"); AcpiDmIndent (Info->Level); AcpiOsPrintf ("{\n"); return (AE_OK); @@ -719,7 +731,7 @@ AcpiDmDescendingOp ( case AML_PACKAGE_OP: - /* The next op is the size or predicate parameter */ + /* The next op is the size parameter */ NextOp = AcpiPsGetDepthNext (NULL, Op); if (NextOp) @@ -772,6 +784,7 @@ AcpiDmAscendingOp ( void *Context) { ACPI_OP_WALK_INFO *Info = Context; + ACPI_PARSE_OBJECT *ParentOp; if (Op->Common.DisasmFlags & ACPI_PARSEOP_IGNORE) @@ -797,6 +810,19 @@ AcpiDmAscendingOp ( AcpiOsPrintf (")"); + if (Op->Common.AmlOpcode == AML_NAME_OP) + { + /* Emit description comment for Name() with a predefined ACPI name */ + + AcpiDmPredefinedDescription (Op); + } + else + { + /* For Create* operators, attempt to emit resource tag description */ + + AcpiDmFieldPredefinedDescription (Op); + } + /* Could be a nested operator, check if comma required */ if (!AcpiDmCommaIfListMember (Op)) @@ -911,7 +937,20 @@ AcpiDmAscendingOp ( */ if (Op->Common.Next) { - AcpiOsPrintf (")\n"); + AcpiOsPrintf (")"); + + /* Emit description comment for Name() with a predefined ACPI name */ + + ParentOp = Op->Common.Parent; + if (ParentOp) + { + ParentOp = ParentOp->Common.Parent; + if (ParentOp && ParentOp->Asl.AmlOpcode == AML_NAME_OP) + { + AcpiDmPredefinedDescription (ParentOp); + } + } + AcpiOsPrintf ("\n"); AcpiDmIndent (Level - 1); AcpiOsPrintf ("{\n"); } diff --git a/source/components/dispatcher/dsfield.c b/source/components/dispatcher/dsfield.c index 8a364c8a90bc..e3e05b925c2d 100644 --- a/source/components/dispatcher/dsfield.c +++ b/source/components/dispatcher/dsfield.c @@ -152,8 +152,8 @@ AcpiDsCreateExternalRegion ( * CreateBitFieldOp, * CreateByteFieldOp, * CreateWordFieldOp, - * CreateDWordFieldOp, - * CreateQWordFieldOp, + * CreateDwordFieldOp, + * CreateQwordFieldOp, * CreateFieldOp (all of which define a field in a buffer) * ******************************************************************************/ diff --git a/source/components/dispatcher/dsopcode.c b/source/components/dispatcher/dsopcode.c index 7569236f2ebe..6fd58d86e6ef 100644 --- a/source/components/dispatcher/dsopcode.c +++ b/source/components/dispatcher/dsopcode.c @@ -523,18 +523,18 @@ AcpiDsEvalTableRegionOperands ( /* - * This is where we evaluate the SignatureString and OemIDString - * and OemTableIDString of the DataTableRegion declaration + * This is where we evaluate the Signature string, OemId string, + * and OemTableId string of the Data Table Region declaration */ Node = Op->Common.Node; - /* NextOp points to SignatureString op */ + /* NextOp points to Signature string op */ NextOp = Op->Common.Value.Arg; /* - * Evaluate/create the SignatureString and OemIDString - * and OemTableIDString operands + * Evaluate/create the Signature string, OemId string, + * and OemTableId string operands */ Status = AcpiDsCreateOperands (WalkState, NextOp); if (ACPI_FAILURE (Status)) @@ -543,8 +543,8 @@ AcpiDsEvalTableRegionOperands ( } /* - * Resolve the SignatureString and OemIDString - * and OemTableIDString operands + * Resolve the Signature string, OemId string, + * and OemTableId string operands */ Status = AcpiExResolveOperands (Op->Common.AmlOpcode, ACPI_WALK_OPERANDS, WalkState); diff --git a/source/components/events/evgpe.c b/source/components/events/evgpe.c index a3781a55c66b..623795a83619 100644 --- a/source/components/events/evgpe.c +++ b/source/components/events/evgpe.c @@ -518,6 +518,7 @@ AcpiEvAsynchExecuteGpeMethod ( ACPI_STATUS Status; ACPI_GPE_EVENT_INFO *LocalGpeEventInfo; ACPI_EVALUATE_INFO *Info; + ACPI_GPE_NOTIFY_INFO *Notify; ACPI_FUNCTION_TRACE (EvAsynchExecuteGpeMethod); @@ -573,10 +574,18 @@ AcpiEvAsynchExecuteGpeMethod ( * completes. The notify handlers are NOT invoked synchronously * from this thread -- because handlers may in turn run other * control methods. + * + * June 2012: Expand implicit notify mechanism to support + * notifies on multiple device objects. */ - Status = AcpiEvQueueNotifyRequest ( - LocalGpeEventInfo->Dispatch.DeviceNode, - ACPI_NOTIFY_DEVICE_WAKE); + Notify = LocalGpeEventInfo->Dispatch.NotifyList; + while (ACPI_SUCCESS (Status) && Notify) + { + Status = AcpiEvQueueNotifyRequest (Notify->DeviceNode, + ACPI_NOTIFY_DEVICE_WAKE); + + Notify = Notify->Next; + } break; case ACPI_GPE_DISPATCH_METHOD: diff --git a/source/components/events/evgpeutil.c b/source/components/events/evgpeutil.c index 70580cd853c9..00057350c46a 100644 --- a/source/components/events/evgpeutil.c +++ b/source/components/events/evgpeutil.c @@ -391,6 +391,8 @@ AcpiEvDeleteGpeHandlers ( void *Context) { ACPI_GPE_EVENT_INFO *GpeEventInfo; + ACPI_GPE_NOTIFY_INFO *Notify; + ACPI_GPE_NOTIFY_INFO *Next; UINT32 i; UINT32 j; @@ -412,10 +414,27 @@ AcpiEvDeleteGpeHandlers ( if ((GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) == ACPI_GPE_DISPATCH_HANDLER) { + /* Delete an installed handler block */ + ACPI_FREE (GpeEventInfo->Dispatch.Handler); GpeEventInfo->Dispatch.Handler = NULL; GpeEventInfo->Flags &= ~ACPI_GPE_DISPATCH_MASK; } + else if ((GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) == + ACPI_GPE_DISPATCH_NOTIFY) + { + /* Delete the implicit notification device list */ + + Notify = GpeEventInfo->Dispatch.NotifyList; + while (Notify) + { + Next = Notify->Next; + ACPI_FREE (Notify); + Notify = Next; + } + GpeEventInfo->Dispatch.NotifyList = NULL; + GpeEventInfo->Flags &= ~ACPI_GPE_DISPATCH_MASK; + } } } diff --git a/source/components/events/evxfgpe.c b/source/components/events/evxfgpe.c index c0dd88c77752..daea88804ddb 100644 --- a/source/components/events/evxfgpe.c +++ b/source/components/events/evxfgpe.c @@ -295,9 +295,10 @@ AcpiSetupGpeForWake ( ACPI_HANDLE GpeDevice, UINT32 GpeNumber) { - ACPI_STATUS Status = AE_BAD_PARAMETER; + ACPI_STATUS Status; ACPI_GPE_EVENT_INFO *GpeEventInfo; ACPI_NAMESPACE_NODE *DeviceNode; + ACPI_GPE_NOTIFY_INFO *Notify; ACPI_CPU_FLAGS Flags; @@ -338,26 +339,69 @@ AcpiSetupGpeForWake ( /* Ensure that we have a valid GPE number */ GpeEventInfo = AcpiEvGetGpeEventInfo (GpeDevice, GpeNumber); - if (GpeEventInfo) + if (!GpeEventInfo) { - /* - * If there is no method or handler for this GPE, then the - * WakeDevice will be notified whenever this GPE fires (aka - * "implicit notify") Note: The GPE is assumed to be - * level-triggered (for windows compatibility). - */ - if ((GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) == - ACPI_GPE_DISPATCH_NONE) - { - GpeEventInfo->Flags = - (ACPI_GPE_DISPATCH_NOTIFY | ACPI_GPE_LEVEL_TRIGGERED); - GpeEventInfo->Dispatch.DeviceNode = DeviceNode; - } - - GpeEventInfo->Flags |= ACPI_GPE_CAN_WAKE; - Status = AE_OK; + Status = AE_BAD_PARAMETER; + goto UnlockAndExit; } + /* + * If there is no method or handler for this GPE, then the + * WakeDevice will be notified whenever this GPE fires. This is + * known as an "implicit notify". Note: The GPE is assumed to be + * level-triggered (for windows compatibility). + */ + if ((GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) == + ACPI_GPE_DISPATCH_NONE) + { + /* + * This is the first device for implicit notify on this GPE. + * Just set the flags here, and enter the NOTIFY block below. + */ + GpeEventInfo->Flags = + (ACPI_GPE_DISPATCH_NOTIFY | ACPI_GPE_LEVEL_TRIGGERED); + } + + /* + * If we already have an implicit notify on this GPE, add + * this device to the notify list. + */ + if ((GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK) == + ACPI_GPE_DISPATCH_NOTIFY) + { + /* Ensure that the device is not already in the list */ + + Notify = GpeEventInfo->Dispatch.NotifyList; + while (Notify) + { + if (Notify->DeviceNode == DeviceNode) + { + Status = AE_ALREADY_EXISTS; + goto UnlockAndExit; + } + Notify = Notify->Next; + } + + /* Add this device to the notify list for this GPE */ + + Notify = ACPI_ALLOCATE_ZEROED (sizeof (ACPI_GPE_NOTIFY_INFO)); + if (!Notify) + { + Status = AE_NO_MEMORY; + goto UnlockAndExit; + } + + Notify->DeviceNode = DeviceNode; + Notify->Next = GpeEventInfo->Dispatch.NotifyList; + GpeEventInfo->Dispatch.NotifyList = Notify; + } + + /* Mark the GPE as a possible wake event */ + + GpeEventInfo->Flags |= ACPI_GPE_CAN_WAKE; + Status = AE_OK; + +UnlockAndExit: AcpiOsReleaseLock (AcpiGbl_GpeLock, Flags); return_ACPI_STATUS (Status); } diff --git a/source/components/executer/exconfig.c b/source/components/executer/exconfig.c index 9e05497b9f56..581bc574e4dc 100644 --- a/source/components/executer/exconfig.c +++ b/source/components/executer/exconfig.c @@ -179,7 +179,7 @@ AcpiExLoadTableOp ( ACPI_FUNCTION_TRACE (ExLoadTableOp); - /* Validate lengths for the SignatureString, OEMIDString, OEMTableID */ + /* Validate lengths for the Signature, OemId, and OemTableId strings */ if ((Operand[0]->String.Length > ACPI_NAME_SIZE) || (Operand[1]->String.Length > ACPI_OEM_ID_SIZE) || diff --git a/source/components/utilities/utmisc.c b/source/components/utilities/utmisc.c index 7ce00df64281..72662b95dd01 100644 --- a/source/components/utilities/utmisc.c +++ b/source/components/utilities/utmisc.c @@ -53,6 +53,7 @@ ACPI_MODULE_NAME ("utmisc") +#if defined ACPI_ASL_COMPILER || defined ACPI_EXEC_APP /******************************************************************************* * * FUNCTION: UtConvertBackslashes @@ -86,6 +87,7 @@ UtConvertBackslashes ( Pathname++; } } +#endif /******************************************************************************* @@ -1330,5 +1332,3 @@ AcpiUtWalkPackageTree ( return_ACPI_STATUS (AE_AML_INTERNAL); } - - diff --git a/source/include/acdebug.h b/source/include/acdebug.h index bcc505c8d511..f89cf378fa0d 100644 --- a/source/include/acdebug.h +++ b/source/include/acdebug.h @@ -405,7 +405,7 @@ AcpiDbLocalNsLookup ( char *Name); void -AcpiDbUInt32ToHexString ( +AcpiDbUint32ToHexString ( UINT32 Value, char *Buffer); diff --git a/source/include/acdisasm.h b/source/include/acdisasm.h index 9ec12713b499..e5c5c11f0cbc 100644 --- a/source/include/acdisasm.h +++ b/source/include/acdisasm.h @@ -518,6 +518,14 @@ void AcpiDmMethodFlags ( ACPI_PARSE_OBJECT *Op); +void +AcpiDmPredefinedDescription ( + ACPI_PARSE_OBJECT *Op); + +void +AcpiDmFieldPredefinedDescription ( + ACPI_PARSE_OBJECT *Op); + void AcpiDmFieldFlags ( ACPI_PARSE_OBJECT *Op); diff --git a/source/include/acglobal.h b/source/include/acglobal.h index 79e53d07e2ce..5535c1dc5176 100644 --- a/source/include/acglobal.h +++ b/source/include/acglobal.h @@ -479,4 +479,14 @@ ACPI_EXTERN UINT32 AcpiGbl_SizeOfAcpiObjects; #endif /* ACPI_DEBUGGER */ + +/***************************************************************************** + * + * Info/help support + * + ****************************************************************************/ + +extern const AH_PREDEFINED_NAME AslPredefinedInfo[]; + + #endif /* __ACGLOBAL_H__ */ diff --git a/source/include/aclocal.h b/source/include/aclocal.h index 68ea95b7c8a1..0f79fa2a00b2 100644 --- a/source/include/aclocal.h +++ b/source/include/aclocal.h @@ -462,6 +462,15 @@ typedef struct acpi_gpe_handler_info } ACPI_GPE_HANDLER_INFO; +/* Notify info for implicit notify, multiple device objects */ + +typedef struct acpi_gpe_notify_info +{ + ACPI_NAMESPACE_NODE *DeviceNode; /* Device to be notified */ + struct acpi_gpe_notify_info *Next; + +} ACPI_GPE_NOTIFY_INFO; + /* * GPE dispatch info. At any time, the GPE can have at most one type * of dispatch - Method, Handler, or Implicit Notify. @@ -469,8 +478,8 @@ typedef struct acpi_gpe_handler_info typedef union acpi_gpe_dispatch_info { ACPI_NAMESPACE_NODE *MethodNode; /* Method node for this GPE level */ - struct acpi_gpe_handler_info *Handler; /* Installed GPE handler */ - ACPI_NAMESPACE_NODE *DeviceNode; /* Parent _PRW device for implicit notify */ + ACPI_GPE_HANDLER_INFO *Handler; /* Installed GPE handler */ + ACPI_GPE_NOTIFY_INFO *NotifyList; /* List of _PRW devices for implicit notifies */ } ACPI_GPE_DISPATCH_INFO; @@ -480,7 +489,7 @@ typedef union acpi_gpe_dispatch_info */ typedef struct acpi_gpe_event_info { - union acpi_gpe_dispatch_info Dispatch; /* Either Method or Handler */ + union acpi_gpe_dispatch_info Dispatch; /* Either Method, Handler, or NotifyList */ struct acpi_gpe_register_info *RegisterInfo; /* Backpointer to register info */ UINT8 Flags; /* Misc info about this GPE */ UINT8 GpeNumber; /* This GPE */ @@ -960,6 +969,7 @@ typedef struct acpi_parse_state #define ACPI_PARSEOP_IGNORE 0x01 #define ACPI_PARSEOP_PARAMLIST 0x02 #define ACPI_PARSEOP_EMPTY_TERMLIST 0x04 +#define ACPI_PARSEOP_PREDEF_CHECKED 0x08 #define ACPI_PARSEOP_SPECIAL 0x10 @@ -1311,4 +1321,20 @@ typedef struct acpi_debug_mem_block #define ACPI_NUM_MEM_LISTS 2 +/***************************************************************************** + * + * Info/help support + * + ****************************************************************************/ + +typedef struct ah_predefined_name +{ + char *Name; + char *Description; +#ifndef ACPI_ASL_COMPILER + char *Action; +#endif + +} AH_PREDEFINED_NAME; + #endif /* __ACLOCAL_H__ */ diff --git a/source/include/acpixf.h b/source/include/acpixf.h index 70a00d7d9a20..9ec5f97c4893 100644 --- a/source/include/acpixf.h +++ b/source/include/acpixf.h @@ -48,7 +48,7 @@ /* Current ACPICA subsystem version in YYYYMMDD format */ -#define ACPI_CA_VERSION 0x20120518 +#define ACPI_CA_VERSION 0x20120620 #include "acconfig.h" #include "actypes.h" diff --git a/source/include/acpredef.h b/source/include/acpredef.h index c17a6d914542..c5b115eca37d 100644 --- a/source/include/acpredef.h +++ b/source/include/acpredef.h @@ -512,14 +512,14 @@ static const ACPI_PREDEFINED_INFO PredefinedNames[] = {{"_TMP", 0, ACPI_RTYPE_INTEGER}}, {{"_TPC", 0, ACPI_RTYPE_INTEGER}}, {{"_TPT", 1, 0}}, - {{"_TRT", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each 2Ref/6Int */ + {{"_TRT", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each 2 Ref/6 Int */ {{{ACPI_PTYPE2, ACPI_RTYPE_REFERENCE, 2, ACPI_RTYPE_INTEGER}, 6, 0}}, - {{"_TSD", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each 5Int with count */ + {{"_TSD", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each 5 Int with count */ {{{ACPI_PTYPE2_COUNT,ACPI_RTYPE_INTEGER, 5,0}, 0,0}}, {{"_TSP", 0, ACPI_RTYPE_INTEGER}}, - {{"_TSS", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each 5Int */ + {{"_TSS", 0, ACPI_RTYPE_PACKAGE}}, /* Variable-length (Pkgs) each 5 Int */ {{{ACPI_PTYPE2, ACPI_RTYPE_INTEGER, 5,0}, 0,0}}, {{"_TST", 0, ACPI_RTYPE_INTEGER}}, diff --git a/source/include/acutils.h b/source/include/acutils.h index be568766af69..d720fcc92a1f 100644 --- a/source/include/acutils.h +++ b/source/include/acutils.h @@ -429,7 +429,7 @@ AcpiUtDumpBuffer ( UINT8 *Buffer, UINT32 Count, UINT32 Display, - UINT32 componentId); + UINT32 ComponentId); void AcpiUtDumpBuffer2 ( diff --git a/source/include/platform/acwin64.h b/source/include/platform/acwin64.h index 022baf050e71..94966c393dd4 100644 --- a/source/include/platform/acwin64.h +++ b/source/include/platform/acwin64.h @@ -79,5 +79,6 @@ #endif +/*! [End] no source code translation !*/ #endif /* __ACWIN_H__ */ diff --git a/source/tools/acpiexec/aeexec.c b/source/tools/acpiexec/aeexec.c index 407519f9648e..d991b9c41f60 100644 --- a/source/tools/acpiexec/aeexec.c +++ b/source/tools/acpiexec/aeexec.c @@ -658,11 +658,14 @@ AeMiscellaneousTests ( AE_CHECK_OK (AcpiSetupGpeForWake, Status); Status = AcpiSetGpeWakeMask (NULL, 5, ACPI_GPE_ENABLE); - AE_CHECK_OK (AcpiGpeWakeup, Status); + AE_CHECK_OK (AcpiSetGpeWakeMask, Status); Status = AcpiSetupGpeForWake (Handle, NULL, 6); AE_CHECK_OK (AcpiSetupGpeForWake, Status); + Status = AcpiSetupGpeForWake (ACPI_ROOT_OBJECT, NULL, 6); + AE_CHECK_OK (AcpiSetupGpeForWake, Status); + Status = AcpiSetupGpeForWake (Handle, NULL, 9); AE_CHECK_OK (AcpiSetupGpeForWake, Status); diff --git a/source/tools/acpihelp/acpihelp.h b/source/tools/acpihelp/acpihelp.h index 427353a06b51..d1ac41d38bdd 100644 --- a/source/tools/acpihelp/acpihelp.h +++ b/source/tools/acpihelp/acpihelp.h @@ -103,14 +103,6 @@ typedef struct ah_asl_keyword } AH_ASL_KEYWORD; -typedef struct ah_predefined_name -{ - char *Name; - char *Description; - char *Action; - -} AH_PREDEFINED_NAME; - typedef struct ah_device_id { char *Name; @@ -122,7 +114,6 @@ typedef struct ah_device_id extern const AH_AML_OPCODE AmlOpcodeInfo[]; extern const AH_ASL_OPERATOR AslOperatorInfo[]; extern const AH_ASL_KEYWORD AslKeywordInfo[]; -extern const AH_PREDEFINED_NAME AslPredefinedInfo[]; extern BOOLEAN AhDisplayAll; void diff --git a/source/tools/acpihelp/ahpredef.c b/source/tools/acpihelp/ahpredef.c deleted file mode 100644 index 2baf711ab8f5..000000000000 --- a/source/tools/acpihelp/ahpredef.c +++ /dev/null @@ -1,312 +0,0 @@ -/****************************************************************************** - * - * Module Name: ahpredef - Table of all known ACPI predefined names - * - *****************************************************************************/ - -/* - * Copyright (C) 2000 - 2012, Intel Corp. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions, and the following disclaimer, - * without modification. - * 2. Redistributions in binary form must reproduce at minimum a disclaimer - * substantially similar to the "NO WARRANTY" disclaimer below - * ("Disclaimer") and any redistribution must be conditioned upon - * including a substantially similar Disclaimer requirement for further - * binary redistribution. - * 3. Neither the names of the above-listed copyright holders nor the names - * of any contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * Alternatively, this software may be distributed under the terms of the - * GNU General Public License ("GPL") version 2 as published by the Free - * Software Foundation. - * - * NO WARRANTY - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGES. - */ - -#include "acpihelp.h" - -/* - * Predefined ACPI names, with short description and return value. - * This table was extracted directly from the ACPI specification. - */ -const AH_PREDEFINED_NAME AslPredefinedInfo[] = -{ - {"_ACx", "Active Cooling", "Returns the active cooling policy threshold values"}, - {"_ADR", "Address", "Returns the address of a device on its parent bus"}, - {"_AEI", "ACPI Event Interrupts", "Returns a list of GPIO events to be used as ACPI events"}, - {"_ALC", "Ambient Light Chromaticity", "Returns the ambient light color chromaticity"}, - {"_ALI", "Ambient Light Illuminance", "Returns the ambient light brightness"}, - {"_ALN", "Alignment", "Base alignment, Resource Descriptor field"}, - {"_ALP", "Ambient Light Polling", "Returns the ambient light sensor polling frequency"}, - {"_ALR", "Ambient Light Response", "Returns the ambient light brightness to display brightness mappings"}, - {"_ALT", "Ambient Light Temperature", "Returns the ambient light color temperature"}, - {"_ALx", "Active List", "Returns a list of active cooling device objects"}, - {"_ART", "Active cooling Relationship Table", "Returns thermal relationship information between platform devices and fan devices"}, - {"_ASI", "Address Space Id", "Resource Descriptor field"}, - {"_ASZ", "Access Size", "Resource Descriptor field"}, - {"_ATT", "Type-Specific Attribute", "Resource Descriptor field"}, - {"_BAS", "Base Address", "Range base address, Resource Descriptor field"}, - {"_BBN", "Bios Bus Number", "Returns the PCI bus number returned by the BIOS"}, - {"_BCL", "Brightness Control Levels", "Returns a list of supported brightness control levels"}, - {"_BCM", "Brightness Control Method", "Sets the brightness level of the display device"}, - {"_BCT", "Battery Charge Time", "Returns time remaining to complete charging battery"}, - {"_BDN", "Bios Dock Name", "Returns the Dock ID returned by the BIOS"}, - {"_BFS", "Back From Sleep", "Inform AML of a wake event"}, - {"_BIF", "Battery Information", "Returns a Control Method Battery information block"}, - {"_BIX", "Battery Information Extended", "Returns a Control Method Battery extended information block"}, - {"_BLT", "Battery Level Threshold", "Set battery level threshold preferences"}, - {"_BM_", "Bus Master", "Resource Descriptor field"}, - {"_BMA", "Battery Measurement Averaging Interval", "Sets battery measurement averaging interval"}, - {"_BMC", "Battery Maintenance Control", "Sets battery maintenance and control features"}, - {"_BMD", "Battery Maintenance Data", "Returns battery maintenance, control, and state data"}, - {"_BMS", "Battery Measurement Sampling Time", "Sets the battery measurement sampling time"}, - {"_BQC", "Brightness Query Current", "Returns the current display brightness level"}, - {"_BST", "Battery Status", "Returns a Control Method Battery status block"}, - {"_BTM", "Battery Time", "Returns the battery runtime"}, - {"_BTP", "Battery Trip Point", "Sets a Control Method Battery trip point"}, - {"_CBA", "Configuration Base Address", "Sets the CBA for a PCI Express host bridge"}, - {"_CDM", "Clock Domain", "Returns a logical processor's clock domain identifier"}, - {"_CID", "Compatible ID", "Returns a device's Plug and Play Compatible ID list"}, - {"_CLS", "Class Code", "Returns PCI class code and subclass"}, - {"_CPC", "Continuous Performance Control", "Returns a list of performance control interfaces"}, - {"_CRS", "Current Resource Settings", "Returns the current resource settings for a device"}, - {"_CRT", "Critical Temperature", "Returns the shutdown critical temperature"}, - {"_CSD", "C State Dependencies", "Returns a list of C-state dependencies"}, - {"_CST", "C States", "Returns a list of supported C-states"}, - {"_CWS", "Clear Wake Alarm Status", "Clear the status of wake alarms"}, - {"_DBT", "Debounce Timeout", "Timeout value, Resource Descriptor field"}, - {"_DCK", "Dock", "Sets docking isolation. Presence indicates device is a docking station"}, - {"_DCS", "Display Current Status", "Returns status of the display output device"}, - {"_DDC", "Display Data Current", "Returns the EDID for the display output device"}, - {"_DDN", "Dos Device Name", "Returns a device logical name"}, - {"_DEC", "Decode", "Device decoding type, Resource Descriptor field"}, - {"_DEP", "Dependencies", "Returns a list of operation region dependencies"}, - {"_DGS", "Display Graphics State", "Return the current state of the output device"}, - {"_DIS", "Disable", "Disables a device"}, - {"_DLM", "Device Lock Mutex", "Defines mutex for OS/AML sharing"}, - {"_DMA", "Direct Memory Access", "Returns a device's current resources for DMA transactions"}, - {"_DOD", "Display Output Devices", "Enumerate all devices attached to the display adapter"}, - {"_DOS", "Disable Output Switching", "Sets the display output switching mode"}, - {"_DPL", "Device Selection Polarity", "Polarity of Device Selection signal, Resource Descriptor field"}, - {"_DRS", "Drive Strength", "Drive Strength setting for GPIO connection, Resource Descriptor field"}, - {"_DSM", "Device Specific Method", "Executes device-specific functions"}, - {"_DSS", "Device Set State", "Sets the display device state"}, - {"_DSW", "Device Sleep Wake", "Sets the sleep and wake transition states for a device"}, - {"_DTI", "Device Temperature Indication", "Conveys native device temperature to the platform"}, - {"_Exx", "Edge GPE", "Method executed as a result of a general-purpose event"}, - {"_EC_", "Embedded Controller", "returns EC offset and query information"}, - {"_EDL", "Eject Device List", "Returns a list of devices that are dependent on a device (docking)"}, - {"_EJD", "Ejection Dependent Device", "Returns the name of dependent (parent) device (docking)"}, - {"_EJx", "Eject", "Begin or cancel a device ejection request (docking)"}, - {"_END", "Endian-ness", "Endian orientation, Resource Descriptor field"}, - {"_EVT", "Event", "Event method for GPIO events"}, - {"_FDE", "Floppy Disk Enumerate", "Returns floppy disk configuration information"}, - {"_FDI", "Floppy Drive Information", "Returns a floppy drive information block"}, - {"_FDM", "Floppy Drive Mode", "Sets a floppy drive speed"}, - {"_FIF", "Fan Information", "Returns fan device information"}, - {"_FIX", "Fixed Register Resource Provider", "Returns a list of devices that implement FADT register blocks"}, - {"_FLC", "Flow Control", "Flow control, Resource Descriptor field"}, - {"_FPS", "Fan Performance States", "Returns a list of supported fan performance states"}, - {"_FSL", "Fan Set Level", "Control method that sets the fan device's speed level (performance state)"}, - {"_FST", "Fan Status", "Returns current status information for a fan device"}, - {"_GAI", "Get Averaging Interval", "Returns the power meter averaging interval"}, - {"_GCP", "Get Capability", "Get device time capabilities"}, - {"_GHL", "Get Hardware Limit", "Returns the hardware limit enforced by the power meter"}, - {"_GL_", "Global Lock", "OS-defined Global Lock mutex object"}, - {"_GLK", "Global Lock", "Returns a device's Global Lock requirement for device access"}, - {"_GPD", "Get Post Data", "Returns the value of the VGA device that will be posted at boot"}, - {"_GPE", "General Purpose Events", "(1) predefined Scope (\\_GPE.)"}, - {"_GRA", "Granularity", "Address space granularity, Resource Descriptor field"}, - {"_GSB", "Global System Interrupt Base", "Returns the GSB for a I/O APIC device"}, - {"_GRT", "Get Real Time", "Returns current time-of-day"}, - {"_GTF", "Get Task File", "Returns a list of ATA commands to restore a drive to default state"}, - {"_GTM", "Get Timing Mode", "Returns a list of IDE controller timing information"}, - {"_GTS", "Going To Sleep", "Inform AML of pending sleep"}, - {"_GWS", "Get Wake Status", "Return status of wake alarms"}, - {"_HE_", "High-Edge", "Interrupt triggering, Resource Descriptor field"}, - {"_HID", "Hardware ID", "Returns a device's Plug and Play Hardware ID"}, - {"_HOT", "Hot Temperature", "Returns the critical temperature for sleep (entry to S4)"}, - {"_HPP", "Hot Plug Parameters", "Returns a list of hot-plug information for a PCI device"}, - {"_HPX", "Hot Plug Parameter Extensions", "Returns a list of hot-plug information for a PCI device. Supersedes _HPP"}, - {"_HRV", "Hardware Revision", "Returns a hardware revision value"}, - {"_IFT", "IPMI Interface Type", "See the Intelligent Platform Management Interface Specification"}, - {"_INI", "Initialize", "Performs device specific initialization"}, - {"_INT", "Interrupts", "Interrupt mask bits, Resource Descriptor field"}, - {"_IOR", "I/O Restriction", "Restriction type, Resource Descriptor field"}, - {"_IRC", "Inrush Current", "Presence indicates that a device has a significant inrush current draw"}, - {"_Lxx", "Level GPE", "Control method executed as a result of a general-purpose event"}, - {"_LCK", "Lock", "Locks or unlocks a device (docking)"}, - {"_LEN", "Length", "Range length, Resource Descriptor field"}, - {"_LID", "Lid", "Returns the open/closed status of the lid on a mobile system"}, - {"_LIN", "Lines In Use", "Handshake lines, Resource Descriptor field"}, - {"_LL_", "Low Level", "Interrupt polarity, Resource Descriptor field"}, - {"_MAF", "Maximum Address Fixed", "Resource Descriptor field"}, - {"_MAT", "Multiple Apic Table Entry", "Returns a list of MADT APIC structure entries"}, - {"_MAX", "Maximum Base Address", "Resource Descriptor field"}, - {"_MBM", "Memory Bandwidth Monitoring Data", "Returns bandwidth monitoring data for a memory device"}, - {"_MEM", "Memory Attributes", "Resource Descriptor field"}, - {"_MIF", "Minimum Address Fixed", "Resource Descriptor field"}, - {"_MIN", "Minimum Base Address", "Resource Descriptor field"}, - {"_MLS", "Multiple Language String", "Returns a device description in multiple languages"}, - {"_MOD", "Mode", "Interrupt mode, Resource Descriptor field"}, - {"_MSG", "Message", "Sets the system message waiting status indicator"}, - {"_MSM", "Memory Set Monitoring", "Sets bandwidth monitoring parameters for a memory device"}, - {"_MTP", "Memory Type", "Resource Descriptor field"}, - {"_NTT", "Notification Temperature Threshold", "Returns a threshold for device temperature change that requires platform notification"}, - {"_OFF", "Off", "Sets a power resource to the off state"}, - {"_ON_", "On", "Sets a power resource to the on state"}, - {"_OS_", "Operating System", "Returns a string that identifies the operating system"}, - {"_OSC", "Operating System Capabilities", "Inform AML of host features and capabilities"}, - {"_OSI", "Operating System Interfaces", "Returns supported interfaces, behaviors, and features"}, - {"_OST", "Ospm Status Indication", "Inform AML of event processing status"}, - {"_PAI", "Power Averaging Interval", "Sets the averaging interval for a power meter"}, - {"_PAR", "Parity", "Parity bits, Resource Descriptor field"}, - {"_PCL", "Power Consumer List", "Returns a list of devices powered by a power source"}, - {"_PCT", "Performance Control", "Returns processor performance control and status registers"}, - {"_PDC", "Processor Driver Capabilities", "Inform AML of processor driver capabilities"}, - {"_PDL", "P-state Depth Limit", "Returns the lowest available performance P-state"}, - {"_PHA", "Phase", "Clock phase, Resource Descriptor field"}, - {"_PIC", "PIC", "Inform AML of the interrupt model in use"}, - {"_PIF", "Power Source Information", "Returns a Power Source information block"}, - {"_PIN", "Pins", "Pin list, Resource Descriptor field"}, - {"_PLD", "Physical Device Location", "Returns a device's physical location information"}, - {"_PMC", "Power Meter Capabilities", "Returns a list of Power Meter capabilities info"}, - {"_PMD", "Power Metered Devices", "Returns a list of devices that are measured by the power meter device"}, - {"_PMM", "Power Meter Measurement", "Returns the current value of the Power Meter"}, - {"_POL", "Polarity", "Interrupt polarity, Resource Descriptor field"}, - {"_PPC", "Performance Present Capabilites", "Returns a list of the performance states currently supported by the platform"}, - {"_PPE", "Polling for Platform Error", "Returns the polling interval to retrieve Corrected Platform Error information"}, - {"_PPI", "Pin Configuration", "Resource Descriptor field"}, - {"_PR", "Processor", "Predefined scope for processor objects"}, - {"_PR0", "Power Resources for D0", "Returns a list of dependent power resources to enter state D0 (fully on)"}, - {"_PR1", "Power Resources for D1", "Returns a list of dependent power resources to enter state D1"}, - {"_PR2", "Power Resources for D2", "Returns a list of dependent power resources to enter state D2"}, - {"_PR3", "Power Resources for D3hot", "Returns a list of dependent power resources to enter state D3hot"}, - {"_PRE", "Power Resources for Enumeration", "Returns a list of dependent power resources to enumerate devices on a bus"}, - {"_PRL", "Power Source Redundancy List", "Returns a list of power source devices in the same redundancy grouping"}, - {"_PRS", "Possible Resource Settings", "Returns a list of a device's possible resource settings"}, - {"_PRT", "Pci Routing Table", "Returns a list of PCI interrupt mappings"}, - {"_PRW", "Power Resources for Wake", "Returns a list of dependent power resources for waking"}, - {"_PS0", "Power State 0", "Sets a device's power state to D0 (device fully on)"}, - {"_PS1", "Power State 1", "Sets a device's power state to D1"}, - {"_PS2", "Power State 2", "Sets a device's power state to D2"}, - {"_PS3", "Power State 3", "Sets a device's power state to D3 (device off)"}, - {"_PSC", "Power State Current", "Returns a device's current power state"}, - {"_PSD", "Processor State Dependencies", "Returns processor P-State dependencies"}, - {"_PSE", "Power State for Enumeration", "Put a bus into enumeration power mode"}, - {"_PSL", "Passive List", "Returns a list of passive cooling device objects"}, - {"_PSR", "Power Source", "Returns the power source device currently in use"}, - {"_PSS", "Performance Supported States", "Returns a list of supported processor performance states"}, - {"_PSV", "Passive", "Returns the passive trip point temperature"}, - {"_PSW", "Power State Wake", "Sets a device's wake function"}, - {"_PTC", "Processor Throttling Control", "Returns throttling control and status registers"}, - {"_PTP", "Power Trip Points", "Sets trip points for the Power Meter device"}, - {"_PTS", "Prepare To Sleep", "Inform the platform of an impending sleep transition"}, - {"_PUR", "Processor Utilization Request", "Returns the number of processors that the platform would like to idle"}, - {"_PXM", "Proximity", "Returns a device's proximity domain identifier"}, - {"_Qxx", "Query", "Embedded Controller query and SMBus Alarm control method"}, - {"_RBO", "Register Bit Offset", "Resource Descriptor field"}, - {"_RBW", "Register Bit Width", "Resource Descriptor field"}, - {"_REG", "Region", "Inform AML code of an operation region availability change"}, - {"_REV", "Revision", "Returns the revision of the ACPI specification that is implemented"}, - {"_RMV", "Remove", "Returns a device's removal ability status (docking)"}, - {"_RNG", "Range", "Memory range type, Resource Descriptor field"}, - {"_ROM", "Read-Only Memory", "Returns a copy of the ROM data for a display device"}, - {"_RT_", "Resource Type", "Resource Descriptor field"}, - {"_RTV", "Relative Temperature Values", "Returns temperature value information"}, - {"_RW_", "Read-Write Status", "Resource Descriptor field"}, - {"_RXL", "Receive Buffer Size", "Serial channel buffer, Resource Descriptor field"}, - {"_S0_", "S0 System State", "Returns values to enter the system into the S0 state"}, - {"_S1_", "S1 System State", "Returns values to enter the system into the S1 state"}, - {"_S2_", "S2 System State", "Returns values to enter the system into the S2 state"}, - {"_S3_", "S3 System State", "Returns values to enter the system into the S3 state"}, - {"_S4_", "S4 System State", "Returns values to enter the system into the S4 state"}, - {"_S5_", "S5 System State", "Returns values to enter the system into the S5 state"}, - {"_S1D", "S1 Device State", "Returns the highest D-state supported by a device when in the S1 state"}, - {"_S2D", "S2 Device State", "Returns the highest D-state supported by a device when in the S2 state"}, - {"_S3D", "S3 Device State", "Returns the highest D-state supported by a device when in the S3 state"}, - {"_S4D", "S4 Device State", "Returns the highest D-state supported by a device when in the S4 state"}, - {"_S0W", "S0 Device Wake State", "Returns the lowest D-state that the device can wake itself from S0"}, - {"_S1W", "S1 Device Wake State", "Returns the lowest D-state for this device that can wake the system from S1"}, - {"_S2W", "S2 Device Wake State", "Returns the lowest D-state for this device that can wake the system from S2"}, - {"_S3W", "S3 Device Wake State", "Returns the lowest D-state for this device that can wake the system from S3"}, - {"_S4W", "S4 Device Wake State", "Returns the lowest D-state for this device that can wake the system from S4"}, - {"_SB_", "System Bus", "Scope for device and bus objects"}, - {"_SBS", "Smart Battery Subsystem", "Returns the subsystem configuration"}, - {"_SCP", "Set Cooling Policy", "Sets the cooling policy (active or passive)"}, - {"_SDD", "Set Device Data", "Sets data for a SATA device"}, - {"_SEG", "Segment", "Returns a device's PCI Segment Group number"}, - {"_SHL", "Set Hardware Limit", "Sets the hardware limit enforced by the Power Meter"}, - {"_SHR", "Sharable", "Interrupt share status, Resource Descriptor field"}, - {"_SI_", "System Indicators", "Predefined scope"}, - {"_SIZ", "Size", "DMA transfer size, Resource Descriptor field"}, - {"_SLI", "System Locality Information", "Returns a list of NUMA system localities"}, - {"_SLV", "Slave Mode", "Mode setting, Resource Descriptor field"}, - {"_SPD", "Set Post Device", "Sets which video device will be posted at boot"}, - {"_SPE", "Speed", "Connection speed, Resource Descriptor field"}, - {"_SRS", "Set Resource Settings", "Sets a device's resource allocation"}, - {"_SRT", "Set Real Time", "Interrupt triggering, Resource Descriptor field"}, - {"_SRV", "IPMI Spec Revision", "See the Intelligent Platform Management Interface Specification"}, - {"_SST", "System Status", "Sets the system status indicator"}, - {"_STA", "Status", " (1) returns the current status of a device"}, - {"_STB", "Stop Bits", "Serial channel stop bits, Resource Descriptor field"}, - {"_STM", "Set Timing Mode", "Sets an IDE controller transfer timings"}, - {"_STP", "Set Expired Timer Wake Policy", "Sets expired timer policies of the wake alarm device"}, - {"_STR", "String", "Returns a device's description string"}, - {"_STV", "Set Timer Value", "Set timer values of the wake alarm device"}, - {"_SUB", "Subsystem ID", "Returns the subsystem ID for a device"}, - {"_SUN", "Slot User Number", "Returns the slot unique ID number"}, - {"_SWS", "System Wake Source", "Returns the source event that caused the system to wake"}, - {"_T_x", "Temporary", "Reserved for use by ASL compilers"}, - {"_TC1", "Thermal Constant 1", "Returns TC1 for the passive cooling formula"}, - {"_TC2", "Thermal Constant 2", "Returns TC2 for the passive cooling formula"}, - {"_TDL", "T-State Depth Limit", "Returns the _TSS entry number of the lowest power throttling state"}, - {"_TIP", "Expired Timer Wake Policy", "Returns timer policies of the wake alarm device"}, - {"_TIV", "Timer Values", "Returns remaining time of the wake alarm device"}, - {"_TMP", "Temperature", "Returns a thermal zone's current temperature"}, - {"_TPC", "Throttling Present Capabilities", "Returns the current number of supported throttling states"}, - {"_TPT", "Trip Point Temperature", "Inform AML that a device's embedded temperature sensor has crossed a temperature trip point"}, - {"_TRA", "Translation", "Address translation offset, Resource Descriptor field"}, - {"_TRS", "Translation Sparse", "Sparse/dense flag, Resource Descriptor field"}, - {"_TRT", "Thermal Relationship Table", "Returns thermal relationships between platform devices"}, - {"_TSD", "Throttling State Dependencies", "Returns a list of T-state dependencies"}, - {"_TSF", "Type-Specific Flags", "Resource Descriptor field"}, - {"_TSP", "Thermal Sampling Period", "Returns the thermal sampling period for passive cooling"}, - {"_TSS", "Throttling Supported States", "Returns supported throttling state information"}, - {"_TST", "Temperature Sensor Threshold", "Returns the minimum separation for a device's temperature trip points"}, - {"_TTP", "Translation Type", "Translation/static flag, Resource Descriptor field"}, - {"_TTS", "Transition To State", "Inform AML of an S-state transition"}, - {"_TXL", "Transmit Buffer Size", "Serial Channel buffer, Resource Descriptor field"}, - {"_TYP", "Type", "DMA channel type (speed), Resource Descriptor field"}, - {"_TZ_", "Thermal Zone", "Predefined scope: ACPI 1.0"}, - {"_TZD", "Thermal Zone Devices", "Returns a list of device names associated with a Thermal Zone"}, - {"_TZM", "Thermal Zone Member", "Returns a reference to the thermal zone of which a device is a member"}, - {"_TZP", "Thermal Zone Polling", "Returns a Thermal zone's polling frequency"}, - {"_UID", "Unique ID", "Return a device's unique persistent ID"}, - {"_UPC", "USB Port Capabilities", "Returns a list of USB port capabilities"}, - {"_UPD", "User Presence Detect", "Returns user detection information"}, - {"_UPP", "User Presence Polling", "Returns the recommended user presence polling interval"}, - {"_VEN", "Vendor Data", "Resource Descriptor field"}, - {"_VPO", "Video Post Options", "Returns the implemented video post options"}, - {"_WAK", "Wake", "Inform AML that the system has just awakened"}, - {"_Wxx", "Wake Event", "Method executed as a result of a wake event"}, - {NULL, NULL, NULL} -}; diff --git a/source/tools/acpisrc/acpisrc.h b/source/tools/acpisrc/acpisrc.h index 3c0e5dc01d05..bc3f497e89c1 100644 --- a/source/tools/acpisrc/acpisrc.h +++ b/source/tools/acpisrc/acpisrc.h @@ -263,7 +263,8 @@ AsTrimLines ( void AsMixedCaseToUnderscores ( - char *Buffer); + char *Buffer, + char *Filename); void AsCountTabs ( diff --git a/source/tools/acpisrc/ascase.c b/source/tools/acpisrc/ascase.c index 232ebe8b18fc..7e115b7aeb65 100644 --- a/source/tools/acpisrc/ascase.c +++ b/source/tools/acpisrc/ascase.c @@ -161,75 +161,87 @@ AsLowerCaseString ( void AsMixedCaseToUnderscores ( - char *Buffer) + char *Buffer, + char *Filename) { UINT32 Length; char *SubBuffer = Buffer; char *TokenEnd; char *TokenStart = NULL; char *SubString; - BOOLEAN HasLowerCase = FALSE; + UINT32 LineNumber = 1; + UINT32 Count; + /* + * Examine the entire buffer (contains the entire file) + * We are only interested in these tokens: + * Escape sequences - ignore entire sequence + * Single-quoted constants - ignore + * Quoted strings - ignore entire string + * Translation escape - starts with /,*,! + * Decimal and hex numeric constants - ignore entire token + * Entire uppercase token - ignore, it is a macro or define + * Starts with underscore, then a lowercase or digit: convert + */ while (*SubBuffer) { - /* Ignore whitespace */ - - if (*SubBuffer == ' ') - { - while (*SubBuffer == ' ') - { - SubBuffer++; - } - TokenStart = NULL; - HasLowerCase = FALSE; - continue; - } - - /* Ignore commas */ - - if ((*SubBuffer == ',') || - (*SubBuffer == '>') || - (*SubBuffer == ')')) + if (*SubBuffer == '\n') { + LineNumber++; SubBuffer++; - TokenStart = NULL; - HasLowerCase = FALSE; continue; } - /* Check for quoted string -- ignore */ + /* Ignore standard escape sequences (\n, \r, etc.) Not Hex or Octal escapes */ + + if (*SubBuffer == '\\') + { + SubBuffer += 2; + continue; + } + + /* Ignore single-quoted characters */ + + if (*SubBuffer == '\'') + { + SubBuffer += 3; + continue; + } + + /* Ignore standard double-quoted strings */ if (*SubBuffer == '"') { SubBuffer++; + Count = 0; while (*SubBuffer != '"') { - if (!*SubBuffer) + Count++; + if ((!*SubBuffer) || + (Count > 8192)) { + printf ("Found an unterminated quoted string!, line %u: %s\n", + LineNumber, Filename); return; } - /* Handle embedded escape sequences */ + /* Handle escape sequences */ if (*SubBuffer == '\\') { SubBuffer++; } + SubBuffer++; } SubBuffer++; continue; } - if (islower ((int) *SubBuffer)) - { - HasLowerCase = TRUE; - } - /* - * Check for translation escape string -- means to ignore - * blocks of code while replacing + * Check for translation escape string. It means to ignore + * blocks of code during this code conversion. */ if ((SubBuffer[0] == '/') && (SubBuffer[1] == '*') && @@ -238,161 +250,209 @@ AsMixedCaseToUnderscores ( SubBuffer = strstr (SubBuffer, "!*/"); if (!SubBuffer) { + printf ("Found an unterminated translation escape!, line %u: %s\n", + LineNumber, Filename); return; } continue; } - /* Ignore hex constants */ + /* Ignore anything that starts with a number (0-9) */ - if (SubBuffer[0] == '0') + if (isdigit ((int) *SubBuffer)) { - if ((SubBuffer[1] == 'x') || - (SubBuffer[1] == 'X')) + /* Ignore hex constants */ + + if ((SubBuffer[0] == '0') && + ((SubBuffer[1] == 'x') || (SubBuffer[1] == 'X'))) { SubBuffer += 2; - while (isxdigit ((int) *SubBuffer)) - { - SubBuffer++; - } - continue; } - } -/* OBSOLETE CODE, all quoted strings now completely ignored. */ -#if 0 - /* Ignore format specification fields */ + /* Skip over all digits, both decimal and hex */ - if (SubBuffer[0] == '%') - { - SubBuffer++; - - while ((isalnum (*SubBuffer)) || (*SubBuffer == '.')) + while (isxdigit ((int) *SubBuffer)) { SubBuffer++; } - - continue; - } -#endif - - /* Ignore standard escape sequences (\n, \r, etc.) Not Hex or Octal escapes */ - - if (SubBuffer[0] == '\\') - { - SubBuffer += 2; + TokenStart = NULL; continue; } /* - * Ignore identifiers that already contain embedded underscores - * These are typically C macros or defines (all upper case) - * Note: there are some cases where identifiers have underscores - * AcpiGbl_* for example. HasLowerCase flag handles these. + * Check for fully upper case identifiers. These are usually macros + * or defines. Allow decimal digits and embedded underscores. */ - if ((*SubBuffer == '_') && (!HasLowerCase) && (TokenStart)) + if (isupper ((int) *SubBuffer)) { - /* Check the rest of the identifier for any lower case letters */ - - SubString = SubBuffer; - while ((isalnum ((int) *SubString)) || (*SubString == '_')) + SubString = SubBuffer + 1; + while ((isupper ((int) *SubString)) || + (isdigit ((int) *SubString)) || + (*SubString == '_')) { - if (islower ((int) *SubString)) - { - HasLowerCase = TRUE; - } SubString++; } - /* If no lower case letters, we can safely ignore the entire token */ - - if (!HasLowerCase) + /* + * For the next character, anything other than a lower case + * means that the identifier has terminated, and contains + * exclusively Uppers/Digits/Underscores. Ignore the entire + * identifier. + */ + if (!islower ((int) *SubString)) { - SubBuffer = SubString; + SubBuffer = SubString + 1; continue; } } - /* A capital letter may indicate the start of a token; save it */ - - if (isupper ((int) SubBuffer[0])) + /* + * These forms may indicate an identifier that can be converted: + * (Ax) + * (An) + */ + if (isupper ((int) SubBuffer[0]) && + ((islower ((int) SubBuffer[1])) || isdigit ((int) SubBuffer[1]))) { TokenStart = SubBuffer; - } + SubBuffer++; - /* - * Convert each pair of letters that matches the form: - * - * - * to - * - */ - else if ((islower ((int) SubBuffer[0]) || isdigit ((int) SubBuffer[0])) && - (isupper ((int) SubBuffer[1]))) - { - if (isdigit ((int) SubBuffer[0])) + while (1) { - /* Ignore */ - /* Ignore */ + /* Walk over the lower case letters and decimal digits */ - if (isupper ((int) *(SubBuffer-1)) || - *(SubBuffer-1) == '_') + while (islower ((int) *SubBuffer) || + isdigit ((int) *SubBuffer)) { SubBuffer++; - continue; } - } - /* - * Matched the pattern. - * Find the end of this identifier (token) - */ - TokenEnd = SubBuffer; - while ((isalnum ((int) *TokenEnd)) || (*TokenEnd == '_')) - { - TokenEnd++; - } + /* Check for end of line or end of token */ - /* Force the UpperCase letter (#2) to lower case */ - - Gbl_MadeChanges = TRUE; - SubBuffer[1] = (char) tolower ((int) SubBuffer[1]); - - SubString = TokenEnd; - Length = 0; - - while (*SubString != '\n') - { - /* - * If we have at least two trailing spaces, we can get rid of - * one to make up for the newly inserted underscore. This will - * help preserve the alignment of the text - */ - if ((SubString[0] == ' ') && - (SubString[1] == ' ')) + if (*SubBuffer == '\n') { - Length = SubString - SubBuffer - 2; + LineNumber++; break; } - SubString++; - } + if (*SubBuffer == ' ') + { + /* Check for form "Axx - " in a parameter header description */ - if (!Length) - { - Length = strlen (&SubBuffer[1]); - } + while (*SubBuffer == ' ') + { + SubBuffer++; + } - memmove (&SubBuffer[2], &SubBuffer[1], Length + 1); - SubBuffer[1] = '_'; - SubBuffer +=2; + SubBuffer--; + if ((SubBuffer[1] == '-') && + (SubBuffer[2] == ' ')) + { + if (TokenStart) + { + *TokenStart = (char) tolower ((int) *TokenStart); + } + } + break; + } - /* Lower case the leading character of the token */ + /* + * Ignore these combinations: + * + * + * + */ + if (isdigit ((int) *SubBuffer)) + { + if (isalnum ((int) *(SubBuffer-1)) || + *(SubBuffer-1) == '_') + { + break; + } + } - if (TokenStart) - { - *TokenStart = (char) tolower ((int) *TokenStart); - TokenStart = NULL; + /* Ignore token if next character is not uppercase or digit */ + + if (!isupper ((int) *SubBuffer) && + !isdigit ((int) *SubBuffer)) + { + break; + } + + /* + * Form (AxxB): + * Convert leading character of the token to lower case + */ + if (TokenStart) + { + *TokenStart = (char) tolower ((int) *TokenStart); + TokenStart = NULL; + } + + /* Find the end of this identifier (token) */ + + TokenEnd = SubBuffer - 1; + while ((isalnum ((int) *TokenEnd)) || + (*TokenEnd == '_')) + { + TokenEnd++; + } + + SubString = TokenEnd; + Length = 0; + + while (*SubString != '\n') + { + /* + * If we have at least two trailing spaces, we can get rid of + * one to make up for the newly inserted underscore. This will + * help preserve the alignment of the text + */ + if ((SubString[0] == ' ') && + (SubString[1] == ' ')) + { + Length = SubString - SubBuffer - 1; + break; + } + + SubString++; + } + + if (!Length) + { + Length = strlen (&SubBuffer[0]); + } + + /* + * Within this identifier, convert this pair of letters that + * matches the form: + * + * + * to + * + */ + Gbl_MadeChanges = TRUE; + + /* Insert the underscore */ + + memmove (&SubBuffer[1], &SubBuffer[0], Length + 1); + SubBuffer[0] = '_'; + + /* + * If we have , leave them as-is + * Enables transforms like: + * LocalFADT -> local_FADT + */ + if (isupper ((int) SubBuffer[2])) + { + SubBuffer += 1; + break; + } + + /* Lower case the original upper case letter */ + + SubBuffer[1] = (char) tolower ((int) SubBuffer[1]); + SubBuffer += 2; } } @@ -570,5 +630,3 @@ AsUppercaseTokens ( } } } - - diff --git a/source/tools/acpisrc/asfile.c b/source/tools/acpisrc/asfile.c index ce26adc3d8e4..4e79cf35885c 100644 --- a/source/tools/acpisrc/asfile.c +++ b/source/tools/acpisrc/asfile.c @@ -443,7 +443,7 @@ AsConvertFile ( case CVT_MIXED_CASE_TO_UNDERSCORES: - AsMixedCaseToUnderscores (FileBuffer); + AsMixedCaseToUnderscores (FileBuffer, Filename); break; diff --git a/source/tools/acpisrc/asmain.c b/source/tools/acpisrc/asmain.c index baf4e2fc34c7..b1f3402de9cd 100644 --- a/source/tools/acpisrc/asmain.c +++ b/source/tools/acpisrc/asmain.c @@ -245,10 +245,18 @@ AsDisplayStats ( printf ("%8u Lines of non-comment whitespace\n", Gbl_WhiteLines); printf ("%8u Lines of comments\n", Gbl_CommentLines); printf ("%8u Long lines found\n", Gbl_LongLines); - printf ("%8.1f Ratio of code to whitespace\n", - ((float) Gbl_SourceLines / (float) Gbl_WhiteLines)); - printf ("%8.1f Ratio of code to comments\n", - ((float) Gbl_SourceLines / (float) (Gbl_CommentLines + Gbl_NonAnsiComments))); + + if (Gbl_WhiteLines > 0) + { + printf ("%8.1f Ratio of code to whitespace\n", + ((float) Gbl_SourceLines / (float) Gbl_WhiteLines)); + } + + if ((Gbl_CommentLines + Gbl_NonAnsiComments) > 0) + { + printf ("%8.1f Ratio of code to comments\n", + ((float) Gbl_SourceLines / (float) (Gbl_CommentLines + Gbl_NonAnsiComments))); + } if (!Gbl_TotalLines) { diff --git a/source/tools/acpisrc/astable.c b/source/tools/acpisrc/astable.c index 1f93e33dfc34..400f56236170 100644 --- a/source/tools/acpisrc/astable.c +++ b/source/tools/acpisrc/astable.c @@ -237,6 +237,7 @@ ACPI_TYPED_IDENTIFIER_TABLE AcpiIdentifiers[] = { {"ACPI_GPE_HANDLER", SRC_TYPE_SIMPLE}, {"ACPI_GPE_HANDLER_INFO", SRC_TYPE_STRUCT}, {"ACPI_GPE_INDEX_INFO", SRC_TYPE_STRUCT}, + {"ACPI_GPE_NOTIFY_INFO", SRC_TYPE_STRUCT}, {"ACPI_GPE_REGISTER_INFO", SRC_TYPE_STRUCT}, {"ACPI_GPE_WALK_INFO", SRC_TYPE_STRUCT}, {"ACPI_GPE_XRUPT_INFO", SRC_TYPE_STRUCT}, From 1e7eabd307e3c1452869cc800798dad75b1d138f Mon Sep 17 00:00:00 2001 From: Jung-uk Kim Date: Thu, 21 Jun 2012 18:22:50 +0000 Subject: [PATCH 2/2] Fix "comparison is always true due to limited range of data type" warning from GCC in the base system. Note this patch was submitted upstream and it will appear in the next ACPICA release. Discussed with: Moore, Robert (robert dot moore at intel dot com) --- source/compiler/aslsupport.l | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/source/compiler/aslsupport.l b/source/compiler/aslsupport.l index 2f739001bc7b..f63519cd3fd5 100644 --- a/source/compiler/aslsupport.l +++ b/source/compiler/aslsupport.l @@ -92,7 +92,7 @@ static void AslDoLineDirective ( void) { - UINT8 c; + int c; char *Token; UINT32 LineNumber; char *Filename; @@ -103,7 +103,7 @@ AslDoLineDirective ( Gbl_LineBufPtr = Gbl_CurrentLineBuffer; - while ((c = (UINT8) input()) != '\n' && c != EOF) + while ((c = input()) != '\n' && c != EOF) { *Gbl_LineBufPtr = c; Gbl_LineBufPtr++; @@ -430,8 +430,8 @@ static char AslDoComment ( void) { - char c; - char c1 = 0; + int c; + int c1 = 0; AslInsertLineBuffer ('/'); @@ -441,7 +441,7 @@ loop: /* Eat chars until end-of-comment */ - while ((c = (char) input()) != '*' && c != EOF) + while ((c = input()) != '*' && c != EOF) { AslInsertLineBuffer (c); c1 = c; @@ -468,7 +468,7 @@ loop: AslInsertLineBuffer (c); - if ((c1 = (char) input()) != '/' && c1 != EOF) + if ((c1 = input()) != '/' && c1 != EOF) { unput(c1); goto loop; @@ -511,13 +511,13 @@ static char AslDoCommentType2 ( void) { - char c; + int c; AslInsertLineBuffer ('/'); AslInsertLineBuffer ('/'); - while ((c = (char) input()) != '\n' && c != EOF) + while ((c = input()) != '\n' && c != EOF) { AslInsertLineBuffer (c); } @@ -553,7 +553,7 @@ AslDoStringLiteral ( char *StringBuffer = MsgBuffer; char *EndBuffer = MsgBuffer + ASL_MSG_BUFFER_SIZE; char *CleanString; - char StringChar; + int StringChar; UINT32 State = ASL_NORMAL_CHAR; UINT32 i = 0; UINT8 Digit; @@ -566,7 +566,7 @@ AslDoStringLiteral ( * source line buffer. */ AslInsertLineBuffer ('\"'); - while ((StringChar = (char) input()) != EOF) + while ((StringChar = input()) != EOF) { AslInsertLineBuffer (StringChar);